#!/usr/bin/env perl
require 5.008;
BEGIN { $^W = 1; }
use strict;

my $whoami = ($0 =~ m,([^/\\]*)$,) ? $1 : $0;
#my $dirname = ($0 =~ m,(.*)[/\\][^/\\]+$,) ? $1 : ".";

my @includes = ();
my @defines = ();
my @libdirs = ();
my @libs = ();
my @inputs = ();
my $out = undef;
my $c = 0;
my $cpp = 0;
while (@ARGV)
{
    my $arg = shift(@ARGV);
    if ($arg =~ s/^-I//)
    {
	push(@includes, $arg);
    }
    elsif ($arg =~ s/-L//)
    {
	push(@libdirs, $arg);
    }
    elsif ($arg =~ s/-l//)
    {
	push(@libs, $arg);
    }
    elsif ($arg =~ s/-D//)
    {
	push(@defines, $arg);
    }
    elsif ($arg eq '-c')
    {
	$c = 1;
    }
    elsif ($arg eq '-E')
    {
	$cpp = 1;
    }
    elsif ($arg eq '-o')
    {
	$out = shift(@ARGV);
    }
    else
    {
	push(@inputs, $arg);
    }
}

my @cmd = (qw(cl -nologo -O2 -Zi -Gy -MD));
if ($c || $cpp)
{
    push(@cmd, ($cpp ? '-E' : '-c'));
    push(@cmd, @inputs);
    foreach my $d (@defines)
    {
	push(@cmd, "-D$d");
    }
    foreach my $i (@includes)
    {
	push(@cmd, "-I$i");
    }
}
else
{
    push(@cmd, @inputs, '/link', '/incremental:no');
    if (defined $out)
    {
	push(@cmd, "/OUT:$out");
    }
    foreach my $l (@libdirs)
    {
	push(@cmd, "/LIBPATH:$l");
    }
    foreach my $l (@libs)
    {
	push(@cmd, "$l.lib");
    }
}

print join(' ', @cmd), "\n";
my $r = system(@cmd);
exit ($r == 0 ? 0 : 2);
