diff options
Diffstat (limited to 'ACE/bin/msvc_static_compile.pl')
-rwxr-xr-x | ACE/bin/msvc_static_compile.pl | 410 |
1 files changed, 410 insertions, 0 deletions
diff --git a/ACE/bin/msvc_static_compile.pl b/ACE/bin/msvc_static_compile.pl new file mode 100755 index 00000000000..1580302d28e --- /dev/null +++ b/ACE/bin/msvc_static_compile.pl @@ -0,0 +1,410 @@ +# $Id$ +# Win32 auto_compile script. +if (!$ENV{ACE_ROOT}) { + $ACE_ROOT = getcwd ()."\\"; + warn "ACE_ROOT not defined, defaulting to ACE_ROOT=$ACE_ROOT"; +} +else { + $ACE_ROOT = $ENV{ACE_ROOT}; +} + +use lib "$ENV{ACE_ROOT}/bin"; + +use File::Find; +use PerlACE::Run_Test; +use Cwd; + +@directories = (); + +@ace_dirs = ("$ACE_ROOT\\ace", + "$ACE_ROOT\\ACEXML\\common", + "$ACE_ROOT\\ACEXML\\parser", + "$ACE_ROOT\\ACEXML\\apps", + "$ACE_ROOT\\ACEXML\\tests", + "$ACE_ROOT\\ACEXML\\examples", + "$ACE_ROOT\\apps", + "$ACE_ROOT\\ASNMP", + "$ACE_ROOT\\examples", + "$ACE_ROOT\\netsvcs", + "$ACE_ROOT\\performance-tests", + "$ACE_ROOT\\tests", + "$ACE_ROOT\\websvcs"); + +$debug = 0; +$verbose = 0; +$print_status = 0; +$Ignore_errors = 0; # By default, bail out if an error occurs. +$Build_LIB = 0; +$Build_Debug = 0; +$Build_Release = 0; +$Build_All = 1; +$build_core_only = 0; +$Build_Cmd = "/BUILD"; +$use_custom_dir = 0; +$useenv = ''; +$vc7 = 0; +$name_mod = ''; +$mod_name = 0; +$proj_ext = '.dsp'; + +# Build +sub Build ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("msdev.com $project /MAKE \"$config\" $Build_Cmd $useenv"); + } +} + +# Build +sub Build_VC7 ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("devenv.com $project $Build_Cmd $config $useenv"); + } +} + +sub Find_Dsw (@) +{ + my (@dir) = @_; + @array = (); + + sub wanted_dsw { + $array[++$#array] = + $File::Find::name if ($File::Find::name =~ /\.dsw$/i); + } + + find (\&wanted_dsw, @dir); + + print "List of dsw's \n" if ($verbose == 1); + return @array; +} + +sub Find_Sln (@) +{ + my (@dir) = @_; + @array = (); + + sub wanted_sln { + $array[++$#array] = + $File::Find::name if ($File::Find::name =~ /\.sln$/i); + } + + find (\&wanted_sln, @dir); + + print "List of sln's \n" if ($verbose == 1); + return @array; +} + +sub Rename_Files ($$) +{ + my ($target) = shift; + my ($newext) = shift; + my (@array) = (); + + sub wanted_file { + my ($text) = shift; + my ($next) = shift; + if ($File::Find::name =~ /^(.*)$text$/i) { + my ($newname) = $1 . $next; + rename ($File::Find::name, $newname); + } + } + + find (sub { wanted_file ($target, $newext) }, $ACE_ROOT); +} + +# Only builds the core libraries. +sub Build_Core () +{ + print STDERR "Building Core of ACE/TAO\n" if ($print_status == 1); + print "\nmsvc_static_compile: Building Core of ACE/TAO\n"; + + print "Build \n" if ($verbose); + print "Debug " if ($verbose) && ($Build_Debug); + print "Release " if ($verbose) && ($Build_Release); + print "LIB " if ($verbose) && ($Build_LIB); + print "\n" if ($verbose); + + my @core_list = (); + + if ($Build_LIB) { + push (@file_list, "/bin/msvc_static_order.lst"); + + foreach my$test_lst (@file_list) { + my $config_list = new PerlACE::ConfigList; + $config_list->load ($ACE_ROOT.$test_lst); + + foreach $test ($config_list->valid_entries ()) { + if ($mod_name) { + @plist = split (/\//, $test); + $fname = pop @plist; + $fname_mod = $name_mod; + $fname_mod =~ s/\*/$fname/; + push @plist,($fname_mod); + push (@core_list, join('/', @plist) . $proj_ext); + } + else { + push (@core_list, $test . $proj_ext); + } + } + } + + + if ( $vc7 ) { + foreach $c (@core_list) { + if ($Build_Debug) { + $Status = Build_VC7 ($c, "debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build_VC7 ($c, "release"); + return if $Status != 0 && !$Ignore_errors; + } + } + } + else { + foreach $c (@core_list) { + if ($Build_Debug) { + $Status = Build ($c, "ALL - Win32 Debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build ($c, "ALL - Win32 Release"); + return if $Status != 0 && !$Ignore_errors; + } + } + } + } +} + +sub Build_All () +{ + my @configurations = Find_Dsw (@directories); + + print STDERR "Building selected projects\n" if ($print_status == 1); + print "\nmsvc_static_compile: Building selected projects\n"; + + $count = 0; + foreach $c (@configurations) { + print STDERR "Configuration ".$count++." of ".$#configurations."\n" if ($print_status == 1); + if ($Build_Debug) { + $Status = Build ($c, "ALL - Win32 Debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build ($c, "ALL - Win32 Release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + +sub Build_All_VC7 () +{ + my @configurations = Find_Sln (@directories); + + print STDERR "Building selected projects\n" if ($print_status == 1); + print "\nmsvc_static_compile: Building selected projects\n"; + + $count = 0; + foreach $c (@configurations) { + print STDERR "Configuration ".$count++." of ".$#configurations."\n" if ($print_status == 1); + if ($Build_Debug) { + $Status = Build_VC7 ($c, "debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build_VC7 ($c, "release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + + +## Parse command line argument +while ( $#ARGV >= 0 && $ARGV[0] =~ /^(-|\/)/ ) +{ + if ($ARGV[0] =~ '-k') { # Ignore errors + print "Ignore errors\n" if ( $verbose ); + $Ignore_errors = 1; + } + elsif ($ARGV[0] =~ /^-d$/i) { # debug + $debug = 1; + } + elsif ($ARGV[0] =~ '-vc7') { # Use VC7 project and solution files. + print "Using VC7 files\n" if ( $verbose ); + $vc7 = 1; + $proj_ext = '.vcproj'; + } + elsif ($ARGV[0] =~ '-vc8') { # Use VC8 project and solution files. + print "Using VC8 files\n" if ( $verbose ); + $vc7 = 1; # VC8 is like VC7 + $proj_ext = '.vcproj'; + } + elsif ($ARGV[0] =~ '-v') { # verbose mode + $verbose = 1; + } + elsif ($ARGV[0] =~ '-name_modifier') { # use MPC name_modifier for project + shift; + print "Setting name_modifier $ARGV[0]\n" if ( $verbose ); + $name_mod = $ARGV[0]; + $mod_name = 1; + } + elsif ($ARGV[0] =~ '-s') { # status messages + $print_status = 1; + } + elsif ($ARGV[0] =~ '-u') { # USEENV + print "Using Environment\n" if ($verbose); + $useenv = '/USEENV'; + } + elsif ($ARGV[0] =~ '-CORE') { # Build the core of ace/tao + print "Building only Core\n" if ( $verbose ); + $build_core_only = 1; + } + elsif ($ARGV[0] =~ '-ACE') { # Build ACE and its programs + print "Building ACE\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, @ace_dirs; + } + elsif ($ARGV[0] =~ '-TAO') { # Build TAO and its programs + print "Building TAO\n" if ( $verbose ); + $use_custom_dir = 1; + # Other tests depend on the lib in this dir so we need to force it + # to the front of the build list. This is pretty ugly. + push @directories, ("$ACE_ROOT\\TAO\\orbsvcs\\tests\\Notify\\lib"); + push @directories, ("$ACE_ROOT\\TAO"); + } + elsif ($ARGV[0] =~ '-dir') { # Compile only a specific directory + shift; + print "Adding directory $ARGV[0]\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, $ARGV[0]; + } + elsif ($ARGV[0] =~ '-rebuild') { # Rebuild all + print "Rebuild all\n" if ( $verbose ); + $Build_Cmd = "/REBUILD"; + } + elsif ($ARGV[0] =~ '-clean') { # Clean + print "Cleaning all\n" if ( $verbose ); + $Build_Cmd = "/CLEAN"; + } + elsif ($ARGV[0] =~ '-Debug') { # Debug versions + print "Building Debug Version\n" if ( $verbose ); + $Build_Debug = 1; + $Build_All = 0; + } + elsif ($ARGV[0] =~ '-Release') { # Release versions + print "Building Release Version\n" if ( $verbose ); + $Build_Release = 1; + $Build_All = 0; + } + elsif ($ARGV[0] =~ '-LIB') { # Build LIB only + print "Build LIB only\n" if ( $verbose ); + $Build_LIB = 1; + $Build_All = 0; + } + elsif ($ARGV[0] =~ '-(\?|h)') { # Help information + print "Options\n"; + print "-d = Debug (only print out projects)\n"; + print "-k = Ignore Errors\n"; + print "-v = Script verbose Mode\n"; + print "-s = Print status messages to STDERR\n"; + print "-u = Tell MSVC to use the environment\n"; + print "-vc7 = Use MSVC 7 toolset\n"; + print "-vc8 = Use MSVC 8 toolset\n"; + print "-name_modifier <mod> = Use MPC name_modifier to match projects\n"; + print "\n"; + print "-CORE = Build the Core libraries\n"; + print "-ACE = Build ACE and its programs\n"; + print "-TAO = Build TAO and its programs\n"; + print "-dir <dir> = Compile custom directories\n"; + print "\n"; + print "-rebuild = Rebuild All\n"; + print "-clean = Clean\n"; + print "-Debug = Compile Debug versions\n"; + print "-Release = Compile Release versions\n"; + print "-LIB = Comple LIB Configurations\n"; + exit; + } + else { + warn "$0: unknown option $ARGV[0]\n"; + die -1; + } + shift; +} + +if (!$Build_DLL && !$Build_LIB) { + $Build_DLL = 1; + $Build_LIB = 1; +} + +if (!$Build_Debug && !$Build_Release) { + $Build_Debug = 1; + $Build_Release = 1; +} + +if ($#directories < 0) { + @directories = ($ACE_ROOT); +} + +print "msvc_static_compile: Begin\n"; +print STDERR "Beginning Core Build\n" if ($print_status == 1); +if (!$use_custom_dir || $build_core_only) { + if ($vc7) { + ## devenv is too smart for it's own good. When a .vcproj is specified, + ## as is done when building the CORE, it will find the solution to which + ## the .vcproj belongs and begin to build additional portions of the + ## solution. This is not what we want as dependencies are not set up + ## between library projects. + my($sln) = '.sln'; + my($core_sln) = $sln . '.build_core'; + + Rename_Files ($sln, $core_sln); + + foreach my $sig ('INT', 'TERM') { + $SIG{$sig} = sub { print STDERR "Renaming solution files, please be patient...\n"; + Rename_Files ($core_sln, $sln); + exit(1); }; + } + + Build_Core (); + + Rename_Files ($core_sln, $sln); + + foreach my $sig ('INT', 'TERM') { + $SIG{$sig} = 'DEFAULT'; + } + } + else { + Build_Core (); + } +} +print STDERR "Beginning Full Build\n" if ($print_status == 1); +if ( $vc7 ) { + Build_All_VC7 if !$build_core_only; +} +else { + Build_All if !$build_core_only; +} + +print "msvc_static_compile: End\n"; +print STDERR "End\n" if ($print_status == 1); |