diff options
Diffstat (limited to 'ACE/bin/make_release')
-rwxr-xr-x | ACE/bin/make_release | 1061 |
1 files changed, 1061 insertions, 0 deletions
diff --git a/ACE/bin/make_release b/ACE/bin/make_release new file mode 100755 index 00000000000..ab2d1bd4efb --- /dev/null +++ b/ACE/bin/make_release @@ -0,0 +1,1061 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# Creates an ACE or TAO kit. Intended to be called from the +# ACE or TAO top-level GNUmakefiles. +# +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +use strict; +require Cwd; + +my $usage="usage: $0 [-?] [-i] [-k <kit>] [-n] [-v <version>] " . + "[-ta <ACE tag>] [-tt <TAO tag>] [-tc <CIAO tag>] " . + "[-u]\n"; +my $long_usage=" -? option prints this message\n" . + " -i to install to public web server directory\n" . + " -k <kit>, where <kit> is ace, tao, ciao or ace+tao+ciao \n" . + " -n option prints what would be done, but doesn't do it\n" . + " -v <version>, where <version> is major, minor, or beta (default)\n" . + " -ta <ACE tag>, to specify ACE tag to be use for checkout (export)\n" . + " -tt <TAO tag>, to specify TAO tag to be use for checkout (export)\n" . + " -tc <CIAO tag>, to specify CIAO tag to be use for checkout (export)\n" . + " -u to update versions\n"; + +######## +######## Sanity checks. +######## +$ENV{'SIGNATURE'} || + die "$0: must set your SIGNATURE environment variable\n"; + +$ENV{'MAILID'} || + die "$0: must set your MAILID environment variable\n"; + + +my $which_host = $ENV{'OSTYPE'}; + +my $release_host = substr ($which_host, 0, 5); + +## We are not going to use any Sun boxes for the release anymore.. + +if (! ($release_host eq 'linux')){ + die "$0: You are on the wrong OS ($release_host). Please move to a linux box.\n"; +} + +my $perl_path = '/usr/bin/perl'; + +&can_run($perl_path.' -V') || + die "$0: perl path is incorrect, please fix the script\n"; + +my $hostname; +chomp ($hostname = $ENV{'HOSTNAME'} || `uname -n`); +unless ("$hostname" eq 'deuce.doc.wustl.edu') { +#### For efficiency sake . . . + die "$0: must run on host deuce\n"; +} + + +$ENV{'CVSROOT'} || + die "$0: must set your CVSROOT environment variable\n"; + +$ENV{'ACE_ROOT'} || + die "$0: must set your ACE_ROOT environment variable\n"; + +######## +######## Configuration parameters. +######## +my $gnu = '/bin'; + +####### Add the path to /bin unconditionally.. + +$ENV{'PATH'} = "$gnu" . ':' . $ENV{'PATH'}; + +my $gnu2 = '/usr/local/bin:/usr/bin'; + +####### Add the path to /usr/bin unconditionally.. +$ENV{'PATH'} = "$gnu2" . ':' . $ENV{'PATH'}; + +my $export_dir = '/project/deuce/ftp/pub/ACE+TAO-distribution'; +my $old_versions_dir = '/project/deuce/ftp/pub/previous_versions'; +my $diffs_dir = "$export_dir/diffs"; +my $exec_prefix = ''; +my $install = 0; +my $kit = ''; +my $release_type = 'beta'; +my $ace_tag = my $tao_tag = my $ciao_tag = ''; +my $controlled_files = my $release_files = my $release_lib_files = ''; +my $release_tag_files = my $release_autoconf_files = ''; +my $release_filter = '\\( -name CVS -o -name build \\) -prune -o ' . + '! -name \'.\#*\' ! -name \'\#*\' ! -name \'*~\' ' . + '! -name \'*.MAK\' ! -name \'.cvsignore\' -print'; +my $update_versions = 0; +my $create_zips = 1; + +######## +######## Process command line args. +######## +while ($#ARGV >= $[ && $ARGV[0] =~ /^-/) { + if ($ARGV[0] eq '-i') { + $install = 1; + } elsif ($ARGV[0] eq '-k') { + if ($ARGV[1] =~ /^[^-]+/ && + ($ARGV[1] eq 'ace' || $ARGV[1] eq 'tao' || $ARGV[1] eq 'ciao' || $ARGV[1] eq 'ace+tao' || $ARGV[1] eq 'ace+tao+ciao')) { + $kit = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -k option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-n') { + $exec_prefix = 'echo '; + } elsif ($ARGV[0] eq '-v') { + if ($ARGV[1] =~ /^[^-]+/ && + ($ARGV[1] eq 'major' || $ARGV[1] eq 'minor' || + $ARGV[1] eq 'beta')) { + $release_type = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -v option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-ta') { + if ($ARGV[1] =~ /^[^-]+/) { + $ace_tag = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -ta option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-tt') { + if ($ARGV[1] =~ /^[^-]+/) { + $tao_tag = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -tt option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-tc') { + if ($ARGV[1] =~ /^[^-]+/) { + $ciao_tag = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -tc option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-u') { + $update_versions = 1; + } elsif ($ARGV[0] eq '-?') { + print "$usage$long_usage"; + exit; + } else { + print STDERR "$0: unknown option $ARGV[0]\n"; + die "$usage$long_usage"; + } + shift; + +} + +die "$0: must specify a -k option\n" unless "$kit"; +my $KIT; + +if ($kit eq 'ace') { + $KIT = 'ACE'; +} elsif ($kit eq 'tao') { + $KIT = 'TAO'; +} elsif ($kit eq 'ciao') { + $KIT = 'CIAO'; +} else { + #### Creating combined ACE+TAO kit. Don't use $KIT. +}; + + +my $chmod = 'chmod'; +# All of them had gnu suffixes. Removed them.. +my $chgrp = 'chgrp'; +my $cpio = 'cpio'; +my $cvs = 'cvs'; +my $date = 'date'; +my $egrep = 'egrep'; +my $find = 'find'; +my $gzip = 'gzip'; +my $bzip2 = 'bzip2'; +my $make = 'make -f Release -s'; +my $regmake = 'make -s'; +my $mv = 'mv -f'; +my $rm = 'rm -f'; +my $cp = 'cp -f'; +my $md5sum = 'md5sum'; +my $touch = 'touch'; +chop (my $now = `$date +"%a %b %d %T %Y"`); + +unless ("$controlled_files") { + chomp ($controlled_files = `$make show_controlled_files`); +} + +unless ("$release_files") { + chomp ($release_files = `$make show_release_files`); +} + +unless ("$release_lib_files") { + chomp ($release_lib_files = `$make show_release_lib_files`); +} + +unless ("$release_tag_files") { + chomp ($release_tag_files = `$make show_release_tag_files`); +} + +##### +##### Preparation for the release +##### +&ex ("$touch $export_dir/DON") && + die "$0: Write failures in $export_dir, access problems..\n"; + +&ex ("$touch $old_versions_dir/DON") && + die "$0: Write failures in $old_versions_dir, access problems..\n"; + +my $ace_root = $ENV{'ACE_ROOT'}; + +&ex ("$touch $ace_root/MPC/DON") && + die "$0: Read/Write failures in $ace_root/MPC/, access problems..\n"; + +&ex ("$rm -r $ace_root/MPC/DON") && + die "$0: Delete failures in $ace_root/MPC \n"; + +&ex ("$rm -r $export_dir/DON $export_dir/*.gz $export_dir/*.zip $export_dir/*.bz2") && + die "$0: failed to remove files in $export_dir\n"; + +&ex ("$rm -r $old_versions_dir/DON") && + die "$0: failed to remove file in $old_versions_dir\n"; + +######## +######## Setup signal handlers. +######## +my $status = 1; #### Must get set to 0 explicitly to indicate success. +$SIG{'HUP'} = $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'cleanup'; + + +######## +######## Defend against fascist umasks. +######## +umask 022; + + +my $major_version = my $minor_version = my $beta_version = 0; +my $previous_version = my $version = ''; +my $ace_version = ''; +my $tao_version = ''; + +######## +######## Main execution thread. +######## +if ($update_versions && "$kit" ne 'ace+tao+ciao') { + #### Update versions and tag, but don't create the kit. + + $status = + &check_workspace () || + &get_versions () || + &update_version_files () || + &update_changelog () || + &tag (); +} else { + #### Create the kit. + + #### If a tag was specified, export using the tag from a staging area. + #### If not, create a kit from the current directory. + my $stage_dir = '..'; + if ("$ace_tag" || "$tao_tag" || "$ciao_tag") { + $stage_dir = "/tmp/ACE_wrappers_stage-$$/"; + unless ("$exec_prefix") { + mkdir "$stage_dir", 0755 || + die "$0: unable to mkdir $stage_dir\n"; + } + } + + if ("$exec_prefix") { + print "chdir $stage_dir\n"; + } else { + chdir $stage_dir || die "$0: unable to chdir $stage_dir\n"; + } + + if ("$ace_tag") { + &ex ("$cvs -q export -r$ace_tag -kv ACE_wrappers > /dev/null") && + die "$0: failed cvs export of $ace_tag in $stage_dir\n"; + &ex ("cd ACE_wrappers && $make ACE-INSTALL") && + die "$0: failed make ACE-INSTALL in $stage_dir/ACE_wrappers\n"; + } + + if ("$ace_tag") { + &ex ("$cvs -q export -r$ace_tag -kv ACE_MPC > /dev/null") && + die "$0: failed cvs export of ACE_MPC in $stage_dir\n"; + } + + if ("$tao_tag") { + chdir "ACE_wrappers" || die "$0: unable to chdir ACE_wrappers\n"; + &ex ("$cvs -q export -r$tao_tag -kv TAO > /dev/null") && + die "$0: failed cvs export of $tao_tag in $stage_dir\n"; + &ex ("cd TAO && $make TAO-INSTALL") && + die "$0: failed make INSTALL in " . + "$stage_dir/ACE_wrappers/TAO\n"; + } + + if ("$ciao_tag") { + chdir "TAO" || die "$0: unable to chdir ACE_wrappers/TAO\n"; + &ex ("$cvs -q export -r$ciao_tag -kv CIAO > /dev/null") && + die "$0: failed cvs export of $ciao_tag in $stage_dir\n"; + &ex ("cd CIAO && $make CIAO-INSTALL") && + die "$0: failed make INSTALL in " . + "$stage_dir/ACE_wrappers/TAO\n"; + } + + chdir "../../"; + + $status = &generate_makefiles (); + + if ($status != 0) { + die "$0: failed to generate GNUmakefiles\n"; + } + + $status = &create_kit (); + + if (! $status && $install) { + if ("$ace_tag") { + my $major_v = 0; + my $minor_v = 0; + my $beta_v = 0; + if ($ace_tag =~ /(\d+)_(\d+)_(\d+)/o) { + my $major_v = $1; + my $minor_v = $2; + my $beta_v = $3; + + if ($beta_v > 0) { + my $previous_beta = $beta_v - 1; + $previous_version = "$major_v.$minor_v.$previous_beta"; + +#### &diff ('ACE_wrappers', "ACE-$previous_version", "$ace_tag"); + } + } + } + + if ("$tao_tag") { + my $major_v = 0; + my $minor_v = 0; + my $beta_v = 0; + if ($tao_tag =~ /(\d+)_(\d+)_(\d+)/o) { + my $major_v = $1; + my $minor_v = $2; + my $beta_v = $3; + + #### $previous_version is used by diff (). + if ($beta_v > 0) { + my $previous_beta = $beta_v - 1; + $previous_version = "$major_v.$minor_v.$previous_beta"; + +#### &diff ('ACE_wrappers/TAO', "TAO-$previous_version", "$tao_tag"); + } + } + } + } + + if ("$ace_tag" || "$tao_tag") { + if ($install) { + chdir ".."; + &ex ("$rm -r $stage_dir") && + warn "$0: failed to remove $stage_dir\n"; + } else { + warn "$0: kits are in $stage_dir\n"; + } + } +} +&cleanup; + + +######## +######## Clean up when done or on signal. +######## +sub cleanup { + exit $status; +} + + +######## +######## Check that the workspace is up-to-date, if releasing from +######## the official release directory. +######## +sub check_workspace () { + my $module; + + if ($kit =~ /^ace/) { + chdir '..' || die "$0: unable to chdir ..\n"; + $module = 'ACE_wrappers'; + } elsif ($kit =~ /tao/) { + chdir '../' || die "$0: unable to chdir ../..\n"; + $module = 'TAO'; + } elsif ($kit =~ /ciao/) { + chdir '../' || die "$0: unable to chdir ../..\n"; + $module = 'CIAO'; + } + + my @out_of_date = (); + open (CVS, "$cvs -q checkout -P $module 2>&1 |") || + die "$0: unable to open $cvs\n"; + while (<CVS>) { + next if m%^U %; #### Allow others to update the repository. + next if m%^cvs server: New directory `.*' -- ignored$%; #### empty dirs. + next if m%^\? ACE_wrappers/include/makeinclude/platform_macros.GNU$%; + next if m%^\? ACE_wrappers/ace/config.h$%; + + push (@out_of_date, $_) if "$_"; + } + close CVS; + + if ($kit =~ /^ace/) { + chdir 'ACE_wrappers' || die "$0: unable to chdir ACE_wrappers\n"; + } elsif ($kit =~ /tao/) { + chdir 'TAO' || die "$0: unable to chdir ACE_wrappers/TAO\n"; + } elsif ($kit =~ /ciao/) { + chdir 'CIAO' || die "$0: unable to chdir ACE_wrappers/TAO/CIAO\n"; + } + + if (@out_of_date) { + warn "ERROR: workspace must be updated (with cvs -q up -d) or " . + "cleaned:\n " . + join ("\n ", @out_of_date) . "\n"; + return 1; + } + + 0; +} + + +######## +######## Retrieve version information from VERSION file(s). +######## +sub get_versions () { + open (VERSION, '< VERSION') || + die "$0: unable to open VERSION\n"; + while (<VERSION>) { + if (/$KIT version (\d+)\.(\d+)\.(\d+)/o) { + $major_version = $1; + $minor_version = $2; + $beta_version = $3; + last; + } elsif (/$KIT version (\d+)\.(\d+)[^\.]/o) { + #### Previous release was a minor. + $major_version = $1; + $minor_version = $2; + last; + } elsif (/$KIT version (\d+)[^\.]/o) { + #### Previous release was a major. + $major_version = $1; + last; + } + } + close VERSION; + + if ($release_type eq 'beta') { + ++$beta_version; + } elsif ($release_type eq 'minor' ) { + $beta_version = 0; + ++$minor_version; + } elsif ($release_type eq 'major' ) { + $minor_version = $beta_version = 0; + ++$major_version; + } + + if ($release_type eq 'beta') { + $version = "$major_version.$minor_version.$beta_version"; + } elsif ($release_type eq 'minor' ) { + $version = "$major_version.$minor_version"; + } + + print "new $KIT version: $version\n"; + + if ($KIT ne 'ACE') { + my $ace_major_version = my $ace_minor_version = my + $ace_beta_version = 0; + my $nfile = ''; + if ($KIT eq 'TAO') { + $nfile = "../VERSION"; + } elsif ($KIT eq 'CIAO') { + $nfile = "../../VERSION"; + } + open (ACE_VERSION, "$nfile") || + die "$0: unable to open $nfile\n"; + while (<ACE_VERSION>) { + if (/ACE version (\d+)\.(\d+)\.(\d+)/o) { + $ace_major_version = $1; + $ace_minor_version = $2; + $ace_beta_version = $3; + last; + } elsif (/ACE version (\d+)\.(\d+)[^\.]/o) { + #### ACE release was a minor. + $ace_major_version = $1; + $ace_minor_version = $2; + last; + } elsif (/ACE version (\d+)[^\.]/o) { + #### ACE release was a major. + $ace_major_version = $1; + last; + } + } + + close ACE_VERSION; + + if ($release_type eq 'beta') { + $ace_version = "$ace_major_version.$ace_minor_version.$ace_beta_version"; + } elsif ($release_type eq 'minor' ) { + $ace_version = "$ace_major_version.$ace_minor_version"; + } + } + + if ($KIT eq 'CIAO') { + my $tao_major_version = my $tao_minor_version = my $tao_beta_version = 0; + open (TAO_VERSION, '< ../VERSION') || + die "$0: unable to open ../VERSION\n"; + while (<TAO_VERSION>) { + if (/TAO version (\d+)\.(\d+)\.(\d+)/o) { + $tao_major_version = $1; + $tao_minor_version = $2; + $tao_beta_version = $3; + last; + } elsif (/TAO version (\d+)\.(\d+)[^\.]/o) { + #### TAO release was a minor. + $tao_major_version = $1; + $tao_minor_version = $2; + last; + } elsif (/TAO version (\d+)[^\.]/o) { + #### TAO release was a major. + $tao_major_version = $1; + last; + } + } + + close TAO_VERSION; + + if ($release_type eq 'beta') { + $tao_version = + "$tao_major_version.$tao_minor_version.$tao_beta_version"; + } elsif ($release_type eq 'minor' ) { + $tao_version = "$tao_major_version.$tao_minor_version"; + } + } + + 0; +} + + +######## +######## Update VERSION file(s). +######## +sub update_version_files () { + &ex ("perl -pi -e " . + "'s/$KIT version .*/$KIT version $version, released $now./' VERSION"); + return 1 if $? >> 8; + + &ex ("perl -pi -e 's/$KIT VERSION:.*/$KIT VERSION: $version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + if ($kit =~ /^ciao/) { + + # For CIAO we need to add ACE + TAO versions.. + &ex ("perl -pi -e 's/TAO VERSION :.*/TAO VERSION : $tao_version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + &ex ("perl -pi -e 's/ACE VERSION :.*/ACE VERSION : $ace_version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + if ("$exec_prefix") { + print "CIAO version ${major_version}.${minor_version}.${beta_version}\n"; + } else { +### &ex ("perl -pi -e 's/version =.*/version = $version/' " . +### "../../bin/MakeProjectCreator/config/ciaoversion.mpb"); +### return 1 if $? >> 8; + + open (CIAO_VERSION_H, "> ciao/Version.h") || + die "$0: unable to open ciao/Version.h\n"; + + print CIAO_VERSION_H + "// -*- C++ -*-\n" . + "// \$Id\$\n\n" . + "// This is file was automatically generated by \$ACE_ROOT/bin/make_release.\n\n" . + "\#define CIAO_MAJOR_VERSION ${major_version}\n" . + "\#define CIAO_MINOR_VERSION ${minor_version}\n" . + "\#define CIAO_BETA_VERSION ${beta_version}\n" . + "\#define CIAO_VERSION \"${version}\"\n"; + + close CIAO_VERSION_H; + } + } + + if ($kit =~ /^tao/) { + &ex ("perl -pi -e 's/ACE VERSION:.*/ACE VERSION: $ace_version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + if ("$exec_prefix") { + print "TAO version ${major_version}.${minor_version}.${beta_version}\n"; + } else { +### &ex ("perl -pi -e 's/version =.*/version = $version/' " . +### "../bin/MakeProjectCreator/config/taoversion.mpb"); +### return 1 if $? >> 8; + + open (TAO_VERSION_H, "> tao/Version.h") || + die "$0: unable to open tao/Version.h\n"; + + print TAO_VERSION_H + "// -*- C++ -*-\n" . + "// \$Id\$\n\n" . + "// This is file was automatically generated by \$ACE_ROOT/bin/make_release.\n\n" . + "\#define TAO_MAJOR_VERSION ${major_version}\n" . + "\#define TAO_MINOR_VERSION ${minor_version}\n" . + "\#define TAO_BETA_VERSION ${beta_version}\n" . + "\#define TAO_VERSION \"${version}\"\n"; + + close TAO_VERSION_H; + } + } + + if ($kit =~ /^ace/) { + if ("$exec_prefix") { + print "ACE version ${major_version}.${minor_version}.${beta_version}\n"; + } else { +## &ex ("perl -pi -e 's/version =.*/version = $version/' " . +## "bin/MakeProjectCreator/config/aceversion.mpb"); +## return 1 if $? >> 8; + + open (ACE_VERSION_H, "> ace/Version.h") || + die "$0: unable to open ace/Version.h\n"; + + print ACE_VERSION_H + "// -*- C++ -*-\n" . + "// \$Id\$\n\n" . + "// This is file was automatically generated by \$ACE_ROOT/bin/make_release.\n\n" . + "\#define ACE_MAJOR_VERSION ${major_version}\n" . + "\#define ACE_MINOR_VERSION ${minor_version}\n" . + "\#define ACE_BETA_VERSION ${beta_version}\n" . + "\#define ACE_VERSION \"${version}\"\n\n"; +## "\#include \"ace/Versioned_Namespace.h\"\n"; + + close ACE_VERSION_H; + } + } + + 0; +} + + +######## +######## Add ChangeLog entries, and make sure that they have proper +######## permissions. +######## +sub update_changelog () { + my $logname = $ENV{'MAILID'}; + if (! "$logname") { + chop ($logname = `/usr/ucb/whoami`); + } + my $signature = $ENV{'SIGNATURE'} || $logname; + my $message = "$now $signature <$logname>\n\n" . + " * $KIT version $version released.\n\n"; + + if ("$exec_prefix") { + print "Adding to ChangeLog: \n", $message, "\n"; + return 0; + } + open (NEW_CHANGELOG, ">ChangeLog.bak") + || return 1; + open (CHANGELOG, "ChangeLog") + || return 1; + print NEW_CHANGELOG $message; + while (<CHANGELOG>) { + print NEW_CHANGELOG $_; + } + close (CHANGELOG) + || return 1; + close (NEW_CHANGELOG) + || return 1; + rename "ChangeLog.bak", "ChangeLog" + || return 1; + + my $version_h = ''; + + if ($KIT eq 'ACE') { + $version_h = 'ace/Version.h'; + } elsif ($KIT eq 'TAO') { + $version_h = 'TAO/tao/Version.h'; + } elsif ($KIT eq 'CIAO') { + $version_h = 'TAO/CIAO/ciao/Version.h'; + } + +# Incase you are wondering what is all this about. We are trying to +# commit from ACE_wrappers and hence the mess. Why not commit from TAO +# and make lives simpler. Sorry it wouldnt work for taoversion.mpb! +# Using "cvs commit ../file" is not acceptable to CVS and is known bug +# from 1.10.X versions. Hence this maze of things. + + if ($KIT eq 'TAO') { + &ex ("cd ..; $cvs commit -m'$version' " . + "TAO/VERSION TAO/PROBLEM-REPORT-FORM TAO/ChangeLog $version_h && " . + "chmod 0644 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h; " . + "chgrp 1213 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h"); + } elsif ($KIT eq 'CIAO') { + &ex ("cd ../../; $cvs commit -m'$version' " . + "TAO/CIAO/VERSION TAO/CIAO/PROBLEM-REPORT-FORM TAO/CIAO/ChangeLog $version_h && " . + "chmod 0644 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h; " . + "chgrp 1213 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h"); + } else { + &ex ("$cvs commit -m'$version' " . + "VERSION PROBLEM-REPORT-FORM ChangeLog $version_h &&" . + "chmod 0644 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h; " . + "chgrp 1213 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h"); + } + + return 1 if $? >> 8; + + 0; +} + + +######## +######## Tag the release. +######## +sub tag () { + my $tag = "$KIT-$version"; + #### cvs tag does not allow dots. + $tag =~ tr/./_/; + + print "start tagging $tag\n"; + if ($KIT eq "TAO" || + $KIT eq "CIAO") { + chdir ".."; + } + &ex ("$cvs -q tag $tag $controlled_files $release_tag_files > /dev/null"); + if ($KIT eq "TAO") { + chdir "TAO"; + } + if ($KIT eq "CIAO") { + chdir "CIAO"; + } + return 1 if $? >> 8; + print "finished tagging $tag\n"; + + 0; +} + + +######## +######## If building a beta, create a diff from the previous version. +######## +sub diff () { + my ($module, $previous_tag, $tag) = @_; + + if ("$previous_version") { + #### Only create a diff for a beta version. + + #### cvs tag does not allow dots. + $previous_tag =~ tr/./_/; + $tag =~ tr/./_/; + + &ex ("nice -15 $cvs -q rdiff -u -r $previous_tag -r $tag " . + "$module 2>/dev/null | " . + "nice -15 sed 's%ACE_wrappers-repository/%ACE_wrappers/%g' | " . + "nice -15 $gzip -9 > $diffs_dir/$previous_tag-$tag.diff.gz") + if -d "$diffs_dir"; + } + + #### Ignore return value. No promises on diffs. + 0; +} + + +######## +######## Generate GNUmakefiles and workspace/project files. +######## +sub generate_makefiles () { + + # The current ACE_ROOT setting is where this script started from, not + # the staging area we want to generate files in. So, we need to + # specifically set the -relative option on mwc to replace ACE_ROOT + # correctly in generated files. + # + # Need todo a common chmod on the file lists! + my $here = Cwd::getcwd(); + + print "My current wok in generate makefiles $here \n"; + my $exclude_option = '-exclude TAO/TAO_*.mwc,TAO/CIAO/CIAO_*.mwc'; + my $tmp_mpc_option = + '-recurse -hierarchy -relative ACE_ROOT='; + + my $mpc_option = $tmp_mpc_option.$here.'/ACE_wrappers'; + + my $tmp_static_option = + '-static -name_modifier *_Static -apply_project -exclude TAO/CIAO,TAO/TAO_*.mwc '; + + my $static_option = $tmp_static_option.$mpc_option; + + # Visual Studio 2005 (aka VC8) uses the same file suffixes as VC7.1, so + # append _vc8 to the names. + my $vc8_option = '-name_modifier *_vc8'; + + # Additionally, VC8 can do Windows CE builds and these can be + # configured in. However, the CE builds have uses_wchar turned on, + # so we don't mix them with the Win32 VC8 files. The complete list of + # available platforms known at this point is in + # $MPC_ROOT/template/vc8_platforms.mpt - since the default is Win32 + # and we're generating only CE builds, replace it instead of adding to it. + my $tmp_ce = '-value_template platforms=\'"Pocket PC 2003 (ARMV4)"\' '; + $tmp_ce = $tmp_ce.'-value_template platforms+=\'"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"\''; + my $ce_option = '-name_modifier *_WinCE -features "uses_wchar=1,wince=1" '.$tmp_ce; + + &ex ("cd ACE_wrappers; \ + bin/mwc.pl $exclude_option $mpc_option; \ + find ./ -name 'GNUmake*' | /usr/bin/xargs chmod 0644"); + + &ex ("cd ACE_wrappers; \ + bin/mwc.pl -type vc8 $mpc_option $vc8_option; \ + bin/mwc.pl -type vc8 $mpc_option $exclude_option $ce_option; \ + bin/mwc.pl -type vc71 $mpc_option; \ + bin/mwc.pl -type borland $mpc_option $exclude_option; \ + bin/mwc.pl -type vc71 $static_option; \ + find ./ -name '*.bor' | /usr/bin/xargs chmod 0644;\ + find ./ -name '*.vcproj' | /usr/bin/xargs chmod 0644;\ + find ./ -name '*.sln' | /usr/bin/xargs chmod 0644"); +} + +sub generate_em3 () { + + my $here = Cwd::getcwd(); + + &ex ("cd ACE_wrappers; \ + bin/mwc.pl -type em3 -exclude TAO -recurse -hierarchy -relative ACE_ROOT=$here/ACE_wrappers;\ + find ./ -name '*.vc[p,w]' | /usr/bin/xargs chmod 0644"); +} + +######## +######## Bootstrap autotool support +######## +sub bootstrap_autotools () { + # Autotool (i.e. GNU autoconf, automake and libtool) support is + # currently only available in ACE. As such, only bootstrap autotool + # support into the ACE-only distribution to avoid potential + # confusion for TAO and CIAO users. For example, they may wonder + # why TAO and CIAO are not configured when ACE's configure script is + # run. + if ($kit =~ /^ace/) { + &ex ("cd ACE_wrappers && bin/bootstrap"); + } +} + +######## +######## Create the tar file(s) and move to their proper location. +######## +sub create_kit () { + + #### Create kits with group write permission. + umask 002; + + my $dest = $install ? "$export_dir" : 'created'; + my $dispose = $install ? "$mv" : 'echo'; + my $checksum = $install ? "$md5sum" : 'echo'; + my $cksum_ext = 'md5'; + my $redirect = $install ? '>' : '\>'; + my $shell_cd = $install ? 'cd' : 'echo cd'; + + (my $local_ace_tag = $ace_tag) =~ s|_|.|g; + (my $local_tao_tag = $tao_tag) =~ s|_|.|g; + (my $local_ciao_tag = $ciao_tag) =~ s|_|.|g; + + # These files don't get LF->CRLF conversions done when making the zip. + my $bin_files = + "\"\\.dsp|\\.dsw|\\.mak|\\.mdp|\\.ide|\\.exe\|\\.ico\|\\.gz\|\\.zip\|\\.xls\|" . + "\\.sxd|\\.gif|\\.vcp|\\.vcproj|\\.vcw|\\.sln\|\\.dfm\|\\.jpg\|\\.png\|\\.vsd\|\\.bz2\""; + + my $build_command; + my $archives; + + my $base_release_files = $release_files; + + if ($kit eq 'ace+tao+ciao') { + # Create a list of files that needs to be packed with CIAO + # including ACE+TAO. + my $tmp_rel_file = ''; + chomp ($tmp_rel_file = `$regmake -f ACE_wrappers/TAO/Release show_release_files`); + $release_files .= ' '; + $release_files .= $tmp_rel_file; + $tmp_rel_file = ''; + $release_files .= ' '; + chomp ($tmp_rel_file = `$regmake -f ACE_wrappers/TAO/CIAO/Release show_release_files`); + $release_files .= $tmp_rel_file; + + print "RELEASE FILES from CIAO are $release_files \n"; + + $build_command = + "$rm ACE+TAO+CIAO.zip; " . + "$find $release_files $release_filter | $egrep $bin_files | " . + "zip ACE+TAO+CIAO.zip -q9@ &&" . + "$find $release_files $release_filter | $egrep -v $bin_files | " . + "zip ACE+TAO+CIAO.zip -qlg9@ &&" . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE+TAO+CIAO.tar.gz && " . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE+TAO+CIAO.tar.bz2 && " . + "$chmod 664 ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 && " . + "$chgrp 1213 ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 && " . + "$dispose ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 $dest &&" . + "$cp $dest/ACE+TAO+CIAO.zip $old_versions_dir/$local_ace_tag+$local_tao_tag+$local_ciao_tag.zip &&". + "$cp $dest/ACE+TAO+CIAO.tar.gz $old_versions_dir/$local_ace_tag+$local_tao_tag+$local_ciao_tag.tar.gz &&". + "$cp $dest/ACE+TAO+CIAO.tar.bz2 $old_versions_dir/$local_ace_tag+$local_tao_tag+$local_ciao_tag.tar.bz2; "; + $archives = " ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 "; + } + + # First dispose of ACE+TAO+CIAO. + my $checksum_command = + "$shell_cd $dest; " . + "for p in $archives; do " . + "$rm \${p}.${cksum_ext}; " . + "$checksum \$p $redirect \${p}.${cksum_ext}; " . + "done"; + + &ex ($build_command); + &ex ($checksum_command); + + if ($kit eq 'ace+tao' || $kit eq 'ace+tao+ciao') { + # Set the relese files once again + my $tmp_rel_file = ''; + $status = &bootstrap_autotools (); + + if ($status != 0) { + die "$0: failed to bootstrap autotools\n"; + } + + chomp ($tmp_rel_file = `$regmake -f ACE_wrappers/TAO/Release show_release_files`); + $release_files = $base_release_files; + $release_files .= ' '; + $release_files .= $tmp_rel_file; + + print "RELEASE FILES for TAO are $release_files \n"; + + $build_command = + "$rm ACE+TAO.zip; " . + "$find $release_files $release_filter | $egrep $bin_files | " . + "zip ACE+TAO.zip -q9@ &&" . + "$find $release_files $release_filter | $egrep -v $bin_files | " . + "zip ACE+TAO.zip -qlg9@ &&" . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE+TAO.tar.gz && " . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE+TAO.tar.bz2 && " . + "$chmod 664 ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 && " . + "$chgrp 1213 ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 && " . + "$dispose ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 $dest &&" . + "$cp $dest/ACE+TAO.zip $old_versions_dir/$local_ace_tag+$local_tao_tag.zip &&". + "$cp $dest/ACE+TAO.tar.gz $old_versions_dir/$local_ace_tag+$local_tao_tag.tar.gz &&". + "$cp $dest/ACE+TAO.tar.bz2 $old_versions_dir/$local_ace_tag+$local_tao_tag.tar.bz2; "; + $archives = " ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 "; + } + + # Dispose of ACE+TAO now + $checksum_command = + "$shell_cd $dest; " . + "for p in $archives; do " . + "$rm \${p}.${cksum_ext}; " . + "$checksum \$p $redirect \${p}.${cksum_ext}; " . + "done"; + + &ex ($build_command); + &ex ($checksum_command); + + if ($kit eq 'ace' || $kit eq 'ace+tao' || $kit eq 'ace+tao+ciao') { + + $status = &generate_em3 (); + + if ($status != 0) { + die "$0: failed to generate em3 files\n"; + } + + # Reset it again with autoconf files + chomp ($release_files = `$regmake -f ACE_wrappers/Release show_release_files`); + + $build_command = + "$rm ACE.zip ACE-lib.zip; " . + "$find $release_files $release_filter | $egrep $bin_files | " . + "zip ACE.zip -q9@ &&" . + "$find $release_files $release_filter | $egrep -v $bin_files | " . + "zip ACE.zip -qlg9@ &&" . + "$find $release_lib_files $release_filter | $egrep $bin_files | " . + "zip ACE-lib.zip -q9@ &&" . + "$find $release_lib_files $release_filter | $egrep -v $bin_files | " . + "zip ACE-lib.zip -qlg9@ &&" . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE.tar.gz && " . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE.tar.bz2 && " . + "$find $release_lib_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE-lib.tar.gz && " . + "$find $release_lib_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE-lib.tar.bz2 && " . + "$chmod 664 ACE.tar.gz ACE-lib.tar.gz ACE.tar.bz2 ACE-lib.tar.bz2 ". + "ACE.zip ACE-lib.zip && " . + "$chgrp 1213 ACE.tar.gz ACE-lib.tar.gz ACE.tar.bz2 ACE-lib.tar.bz2 ". + "ACE.zip ACE-lib.zip && " . + "$dispose ACE.zip ACE-lib.zip $dest && " . + "$dispose ACE.tar.gz ACE-lib.tar.gz ACE.tar.bz2 ACE-lib.tar.bz2 $dest && " . + "$cp $dest/ACE.zip $old_versions_dir/$local_ace_tag.zip &&". + "$cp $dest/ACE-lib.zip $old_versions_dir/$local_ace_tag-lib.zip &&". + "$cp $dest/ACE.tar.gz $old_versions_dir/$local_ace_tag.tar.gz &&". + "$cp $dest/ACE-lib.tar.gz $old_versions_dir/$local_ace_tag-lib.tar.gz &&". + "$cp $dest/ACE.tar.bz2 $old_versions_dir/$local_ace_tag.tar.bz2 &&". + "$cp $dest/ACE-lib.tar.bz2 $old_versions_dir/$local_ace_tag-lib.tar.bz2;"; + $archives = " ACE.tar.gz ACE-lib.tar.gz ". + "ACE.zip ACE-lib.zip ACE.tar.bz2 ACE-lib.tar.bz2 "; + } + + # Now dispose of ACE in all its glory + $checksum_command = + "$shell_cd $dest; " . + "for p in $archives; do " . + "$rm \${p}.${cksum_ext}; " . + "$checksum \$p $redirect \${p}.${cksum_ext}; " . + "done"; + + &ex ($build_command); + &ex ($checksum_command); +} + + +######## +######## Execute a command, unless -n had been specified. Return value +######## of 0 indicates success. +######## +sub ex () +{ + my ($command) = @_; + + if ("$exec_prefix") { + print $command . "\n"; + 0; + } else { + system ("$command"); + } +} + +######## +######## Verify that a command can be executed, return 1 on sucess +######## +sub can_run { + my $command = shift; + + open (RUN, "$command 2>&1 |") + || return 0; + while (<RUN>) {} + close(RUN) + || return 0; + return 1; +} + + +# Local Variables: +# mode:Perl +# End: |