# Perl script to drive MSDEV / Visual C++ 5.0 # Use Perl-Win32 from http://www.activestate.com/software/Perl_for_Win32.htm # dank@alumni.caltech.edu # See also: # http://www.alumni.caltech.edu/~dank/msdev.htm sub printlog { if ($printlog eq "") { open(PRINTLOG_FILE, ">$logfname") || die "Can't create $logfname"; $printlog = 1; } print @_; print PRINTLOG_FILE @_; } sub build_proj { #builds projects w/ the dsw file using OLE objects my ($workspace_file, $cfg_line) = @_; my ($log_file) = $workspace_file; if (!($log_file =~ s/.dsw$/.plg/i)) { &printlog("Workspace file $workspace_file doesn't end in .dsw?\n"); return; } unlink $log_file; my $app = CreateObject OLE "MSDev.Application"; $app->{'Visible'} = 1; &printlog( "Opening $workspace_file\n"); $app->Documents->Open($workspace_file); my $proj_config = $app->ActiveProject->Configurations; my $config_count = $proj_config->Count; for ($num = 1; $num <= $config_count; $num++) { my $config = $app->ActiveProject->Configurations($num); if ($config->Name =~ /$cfg_line$/i) { &printlog( "Building ".$config->Name."\n"); #$app->RebuildAll($config); $app->Build($config); if (!open(LOG_FILE, $log_file)) { &printlog("Can't open msdev log file $log_file\n"); next; } my(@log) = ; close(LOG_FILE); &printlog(@log); foreach (@log) { if (/ (\d+) error.s., (\d+) warning/) { my($nerror) = $1; my($nwarning) = $2; &printlog("$nerror errors, $nwarning warnings\n"); if ($nerror > 0) { &printlog("$nerror errors building ".$config->Name." from $workspace_file\n"); $app->Documents->CloseAll; $app->Quit; die "Build failed."; } } } } } $app->Documents->CloseAll; $app->Quit; } if (@ARGV < 2) { die "Usage: perl dswmake.pl path-to-dsw-file configurations-wildcard [logfile]\ Logs results to stdout and to logfile [default: dswmake.log]\ Examples:\ to build all configurations: \ perl build.pl c:\\titanium\\mw2win\\mw2.dsw .\ to build all debug configurations: \ perl build.pl c:\\titanium\\mw2win\\mw2.dsw Debug\ "; } use OLE; $logfname = "dswmake.log"; if (@ARGV >= 3) { $logfname = $ARGV[2]; } &build_proj($ARGV[0], $ARGV[1]); #&build_proj('c:\titanium\mw2win\mw2win.dsw','mw2win - Win32 Ti MercNet Debug'); #&build_proj('c:\titanium\mw2win\mw2.dsw', "Mw2 - Win32 DLL_debug"); #&build_proj('c:\titanium\mw2win\mw2win.dsw', '.'); #&build_proj('c:\titanium\mw2win\mw2.dsw', '.'); #&build_proj('c:\titanium\wnetshel\wnetshel DLL.dsw', '.'); print "Done\n";