summaryrefslogtreecommitdiff
path: root/trunk/ACE/bin/run_all.pl
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/bin/run_all.pl')
-rwxr-xr-xtrunk/ACE/bin/run_all.pl224
1 files changed, 224 insertions, 0 deletions
diff --git a/trunk/ACE/bin/run_all.pl b/trunk/ACE/bin/run_all.pl
new file mode 100755
index 00000000000..dfa4841262c
--- /dev/null
+++ b/trunk/ACE/bin/run_all.pl
@@ -0,0 +1,224 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# -*- perl -*-
+# $Id$
+#
+# This script execute the test programs (usually, other scripts) in
+# the RUN_LIST defined below. If it detects any problem it send email.
+#
+# This script requires ActivePerl for Win32 and libnet from CPAN.
+#
+# Usage: run_all.pl <log directory> <admin email address>
+#
+# For example: run_all.pl /tmp/log peter_pan@neverland.org
+
+use Net::SMTP;
+use File::Basename;
+use FileHandle;
+require POSIX;
+
+push @INC, $ENV{'ACE_ROOT'}.'/bin';
+require run_all_list;
+
+# Find out the command name.
+$CMD = basename($0);
+
+$single_threaded = 0;
+$minimum_corba = 0;
+$dont_run = 0;
+$report_success = 0;
+$debug = 0;
+$ami=0
+@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 "-report_success") {
+ $report_success = 1;
+ shift;
+ } elsif ($ARGV[0] eq "-debug") {
+ $debug = 1;
+ shift;
+ }
+}
+
+# We obtain our revision to report errors.
+$REVISION='$Revision$ ';
+
+# Extract configuration information from command line.
+ # TODO: Some validation and checking should be done here.
+$LOGDIR = $ARGS[0];
+$ADMIN = $ARGS[1];
+$MAIL = "mail";
+if ($#ARGS >= 2) {
+ $MAIL = $ARGS[2];
+}
+
+$disable_file = $LOGDIR . '/.disable';
+$histfile = $LOGDIR . '/history';
+$LOGBASE = POSIX::strftime("%b%d_%Y.log", localtime);
+$LOGFILE = $LOGDIR . '/' . $LOGBASE;
+$HOST = `hostname`;
+chop $HOST;
+$LOG_NAME = $HOST . "_" . $BUILD . "_" . $LOGBASE;
+$STATUS = "OK";
+
+sub report_errors {
+ # Now send a summary of the errors to the ADMIN account...
+ local $to = $ADMIN;
+
+ open (MAIL, "|".$MAIL.' -s [AUTO_COMPILE] '.$to)
+ || die "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";
+
+ 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)
+# || die "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
+
+$histfile = $LOGDIR . '/history';
+open(HIST, '>>' . $histfile)
+ # Do not use 'die' to report the problem, it tries to use HIST....
+ || die "cannot open history file \"$histfile\"\n";
+
+$date = localtime;
+
+print HIST $CMD, ': running at ', $date, ' ';
+
+if (-f $disable_file) {
+ print HIST "DISABLED\n";
+ exit 0;
+}
+
+open (DISABLE, '>' . $disable_file)
+ || die "cannot open disable file";
+print DISABLE "auto_compile <$date> is running\n";
+close (DISABLE)
+ || die "cannot close disable file";
+
+$LOGFILE = $LOGDIR . '/' . POSIX::strftime("%b%d_%Y.log", localtime);
+open(LOG, '>' . $LOGFILE)
+ || die "cannot open log file";
+
+LOG->autoflush ();
+
+@failures = ();
+
+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;
+ }
+
+ $DIR = $ENV{'PWD'};
+ foreach $i (@LIST) {
+ local @test_info = split (/\ \,\ /, $i);
+ local $directory = $test_info[0];
+ local $program = $test_info[1];
+
+ $date = localtime;
+ print LOG "$CMD: =============================================\n";
+ print LOG "$CMD: running $program in $directory at ", $date, "\n";
+ local $subdir = $DIR . '/' . $directory;
+ chdir ($subdir)
+ || die "cannot chdir to $subdir";
+
+ $run_error = 0;
+ if (open(RUN, "perl $program 2>&1 |") == 0) {
+ push @failures, "cannot run $program in $directory";
+ next;
+ }
+ while (<RUN>) {
+ print LOG $_;
+ if (m/Error/
+ || m/FAILED/
+ || m/EXCEPTION/
+ || m/pure virtual /i) {
+ if ($STATUS eq "OK") {
+ $STATUS = "RUNTIME ERROR";
+ }
+ $run_error = 1;
+ }
+ }
+ if (close(RUN) == 0) {
+ if ($STATUS eq "OK") {
+ $STATUS = "RUNTIME ERROR";
+ }
+ push @failures, "Error when closing pipe for $program in $directory";
+ next;
+ }
+ $date = localtime;
+ print LOG "$CMD: $program finished ", $date, "\n";
+
+ if ($run_error != 0) {
+ push @failures,
+ "errors detected while running $program in $directory";
+ }
+ }
+}
+
+if ($#failures >= 0) {
+ report_errors @failures;
+}
+
+close(LOG)
+ || die "cannot close LOGFILE";
+
+print HIST "$STATUS\n";
+close(HIST)
+ || die "cannot close history file";
+
+unlink $disable_file
+ || die "cannot unlink disable file";
+
+if ($report_success) {
+ report_errors "Congratulations: No errors or warnings detected\n";
+}
+
+exit 0;