summaryrefslogtreecommitdiff
path: root/ACE/bin/autoconf_compile
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/bin/autoconf_compile')
-rwxr-xr-xACE/bin/autoconf_compile520
1 files changed, 520 insertions, 0 deletions
diff --git a/ACE/bin/autoconf_compile b/ACE/bin/autoconf_compile
new file mode 100755
index 00000000000..8c3a283723d
--- /dev/null
+++ b/ACE/bin/autoconf_compile
@@ -0,0 +1,520 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# -*- perl -*-
+# $Id$
+#
+# This script checkouts ACE from CVS, configures ACE, and compiles
+# `ace', `tests' and finally runs `tests/run_tests.sh'.
+#
+# If it detects any problem it sends e-mail.
+#
+# DO NOT invoke this script from your crontab, use
+# autoconf_compile_wrapper for that.
+#
+# This script requires Perl 5.
+#
+# TODO: Modify the script or split it in such a way that the main copy
+# can be obtained either using cvs or downloading the latest beta
+# from the WWW.
+#
+
+# 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 File::Basename;
+use FileHandle;
+require POSIX;
+
+$directory_mode=0755;
+
+# This is the module we will checkout, someday someone could define a
+# smaller module.
+$MODULE='ACE_wrappers';
+
+# These are the sub-directories (in the module) we really compile.
+
+# Find out the command name.
+$CMD = basename($0);
+
+$single_threaded = 0;
+$minimum_corba = 0;
+$ami = 0;
+$dont_update = 0;
+$dont_run = 0;
+$pre_clean = 0;
+$post_clean = 0;
+$report_success = 0;
+$debug = 0;
+@BUILD_LIST= ();
+
+@ARGS = ();
+while ($#ARGV >= 0) {
+ if (!($ARGV[0] =~ m/-/)) {
+ push @ARGS, $ARGV[0];
+ shift;
+ } elsif ($ARGV[0] eq "-single_threaded") {
+ $single_threaded = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-minimum_corba") {
+ $minimum_corba = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-ami") {
+ $ami =1;
+ shift;
+ } elsif ($ARGV[0] eq "-build_list") {
+ shift;
+ @BUILD_LIST = split (/,/, $ARGV[0]);
+ shift;
+ } elsif ($ARGV[0] eq "-dont_update") {
+ $dont_update = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-dont_run") {
+ $dont_run = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-pre_clean") {
+ $pre_clean = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-post_clean") {
+ $post_clean = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-report_success") {
+ $report_success = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-debug") {
+ $debug = 1;
+ shift;
+ }
+}
+
+# Extract configuration information from command line.
+ # TODO: Some validation and checking should be done here.
+$CHECKOUT = $ARGS[0];
+$BUILD = $ARGS[1];
+$LOGDIR = $ARGS[2];
+$ADMIN = $ARGS[3];
+$MAIL = "mail";
+if ($#ARGS >= 4) {
+ $MAIL = $ARGS[4];
+}
+
+# We obtain our revision to report errors.
+$REVISION='$Revision$ ';
+
+# When an error is found we try to die gracefully and send some email
+# to ADMIN.
+
+$disable_file = $LOGDIR . '/.disable';
+$histfile = $LOGDIR . '/history';
+$LOGBASE = POSIX::strftime("%b%d_%Y.txt", localtime);
+$LOGFILE = $LOGDIR . '/' . $LOGBASE;
+$HOST = `hostname`;
+chop $HOST;
+$LOG_NAME = $HOST . "_" . $BUILD . "_" . $LOGBASE;
+$STATUS = "OK";
+
+if ($debug) {
+ print "CHECKOUT = $CHECKOUT\n";
+ print "BUILD = $BUILD\n";
+ print "LOGDIR = $LOGDIR\n";
+ print "ADMIN = $ADMIN\n";
+ print "MAIL = $MAIL\n";
+}
+
+push @INC, $CHECKOUT . '/' . $MODULE . '/bin';
+#require run_all_list;
+@RUN_LIST = ('tests'); # Temporary hack
+
+
+if ($#BUILD_LIST == -1) {
+ @BUILD_LIST=
+ ('ace',
+ 'netsvcs',
+ 'tests',
+ 'apps/gperf');
+}
+if ($debug) {
+
+ @BUILD_LIST = ('ace');
+ @RUN_LIST = ('tests');
+# @SINGLE_THREADED_LIST = ('TAO/tests/OctetSeq');
+# @MINIMUM_CORBA_LIST = ('TAO/tests/OctetSeq');
+ $ADMIN = $ENV{'LOGNAME'};
+
+}
+
+sub mydie {
+ unlink $disable_file;
+ die $_ . "\n";
+}
+
+sub report_errors {
+ # First clear the lock, so the next execution works...
+ unlink $disable_file; # Ignore errors!
+
+ # Now send a summary of the errors to the ADMIN account...
+ local $to = $ADMIN;
+
+ open (MAIL, "|".$MAIL.' -s "[AUTO_COMPILE] '.$BUILD.'" '.$to)
+ || mydie "Cannot open mail pipe for: $_\n";
+
+ print MAIL 'The following message is brought to you by: ', "\n";
+ print MAIL $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n\n";
+
+ local $m;
+ foreach $m (@_) {
+ print MAIL $m, "\n";
+ }
+
+ print MAIL "\nPlease check the following log for more info:\n\n";
+ print MAIL 'http://www.cs.wustl.edu/~bugzilla/auto_compile_logs/',
+ $LOG_NAME, "\n\n";
+
+ close (MAIL); # Ignore errors....
+
+ # Now send the complete log to bugzilla...
+ local $bugs = 'bugzilla'.'@cs.wustl.edu';
+ open (MAIL, "|".$MAIL.' -s AUTO_COMPILE_LOG='.$LOG_NAME.' '.$bugs)
+ || mydie "Cannot open mail pipe for: $LOG_NAME\n";
+
+ print MAIL 'This is the log for: ', "\n";
+ print MAIL $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n";
+
+ print MAIL "\n================================================================\n";
+
+ if (open (THELOG, "$LOGFILE"))
+ {
+ while (<THELOG>) {
+ print MAIL $_;
+ }
+ close (THELOG);
+ }
+ close (MAIL); # Ignore errors....
+}
+
+### MAIN FUNCTION
+
+if (-f $disable_file) {
+ print 'The following message is brought to you by: ', "\n";
+ print $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n";
+
+ print "DISABLED\n";
+
+ exit 0;
+}
+
+open (DISABLE, '>' . $disable_file)
+ || die "cannot open disable file";
+print DISABLE "autoconf_compile <$date> is running\n";
+close (DISABLE)
+ || die "cannot close disable file";
+
+open(HIST, '>>' . $histfile)
+ # Do not use 'mydie' to report the problem, it tries to remove the
+ # disable file
+ || mydie "cannot open history file \"$histfile\"\n";
+
+$date = localtime;
+
+print HIST $CMD, ': running at ', $date, ' ';
+
+open(LOG, '>' . $LOGFILE)
+ || mydie "cannot open log file";
+
+LOG->autoflush ();
+
+# The following lines are useful when debugging the script or wrapper.
+# print LOG $CHECKOUT, " ", $BUILD, " ", $LOGDIR, " ", $ADMIN, "\n";
+#while (($key,$value) = each %ENV) {
+# print LOG $key, " = ", $value, "\n";
+#}
+
+chdir($CHECKOUT)
+ || mydie "Cannot chdir to $CHECKOUT";
+
+if ($dont_update == 0) {
+ $date = localtime;
+ print LOG "$CMD: starting checkout at ", $date, "\n";
+ open(CVS, "cvs -q checkout -P $MODULE 2>&1 |")
+ || mydie "cannot start checkout of $MODULE";
+# open(CVS, "cvsup -g -L 2 -P m ace-supfile 2>&1 |")
+# || mydie "cannot start checkout";
+
+ $conflicts = 0;
+ while (<CVS>) {
+ if (m/^C /) {
+ $conflicts = 1;
+ }
+ print LOG $_;
+ }
+ close(CVS)
+ || mydie "error while checking out $MODULE";
+ $date = localtime;
+ print LOG "$CMD: checkout finished at ", $date, "\n";
+
+ if ($conflicts != 0) {
+ mydie "conflicts on checkout";
+ }
+}
+
+chdir($MODULE)
+ || mydie "cannot chdir to $MODULE";
+
+open (CHLOG, "ChangeLog")
+ || mydie "cannot open Changelog";
+$_ = <CHLOG>;
+chop;
+print LOG "ACE ChangeLogTag:", $_, "\n";
+close (CHLOG);
+
+open (CHLOG, "TAO/ChangeLog")
+ || mydie "cannot open TAO/Changelog";
+$_ = <CHLOG>;
+chop;
+print LOG "TAO ChangeLogTag:", $_, "\n";
+close (CHLOG);
+
+# Bootstrap the workspace
+print LOG "$CMD: ==================================================\n\n";
+print LOG "$CMD: bootstrapping the workspace\n";
+open(BOOTSTRAP, "cd $CHECKOUT/ACE_wrappers && "
+ . "sh bin/bootstrap workspace --enable-deps 2>&1 |")
+ || mydie "cannot bootstrap workspace for $BUILD";
+while(<BOOTSTRAP>) {
+ print LOG $_;
+}
+close(BOOTSTRAP)
+ || mydie "error while bootstrapping the workspace";
+print LOG "$CMD: ==================================================\n\n";
+
+# Begin the workspace configuration
+$date = localtime;
+print LOG "$CMD: starting configuration at ", $date, "\n";
+
+# Check that we're in an ACE "top level" directory.
+# We can actually build outside of the top level ACE directory, but
+# let's do it this way for now.
+(-d 'ace' && -d 'm4') ||
+ die "$0: must be in top level ACE directory!\n";
+
+# Create build directories, if needed.
+-d 'build' || mkdir ('build', $directory_mode);
+-d "$build" || mkdir ('build/' . "$BUILD", $directory_mode);
+
+# Now enter the build directory.
+chdir('build/' . $BUILD)
+ || mydie "cannot chdir to $BUILD";
+
+# Remove the configuration cache file to make sure a fresh
+# configuration is created.
+unlink "config.cache";
+
+# Run the configuration script.
+open(CONFIGURE, "sh $CHECKOUT/ACE_wrappers/configure 2>&1 |")
+ || mydie "cannot configure for $BUILD";
+while(<CONFIGURE>) {
+ print LOG $_;
+}
+close(CONFIGURE)
+ || mydie "error while configuring ACE";
+$date = localtime;
+print LOG "$CMD: configure finished at ", $date, "\n";
+
+
+@failures = ();
+
+if ($pre_clean) {
+ foreach $i (@BUILD_LIST) {
+ $date = localtime;
+ print LOG "$CMD: =============================================\n";
+ print LOG "$CMD: make clean in $i started at ", $date, "\n";
+ open(MAKE, "make -k $MAKEFLAGS -C $i clean 2>&1 |")
+ || mydie "cannot start make in $i";
+
+ while (<MAKE>) {
+ # Ignore errors....
+ }
+ if (close(MAKE) == 0) {
+ push @failures, "errors while cleaning $i";
+ }
+ $date = localtime;
+ print LOG "$CMD: make clean in $i finished at ", $date, "\n";
+ print LOG "$CMD: ==================================================\n\n";
+ }
+}
+
+$MAKEFLAGS .= "";
+foreach $i (@BUILD_LIST) {
+ $date = localtime;
+ print LOG "$CMD: =============================================\n";
+ print LOG "$CMD: make for $i started at ", $date, "\n";
+ open(MAKE, "make -k $MAKEFLAGS -C $i 2>&1 |")
+ || mydie "cannot start make for $i";
+
+ local $current_dir = $i;
+ local $last_error = "";
+ while (<MAKE>) {
+ chop;
+ if ($^O eq 'hpux'
+ && m/^Warning:[ \t]+[0-9]+ future errors were detected/) {
+ next;
+ }
+ print LOG $_, "\n";
+
+ if (m/^make(\[[0-9]+\])?: Entering directory /) {
+ s/^make(\[[0-9]+\])?: Entering directory //;
+ $current_dir = $_;
+ }
+ if (m/error:/i || m/error /i
+ || m/^make(\[[0-9]+\])?: \*\*\*/) {
+ if ($last_error ne $current_dir
+ || STATUS eq "COMPILATION WARNING") {
+ $STATUS = "COMPILATION ERROR";
+ push @failures, "Error while compiling in $current_dir \n";
+ $last_error = $current_dir;
+ }
+ }
+ if (m/warning:/i || m/warning /i) {
+ if ($last_error ne $current_dir) {
+ if ($STATUS eq "OK") {
+ $STATUS = "COMPILATION WARNING";
+ }
+ push @failures, "Warning while compiling in $current_dir\n";
+ $last_error = $current_dir;
+ }
+ }
+ }
+ if (close(MAKE) == 0) {
+ push @failures, "errors while running make in $i";
+ }
+ $date = localtime;
+ print LOG "$CMD: make for $i finished at ", $date, "\n";
+ print LOG "$CMD: =============================================\n\n";
+}
+
+if ($dont_run == 0) {
+ @LIST = @RUN_LIST;
+ if ($single_threaded) {
+ @LIST = @SINGLE_THREADED_LIST;
+ } elsif ($minimum_corba) {
+ @LIST = @MINIMUM_CORBA_LIST;
+ } elsif ($ami) {
+ @LIST = @AMI_CORBA_LIST;
+ }
+
+ foreach $i (@LIST) {
+
+ $date = localtime;
+ print LOG "$CMD: ==================================================\n";
+ print LOG "$CMD: running checks in $i at ", $date, "\n";
+ local $subdir =
+ $CHECKOUT .'/'. $MODULE .'/build/'. $BUILD .'/'. $i;
+ chdir ($subdir)
+ || mydie "cannot chdir to $subdir";
+
+ $run_error = 0;
+ open(CHECK, "make -k $MAKEFLAGS -C $subdir check 2>&1 |");
+
+ local $current_dir = $i;
+ local $last_error = "";
+ while (<CHECK>) {
+ chop;
+ if ($^O eq 'hpux'
+ && m/^Warning:[ \t]+[0-9]+ future errors were detected/) {
+ next;
+ }
+ print LOG $_, "\n";
+
+ if (m/^make(\[[0-9]+\])?: Entering directory /) {
+ s/^make(\[[0-9]+\])?: Entering directory //;
+ $current_dir = $_;
+ }
+ if (m/error:/i || m/error /i
+ || m/^make(\[[0-9]+\])?: \*\*\*/) {
+ if ($last_error ne $current_dir
+ || STATUS eq "COMPILATION WARNING") {
+ $STATUS = "COMPILATION ERROR";
+ push @failures, "Error while compiling in $current_dir \n";
+ $last_error = $current_dir;
+ }
+ }
+ if (m/warning:/i || m/warning /i) {
+ if ($last_error ne $current_dir) {
+ if ($STATUS eq "OK") {
+ $STATUS = "COMPILATION WARNING";
+ }
+ push @failures, "Warning while compiling in $current_dir\n";
+ $last_error = $current_dir;
+ }
+ }
+ if (m/Error/
+ || m/ERROR/
+ || m/FAILED/
+ || m/failed/
+ || m/FAIL/
+ || m/EXCEPTION/
+ || m/pure virtual /i) {
+ if ($STATUS eq "OK") {
+ $STATUS = "RUNTIME ERROR";
+ }
+ $run_error = 1;
+ }
+ }
+
+ if (close(CHECK) == 0) {
+ if ($STATUS eq "OK") {
+ $STATUS = "RUNTIME ERROR";
+ }
+ push @failures, "Error when closing pipe in $i";
+ next;
+ }
+ $date = localtime;
+ print LOG "$CMD: check finished ", $date, "\n";
+
+ if ($run_error != 0) {
+ push @failures,
+ "errors detected while making check in $i";
+ }
+ }
+}
+
+if ($post_clean) {
+ foreach $i (@BUILD_LIST) {
+ $date = localtime;
+ print LOG "$CMD: ==================================================\n";
+ print LOG "$CMD: make clean in $i started at ", $date, "\n";
+ open(MAKE, "make -k $MAKEFLAGS -C $i clean 2>&1 |");
+
+ while (<MAKE>) {
+ # Ignore errors....
+ }
+ if (close(MAKE) == 0) {
+ push @failures, "errors while cleaning $i";
+ }
+ $date = localtime;
+ print LOG "$CMD: make clean in $i finished at ", $date, "\n";
+ print LOG "$CMD: ==================================================\n\n";
+ }
+}
+
+if ($#failures >= 0) {
+ report_errors @failures;
+}
+
+close(LOG)
+ || mydie "cannot close LOGFILE";
+
+print HIST "$STATUS\n";
+close(HIST)
+ || mydie "cannot close history file";
+
+unlink $disable_file
+ || die "cannot unlink disable file";
+
+if ($report_success && $STATUS eq "OK") {
+ report_errors "Congratulations: No errors or warnings detected\n";
+}
+
+exit 0;