summaryrefslogtreecommitdiff
path: root/ACE/bin/run_all_win32.pl
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/bin/run_all_win32.pl')
-rwxr-xr-xACE/bin/run_all_win32.pl180
1 files changed, 180 insertions, 0 deletions
diff --git a/ACE/bin/run_all_win32.pl b/ACE/bin/run_all_win32.pl
new file mode 100755
index 00000000000..84021c3a8d9
--- /dev/null
+++ b/ACE/bin/run_all_win32.pl
@@ -0,0 +1,180 @@
+# -*- 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_win32.pl <log directory> <admin email address>
+#
+# For example: run_all_win32.pl c:\log peter_pan@neverland.org
+
+use Net::SMTP;
+use File::Basename;
+use FileHandle;
+require POSIX;
+
+use lib "$ENV{ACE_ROOT}/bin";
+require run_all_list;
+
+# This is the module we will checkout, someday someone could define a
+# smaller module.
+$MODULE='ACE_wrappers';
+
+# The following are for redirecting execution results to temporary files.
+$exe_log_name='run_test.log'; # Name of the tempfile used.
+
+# If using 'sh'.
+$sh_cmd="c:/bin/sh ";
+$sh_redirection=" > $exe_log_name 2>&1";
+
+#if using '4nt', 4nt is not quite working yet.
+$four_nt_cmd="d:/Utils/4NT301/4NT.EXE ";
+$four_nt_redirection=" >& $exe_log_name";
+
+# Pick the one your like.
+$shell_invoke = $sh_cmd;
+$redirect_output = $sh_redirection;
+
+# We obtain our revision to report errors.
+#$REVISION='$Revision$';
+
+# Find out the command name.
+$CMD = basename($0);
+
+# Extract configuration information from command line.
+# TODO: Some validation and checking should be done here.
+$LOGDIR = $ARGV[0];
+$ADMIN = $ARGV[1];
+
+# When an error is found we try to die gracefully and send some email
+# to ADMIN.
+
+$disable_file = $LOGDIR . '/.disable';
+
+sub mywarn {
+ local @msg = @_;
+
+ # Need more error checking here.
+
+ $smtp = Net::SMTP->new('mail.cs.wustl.edu');
+ $smtp->mail( "$ADMIN" ); # sender's address
+ $smtp->to("$ADMIN"); # recipient's address
+ $smtp->data(); # Start the mail
+
+ # Mail Header
+ $smtp->datasend("To: $ADMIN\n");
+ $smtp->datasend("Subject: Auto run results\n");
+ $smtp->datasend("From: $ADMIN\n");
+ $smtp->datasend("\n");
+
+ # Now the message body
+ $smtp->datasend ('The following message is brought to you by: ', "\n");
+ $smtp->datasend ("$CMD, [ $REVISION ] for $BUILD on $CHECKOUT\n\n");
+
+ local $m;
+ foreach $m (@msg) {
+ $smtp->datasend ("$m \n");
+ }
+
+ $smtp->datasend ("\nPlease check log files for more info\n");
+
+ $smtp->dataend(); # Finish sending the mail
+ $smtp->quit; # Close the SMTP connection
+}
+
+sub mydie {
+ mywarn @_;
+ print HIST 'FAILED', "\n";
+ unlink $disable_file
+ || die "cannot unlink disable file";
+ exit 0;
+}
+
+### MAIN FUNCTION
+
+### MAIN FUNCTION
+
+$histfile = $LOGDIR . '/history';
+open(HIST, '>>' . $histfile)
+ # Do not use 'mydie' 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)
+ || mydie "cannot open disable file";
+print DISABLE "auto_compile <$date> is running\n";
+close (DISABLE)
+ || mydie "cannot close disable file";
+
+$LOGFILE = $LOGDIR . '/' . POSIX::strftime("%b%d_%Y.log", localtime);
+open(LOG, '>' . $LOGFILE)
+ || mydie "cannot open log file";
+
+LOG->autoflush ();
+
+foreach $i (@RUN_LIST) {
+ local @test_info = split (/\ \,\ /, $i);
+ local $directory = $test_info[0];
+ local $program = $test_info[1];
+ print "$directory, $program\n";
+
+ $date = localtime;
+ print LOG "$CMD: =============================================\n";
+ print LOG "$CMD: running $program in $directory at ", $date, "\n";
+ local $subdir =
+ $ENV{ACE_ROOT} . '/'. $directory;
+ chdir ($subdir)
+ || mydie "cannot chdir to $subdir";
+
+ $run_error = 0;
+
+ system ($shell_invoke . " " . $program . " " . $redirect_output);
+
+ open (RUN, "$exe_log_name") || push @failures, "Can't open execution log file $exe_log_name\n";
+
+ while (<RUN>) {
+ print LOG $_;
+ if (m/^Error/ || m/FAILED/ || m/EXCEPTION/) {
+ $run_error = 1;
+ }
+ }
+ if (close(RUN) == 0) {
+ push @failures, "Error when closing log file $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";
+ }
+
+ unlink ("$exe_log_name");
+}
+
+if ($#failures >= 0) {
+ mydie @failures;
+}
+
+close(LOG)
+ || mydie "cannot close LOGFILE";
+
+print HIST "OK\n";
+close(HIST)
+ || mydie "cannot close history file";
+
+unlink $disable_file
+ || mydie "cannot unlink disable file";
+
+exit 0;