Remove some really old stuff that isn't used anymore.
This commit was SVN r23768.
Этот коммит содержится в:
родитель
0ca617e570
Коммит
8cb780d1af
@ -1,54 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
# Sample configuration file for the test_build.pl script.
|
||||
#
|
||||
# First argument: String name of the configuration, used for
|
||||
# describing and labeling the result. Names should not be repeated in
|
||||
# one configuration file (no error checking is performed; if multiple
|
||||
# lines have the same name, the results of only one of them will be
|
||||
# reported).
|
||||
#
|
||||
# Second argument: Whether to combine stdout and stderr (1), or leave
|
||||
# them separate (blank). You should probably only use (1) for when
|
||||
# you want to see the warnings from "make all", and leave it blank for
|
||||
# all other cases.
|
||||
#
|
||||
# Third argument: VPATH mode. Must be the strings "absolute",
|
||||
# "relative", or blank. If "absolute", then the configure script will
|
||||
# be run as an absolute VPATH (i.e., top_builddir != top_srcdir, and
|
||||
# configure's absolute path will be used for invocation). If
|
||||
# "relative", the setup as the same except that a relative path to
|
||||
# configure is used. If blank (or any other value), a non-VPATH build
|
||||
# is used.
|
||||
#
|
||||
# Fourth argument: arbitrary strings to pass to configure. You can
|
||||
# set environment flags here, specific options to configure, etc. You
|
||||
# should *not* specify a --prefix argument; that is the only argument
|
||||
# supplied by the testing script.
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
# warnings:1::--enable-picky
|
||||
# default build:::
|
||||
# absolute vpath:::absolute:CFLAGS=-g
|
||||
# static build:::--disable-shared --enable-static
|
||||
#
|
||||
warnings:1::--enable-picky
|
||||
default build:::
|
||||
static build:::--disable-shared --enable-static
|
||||
non-threaded build:::--without-threads
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@ -1,962 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
# Set this to true for additional output; typically only when
|
||||
# debugging
|
||||
my $debug = 0;
|
||||
|
||||
#
|
||||
# Set this to true, if You want to disable checking
|
||||
# Useful, if the check might fail on Your machine, but you
|
||||
# nevertheless want to compile/debug other tests.
|
||||
#
|
||||
my $nocheck = 0;
|
||||
|
||||
#
|
||||
# Set this to the installation directory
|
||||
# (possibly accesible by all nodes in a cluster).
|
||||
#
|
||||
my $install_dir;
|
||||
|
||||
# download "latest" filename
|
||||
my $latest_name = "latest_snapshot.txt";
|
||||
|
||||
# checksum filenames
|
||||
my $md5_checksums = "md5sums.txt";
|
||||
my $sha1_checksums = "sha1sums.txt";
|
||||
|
||||
# max length of logfile to send in an e-mail
|
||||
my $max_log_len = 100;
|
||||
|
||||
# email subjects
|
||||
my $success_subject = "Open MPI-TESTS: Build success (\@version@)";
|
||||
my $fail_subject = "Open MPI-TESTS: === BUILD FAILURE (\@version@) ===";
|
||||
|
||||
# max number of snapshots to keep downloaded
|
||||
my $max_snapshots = 3;
|
||||
|
||||
# max number of old build roots to maintain (note that build roots are
|
||||
# only left if a) you use --leave-install or b) a build fails)
|
||||
my $max_build_roots = 3;
|
||||
|
||||
my $file_base_name="openmpi-tests";
|
||||
|
||||
my $outfile;
|
||||
my $outfile_arg;
|
||||
|
||||
############################################################################
|
||||
# Shouldn't need to change below this line
|
||||
############################################################################
|
||||
|
||||
# Need to define some globals here -- can't use "our" because we have
|
||||
# to run on machines with older versions of perl. #$%#@$%#...
|
||||
|
||||
my $version;
|
||||
my $mail;
|
||||
my @email_output;
|
||||
my $tarball_name;
|
||||
my $ret;
|
||||
my $last_test_version_name;
|
||||
|
||||
my $scratch_root_arg;
|
||||
my $email_arg;
|
||||
my $url_arg;
|
||||
my $config_arg;
|
||||
my $debug_arg;
|
||||
my $file_arg;
|
||||
my $leave_install_arg;
|
||||
my $help_arg;
|
||||
my $force_arg;
|
||||
my $nocheck_arg;
|
||||
my $install_dir_arg;
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# send a mail
|
||||
sub send_mail {
|
||||
my ($subject, $to) = @_;
|
||||
shift;
|
||||
shift;
|
||||
my $msg = \@_;
|
||||
|
||||
$subject =~ s/\@version\@/$version/;
|
||||
|
||||
open MAIL, "|$mail -s \"$subject\" \"$to\"" ||
|
||||
die "Could not open pipe to output e-mail\n";
|
||||
my $i = 0;
|
||||
while ($i <= $#$msg) {
|
||||
print MAIL $$msg[$i];
|
||||
++$i;
|
||||
}
|
||||
close MAIL;
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# abort the script, and send an error e-mail as a result
|
||||
sub test_abort {
|
||||
my $msg = \@_;
|
||||
|
||||
push(@email_output, "Building the nightly test-tarball ended in error:\n\n");
|
||||
push(@email_output, @$msg);
|
||||
send_mail($fail_subject, $email_arg, @email_output);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# check to see if we've tested this version before
|
||||
sub check_last_version {
|
||||
my ($new_version) = @_;
|
||||
my $old_version;
|
||||
|
||||
print "This version: $new_version\n" if ($debug);
|
||||
if (! -f $last_test_version_name) {
|
||||
print "Never tested on this system before\n" if ($debug);
|
||||
return;
|
||||
}
|
||||
|
||||
$old_version = `cat $last_test_version_name`;
|
||||
chomp($old_version);
|
||||
print "Last tested version: $old_version\n" if ($debug);
|
||||
|
||||
# If the version hasn't changed since the last time we tested,
|
||||
# then don't bother testing again.
|
||||
|
||||
if ($new_version eq $old_version) {
|
||||
if ($debug || $force_arg) {
|
||||
print "Test tarball version is the same as the last version we tested\nOnly testing again because we're in --debug or --force mode\n"
|
||||
if ($debug);
|
||||
} else {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# run a command and save the stdout / stderr
|
||||
sub do_command {
|
||||
my ($merge_output, $cmd) = @_;
|
||||
|
||||
print "*** Running command: $cmd\n" if ($debug);
|
||||
pipe OUTread, OUTwrite;
|
||||
pipe ERRread, ERRwrite
|
||||
if (!$merge_output);
|
||||
|
||||
# Child
|
||||
|
||||
my $pid;
|
||||
if (($pid = fork()) == 0) {
|
||||
close OUTread;
|
||||
close ERRread
|
||||
if (!$merge_output);
|
||||
|
||||
close(STDERR);
|
||||
if ($merge_output) {
|
||||
open STDERR, ">&OUTwrite" ||
|
||||
die "Can't redirect stderr\n";
|
||||
} else {
|
||||
open STDERR, ">&ERRwrite" ||
|
||||
die "Can't redirect stderr\n";
|
||||
}
|
||||
select STDERR;
|
||||
$| = 1;
|
||||
|
||||
close(STDOUT);
|
||||
open STDOUT, ">&OUTwrite" ||
|
||||
die "Can't redirect stdout\n";
|
||||
select STDOUT;
|
||||
$| = 1;
|
||||
|
||||
# Turn shell-quoted words ("foo bar baz") into individual tokens
|
||||
|
||||
my @tokens;
|
||||
while ($cmd =~ /\".*\"/) {
|
||||
my $prefix;
|
||||
my $middle;
|
||||
my $suffix;
|
||||
|
||||
$cmd =~ /(.*?)\"(.*?)\"(.*)/;
|
||||
$prefix = $1;
|
||||
$middle = $2;
|
||||
$suffix = $3;
|
||||
|
||||
if ($prefix) {
|
||||
foreach my $token (split(' ', $prefix)) {
|
||||
push(@tokens, $token);
|
||||
}
|
||||
}
|
||||
if ($middle) {
|
||||
push(@tokens, $middle);
|
||||
} else {
|
||||
push(@tokens, "");
|
||||
}
|
||||
$cmd = $suffix;
|
||||
}
|
||||
if ($cmd) {
|
||||
push(@tokens, split(' ', $cmd));
|
||||
}
|
||||
|
||||
# Run it!
|
||||
|
||||
exec(@tokens) ||
|
||||
die "Can't execute command: $cmd\n";
|
||||
}
|
||||
close OUTwrite;
|
||||
close ERRwrite
|
||||
if (!$merge_output);
|
||||
|
||||
# Parent
|
||||
|
||||
my (@out, @err);
|
||||
my ($rin, $rout);
|
||||
my $done = $merge_output ? 1 : 2;
|
||||
|
||||
# Keep watching over the pipe(s)
|
||||
|
||||
$rin = '';
|
||||
vec($rin, fileno(OUTread), 1) = 1;
|
||||
vec($rin, fileno(ERRread), 1) = 1
|
||||
if (!$merge_output);
|
||||
|
||||
while ($done > 0) {
|
||||
my $nfound = select($rout = $rin, undef, undef, undef);
|
||||
if (vec($rout, fileno(OUTread), 1) == 1) {
|
||||
my $data = <OUTread>;
|
||||
if (!defined($data)) {
|
||||
vec($rin, fileno(OUTread), 1) = 0;
|
||||
--$done;
|
||||
} else {
|
||||
push(@out, $data);
|
||||
print "OUT:$data" if ($debug);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$merge_output && vec($rout, fileno(ERRread), 1) == 1) {
|
||||
my $data = <ERRread>;
|
||||
if (!defined($data)) {
|
||||
vec($rin, fileno(ERRread), 1) = 0;
|
||||
--$done;
|
||||
} else {
|
||||
push(@err, $data);
|
||||
print "ERR:$data" if ($debug);
|
||||
}
|
||||
}
|
||||
}
|
||||
close OUTerr;
|
||||
close OUTread
|
||||
if (!$merge_output);
|
||||
|
||||
# The pipes are closed, so the process should be dead. Reap it.
|
||||
|
||||
waitpid($pid, 0);
|
||||
my $status = $?;
|
||||
print "*** Command complete, exit status: $status\n" if ($debug);
|
||||
|
||||
# Return an anonymous hash containing the relevant data
|
||||
|
||||
my $ret = {
|
||||
stdout => \@out,
|
||||
status => $status
|
||||
};
|
||||
|
||||
# If we had stderr, return that, too
|
||||
|
||||
$ret->{stderr} = \@err
|
||||
if (!$merge_output);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# find a program from a list and load it into the target variable
|
||||
sub find_program {
|
||||
my @names = @_;
|
||||
|
||||
# loop through the list and save the first one that we find
|
||||
my $i = 0;
|
||||
while ($i <= $#names) {
|
||||
my $ret = system("which $names[$i] 2>&1 >/dev/null");
|
||||
my $status = $ret >> 8;
|
||||
if ($status == 0) {
|
||||
return $names[$i];
|
||||
}
|
||||
++$i;
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
sub trim {
|
||||
my ($max, $msg) = @_;
|
||||
|
||||
my @out;
|
||||
|
||||
my $i = 0;
|
||||
if ($#$msg > $max) {
|
||||
$i = $#$msg - $max + 1;
|
||||
push(@out, "[...previous $i lines snipped; last $max lines shown...]\n");
|
||||
}
|
||||
while ($i <= $#$msg) {
|
||||
push(@out, $$msg[$i]);
|
||||
++$i;
|
||||
}
|
||||
if (! ($out[$#out] =~ /\n/)) {
|
||||
push(@out, "\n");
|
||||
}
|
||||
\@out;
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# subroutine for building a single configuration
|
||||
sub try_untar {
|
||||
my ($name, $merge_output, $tarball, $srcroot, $installdir,
|
||||
$vpath_mode, $confargs) = @_;
|
||||
my $ret;
|
||||
my $startdir = `pwd`;
|
||||
my $unpacker;
|
||||
my $status;
|
||||
|
||||
chomp($startdir);
|
||||
|
||||
# make the source root
|
||||
if (! -d $srcroot) {
|
||||
mkdir($srcroot, 0777);
|
||||
}
|
||||
chdir($srcroot);
|
||||
|
||||
# expand the tarball (do NOT assume GNU tar). don't use
|
||||
# do_command here because we need to use a pipe. This isn't an
|
||||
# "interesting" command, anyway -- we don't need any stdout or
|
||||
# stderr. So if it fails, it fails -- no big deal.
|
||||
|
||||
if ($tarball =~ /.*\.bz2$/) {
|
||||
$unpacker="bunzip2";
|
||||
}
|
||||
elsif ($tarball =~ /.*\.gz$/) {
|
||||
$unpacker="gunzip";
|
||||
}
|
||||
else {
|
||||
return {
|
||||
status => $status,
|
||||
message => "Failed to figure out compression of tarball",
|
||||
}
|
||||
}
|
||||
|
||||
system("$unpacker -c $tarball | tar xf -");
|
||||
$status = $? >> 8;
|
||||
if ($status != 0) {
|
||||
return {
|
||||
status => $status,
|
||||
message => "Failed to unzip the tarball",
|
||||
}
|
||||
}
|
||||
|
||||
test_abort ("Tarball does not contain expected directory:$file_base_name-$version -- aborting")
|
||||
if (! -d "$file_base_name-$version");
|
||||
chdir("$file_base_name-$version");
|
||||
}
|
||||
|
||||
sub try_configure {
|
||||
my ($name, $merge_output, $tarball, $srcroot, $package_dir, $installdir,
|
||||
$vpath_mode, $confargs) = @_;
|
||||
my $ret;
|
||||
|
||||
#
|
||||
# Attention -- package_dir should only be one level higher...
|
||||
#
|
||||
chdir ($package_dir);
|
||||
|
||||
# configure it
|
||||
my $config_command = "./configure";
|
||||
if ($vpath_mode) {
|
||||
mkdir("vpath_build", 0777);
|
||||
chdir("vpath_build");
|
||||
if ($vpath_mode eq "relative") {
|
||||
$config_command = "../configure";
|
||||
} else {
|
||||
$config_command = "$srcroot/$file_base_name-$version/$package_dir/configure";
|
||||
}
|
||||
}
|
||||
|
||||
$ret = do_command(1, "$config_command $confargs --prefix=$installdir");
|
||||
if ($ret->{status} != 0) {
|
||||
$ret->{message} = "Failed to configure the tarball";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
# build it
|
||||
$ret = do_command($merge_output, "make all");
|
||||
if ($ret->{status} != 0) {
|
||||
$ret->{message} = "Failed to \"make all\"";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
# save the compile warnings
|
||||
my $make_all_stderr = $ret->{stderr};
|
||||
|
||||
# and check it, if the user does not disable it
|
||||
if ( $nocheck == 0 ) {
|
||||
$ret = do_command($merge_output, "make check");
|
||||
if ($ret->{status} != 0) {
|
||||
$ret->{make_all_stderr} = $make_all_stderr;
|
||||
$ret->{message} = "Failed to \"make check\"";
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
# install it
|
||||
$ret = do_command(1, "make install");
|
||||
if ($ret->{status} != 0) {
|
||||
$ret->{make_all_stderr} = $make_all_stderr;
|
||||
$ret->{message} = "Failed to \"make install\"";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
if ($vpath_mode) {
|
||||
chdir ("..");
|
||||
}
|
||||
|
||||
chdir ("..");
|
||||
|
||||
return {
|
||||
make_all_stderr => $make_all_stderr,
|
||||
status => 0,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
sub cleanup {
|
||||
my ($name, $merge_output, $tarball, $srcroot, $installdir,
|
||||
$vpath_mode, $confargs) = @_;
|
||||
my $startdir=`pwd`;
|
||||
|
||||
# all done -- clean up (unless user specified --leave-install)
|
||||
chdir($startdir);
|
||||
if ($leave_install_arg) {
|
||||
system("rm -rf $srcroot/openmpi* $srcroot/test");
|
||||
} else {
|
||||
system("rm -rf $srcroot");
|
||||
}
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# main
|
||||
#
|
||||
|
||||
# parse the command line
|
||||
&Getopt::Long::Configure("bundling", "require_order");
|
||||
my $ok = Getopt::Long::GetOptions("url|u=s" => \$url_arg,
|
||||
"scratch|s=s" => \$scratch_root_arg,
|
||||
"email|e=s" => \$email_arg,
|
||||
"config|c=s" => \$config_arg,
|
||||
"file|f=s" => \$file_arg,
|
||||
"debug|d" => \$debug_arg,
|
||||
"leave-install|l=s" => \$leave_install_arg,
|
||||
"install-dir=s" => \$install_dir_arg,
|
||||
"outfile=s" => \$outfile_arg,
|
||||
"help|h" => \$help_arg,
|
||||
"force" => \$force_arg,
|
||||
"nocheck" => \$nocheck_arg
|
||||
);
|
||||
|
||||
if (!$ok || $help_arg) {
|
||||
print("Command line error\n")
|
||||
if (!$ok);
|
||||
print "Usage: $0 [--scratch|-s scratch_directory_root] [--email|-e address]\n";
|
||||
print " [--config|-c config_file] [--help|-h] [--debug|-d]\n";
|
||||
print " [[--file|-f local_ompi_tarball] [--url|-u URL_base]]\n";
|
||||
print " [--leave-install output_filename] [--outfile output_filename]\n";
|
||||
print " [--install-dir install_dir] [--nocheck]\n";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if ($file_arg && $url_arg) {
|
||||
print("ERROR: Both --url and --file specified; which should I do?\n");
|
||||
die("Aborting in confusion!\n");
|
||||
} elsif (! $file_arg && ! $url_arg) {
|
||||
print("ERROR: Neither --url nor --file specified; what should I do?\n");
|
||||
die("Aborting in confusion!\n");
|
||||
} elsif (! $email_arg) {
|
||||
print("ERROR: Need e-mail address to mail results\n");
|
||||
die("Aborting in despair\n");
|
||||
} elsif (! $scratch_root_arg) {
|
||||
my $tmp = "/tmp";
|
||||
$tmp = $ENV{TMPDIR}
|
||||
if ($ENV{TMPDIR});
|
||||
$scratch_root_arg = "$tmp/open-mpi-test-build.$$";
|
||||
}
|
||||
|
||||
# if the --file argument was a relative file, convert it to absolute
|
||||
# because we're going to chdir before using it
|
||||
if ($file_arg) {
|
||||
if (! ($file_arg =~ /^\//)) {
|
||||
my $tmp = `pwd`;
|
||||
chomp($tmp);
|
||||
$file_arg = "$tmp/$file_arg";
|
||||
}
|
||||
}
|
||||
|
||||
# ditto for --config arg
|
||||
if ($config_arg) {
|
||||
if (! ($config_arg =~ /^\//)) {
|
||||
my $tmp = `pwd`;
|
||||
chomp($tmp);
|
||||
$config_arg = "$tmp/$config_arg";
|
||||
}
|
||||
}
|
||||
|
||||
# turn on debugging?
|
||||
$debug = 1
|
||||
if ($debug_arg);
|
||||
|
||||
# Disable checking?
|
||||
$nocheck = 1
|
||||
if ($nocheck_arg);
|
||||
|
||||
# prefix the e-mail
|
||||
my $str = "Host: ";
|
||||
my $first = 1;
|
||||
foreach my $option (qw/n o r m/) {
|
||||
my $out = `uname -$option 2>/dev/null`;
|
||||
chomp($out);
|
||||
if ($out) {
|
||||
$str .= " / "
|
||||
if (! $first);
|
||||
$str .= $out;
|
||||
$first = 0;
|
||||
}
|
||||
}
|
||||
push(@email_output, $str . "\n");
|
||||
|
||||
# now that we have scratch root, fill in the filename for the last
|
||||
# version that we tested -- separate it by hostname and config name so
|
||||
# that multiple instances of this script can share a downloads
|
||||
# directory
|
||||
my $dir = "$scratch_root_arg/last-test-versions";
|
||||
if (! -d $dir) {
|
||||
mkdir($dir);
|
||||
}
|
||||
my $hostname = `uname -n`;
|
||||
chomp($hostname);
|
||||
my $config = $config_arg ? `basename $config_arg` : "default";
|
||||
chomp($config);
|
||||
$last_test_version_name = "$dir/$hostname-$config";
|
||||
|
||||
# Find a mail program
|
||||
$mail = find_program(qw(Mail mailx mail));
|
||||
die "Could not find mail program; aborting in despair\n"
|
||||
if (!defined($mail));
|
||||
|
||||
# figure out what download command to use
|
||||
# if we need to download a version -- with file_arg, we do not
|
||||
my $download = "true";
|
||||
if ($url_arg) {
|
||||
$download = find_program(qw(wget lynx curl));
|
||||
test_abort("Cannot find downloading program -- aborting in despair\n")
|
||||
if (!defined($download));
|
||||
}
|
||||
|
||||
# move into the scratch directory, and ensure we have an absolute path
|
||||
# for it
|
||||
if (! -d $scratch_root_arg) {
|
||||
mkdir($scratch_root_arg, 0777);
|
||||
}
|
||||
test_abort("Could not cd to scratch root: $scratch_root_arg\n")
|
||||
if (! -d $scratch_root_arg);
|
||||
chdir($scratch_root_arg);
|
||||
$scratch_root_arg = `pwd`;
|
||||
chomp($scratch_root_arg);
|
||||
|
||||
# if we were given a URL base, get the latest snapshot version number
|
||||
if ($url_arg) {
|
||||
|
||||
# ensure some subdirs exist
|
||||
foreach my $dir (qw(downloads)) {
|
||||
if (! -d $dir) {
|
||||
mkdir($dir, 0777);
|
||||
}
|
||||
}
|
||||
|
||||
chdir("downloads");
|
||||
|
||||
unlink($latest_name);
|
||||
do_command(1, "$download $url_arg/$latest_name");
|
||||
test_abort("Could not download latest snapshot number -- aborting")
|
||||
if (! -f $latest_name);
|
||||
$version = `cat $latest_name`;
|
||||
chomp($version);
|
||||
|
||||
check_last_version($version);
|
||||
|
||||
push(@email_output, "Snapshot: $version\n\n");
|
||||
|
||||
# see if we need to download the tarball
|
||||
$tarball_name = "$file_base_name-$version.tar.gz";
|
||||
if (! -f $tarball_name) {
|
||||
do_command(1, "$download $url_arg/$tarball_name");
|
||||
test_abort ("Could not download tarball -- aborting")
|
||||
if (! -f $tarball_name);
|
||||
|
||||
# get the checksums
|
||||
unlink($md5_checksums);
|
||||
do_command(1, "$download $url_arg/$md5_checksums");
|
||||
|
||||
unlink($sha1_checksums);
|
||||
do_command(1, "$download $url_arg/$sha1_checksums");
|
||||
}
|
||||
|
||||
# compare the md5sum
|
||||
my $md5_file = `grep $version.tar.gz $md5_checksums`;
|
||||
chomp($md5_file);
|
||||
my $md5sum = find_program(qw(md5sum));
|
||||
if (!defined($md5sum)) {
|
||||
push(@email_output,
|
||||
"WARNING: Could not find md5sum executable, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known MD5
|
||||
WARNING: checksums. Proceeding anyway...\n\n");
|
||||
} elsif (! $md5_file) {
|
||||
push(@email_output,
|
||||
"WARNING: Could not find md5sum check file, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known MD5
|
||||
WARNING: checksums. Proceeding anyway...\n\n");
|
||||
} else {
|
||||
my $md5_actual = `$md5sum $tarball_name 2>&1`;
|
||||
chomp($md5_actual);
|
||||
test_abort("md5sum from checksum file does not match actual ($md5_file != $md5_actual)")
|
||||
if ($md5_file ne $md5_actual);
|
||||
}
|
||||
|
||||
# compare the sha1sum
|
||||
my $sha1_file = `grep $version.tar.gz $sha1_checksums`;
|
||||
chomp($sha1_file);
|
||||
my $sha1sum = find_program(qw(sha1sum));
|
||||
if (!defined($sha1sum)) {
|
||||
push(@email_output,
|
||||
"WARNING: Could not find sha1sum executable, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known SHA1
|
||||
WARNING: checksums. Proceeding anyway...\n\n");
|
||||
} elsif (! $sha1_file) {
|
||||
push(@email_output,
|
||||
"WARNING: Could not find sha1sum check file, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known SHA1
|
||||
WARNING: checksums. Proceeding anyway...\n\n");
|
||||
} else {
|
||||
my $sha1_actual = `$sha1sum $tarball_name 2>&1`;
|
||||
chomp($sha1_actual);
|
||||
test_abort "sha1sum from checksum file does not match actual ($sha1_file != $sha1_actual)"
|
||||
if ($sha1_file ne $sha1_actual);
|
||||
}
|
||||
|
||||
# now adjust the tarball name to be absolute
|
||||
$tarball_name = "$scratch_root_arg/downloads/$tarball_name";
|
||||
} elsif ($file_arg) {
|
||||
$tarball_name = $file_arg;
|
||||
|
||||
die "ERROR: Cannot read file $tarball_name\n"
|
||||
if (! -r $tarball_name);
|
||||
$version = $tarball_name;
|
||||
$version =~ s/.*$file_base_name-(.+)\.tar.*/$1/;
|
||||
|
||||
check_last_version($version);
|
||||
|
||||
push(@email_output, "Snapshot: $version\n\n");
|
||||
}
|
||||
|
||||
# Make a root for this build to play in (scratch_root_arg is absolute, so
|
||||
# root will be absolute)
|
||||
my $root= "$scratch_root_arg/build-$version";
|
||||
system("rm -rf $root");
|
||||
mkdir($root, 0777);
|
||||
chdir($root);
|
||||
|
||||
$outfile="out-$version.txt";
|
||||
|
||||
if ($outfile_arg) {
|
||||
$outfile="$outfile_arg";
|
||||
}
|
||||
|
||||
test_abort("Could not find output file:$outfile -- aborting")
|
||||
if ( ! -f $outfile );
|
||||
|
||||
|
||||
# loop over all configurations
|
||||
# be lazy: if no configurations supplied, do a default
|
||||
# configure/build
|
||||
my $results;
|
||||
my $do_default = 0;
|
||||
|
||||
if (! $config_arg || ! -f $config_arg) {
|
||||
my $dir = "$root/default";
|
||||
my $name = "[default]";
|
||||
my $config = "CFLAGS=-g --disable-f77 --enable-debug";
|
||||
|
||||
die "NOT SUPPORTED YET\n";
|
||||
|
||||
$install_dir="$dir/install";
|
||||
|
||||
if ($install_dir_arg) {
|
||||
$install_dir="$install_dir_arg/$name";
|
||||
}
|
||||
|
||||
$ret = try_untar($name, 0, $tarball_name,
|
||||
$dir, "$install_dir", "", $config);
|
||||
$ret = try_configure($name, 0, $tarball_name,
|
||||
$dir, "$install_dir", "", $config);
|
||||
$ret = cleanup($name, 0, $tarball_name,
|
||||
$dir, "$install_dir", "", $config);
|
||||
$results->{$name} = $ret;
|
||||
$results->{$name}->{config} = $config;
|
||||
$results->{$name}->{want_stderr} = 1;
|
||||
$results->{$name}->{vpath_mode} = "";
|
||||
$results->{$name}->{installdir} = "$dir/install";
|
||||
} else {
|
||||
open CONF, "$config_arg";
|
||||
my $i = 1;
|
||||
while (<CONF>) {
|
||||
my $line = $_;
|
||||
chomp($line);
|
||||
|
||||
# skip comments and blank lines
|
||||
|
||||
if ($line && ! ($line =~ /[ \t]*\#/) && ! ($line =~ /^[ \t]+$/)) {
|
||||
|
||||
# Parse out the parts
|
||||
|
||||
my ($name, $want_stderr, $vpath_mode, $config) = split(/:/, $line);
|
||||
if (! $name) {
|
||||
$name = "[build-$i]";
|
||||
}
|
||||
|
||||
# try to actually build it
|
||||
|
||||
my $dir = "$root/$name";
|
||||
$dir =~ s/[\[\] \t"']/_/g;
|
||||
# stupid emacs: '"
|
||||
my $merge_output = $want_stderr ? 0 : 1;
|
||||
$ret = try_untar($name, $merge_output, $tarball_name,
|
||||
$dir, "$install_dir",
|
||||
$vpath_mode, $config);
|
||||
|
||||
open OUTFILE, "$outfile";
|
||||
while (<OUTFILE>) {
|
||||
my $mpi_dir=$_;
|
||||
my $added_config="$config --with-mpi-dir=$mpi_dir";
|
||||
my @check_this = split (/\//, $mpi_dir);
|
||||
my $mpi_installation = pop (@check_this);
|
||||
chomp($mpi_installation);
|
||||
# print "mpi_dir:$mpi_dir\n";
|
||||
|
||||
$install_dir="$dir/install";
|
||||
|
||||
if ($install_dir_arg) {
|
||||
$install_dir="$install_dir_arg/mpi_$mpi_installation/config_$name";
|
||||
}
|
||||
# printf "install_dir:$install_dir\n";
|
||||
|
||||
$ret = try_configure($name, $merge_output, $tarball_name,
|
||||
$dir, "PMB-2.2", "$install_dir",
|
||||
$vpath_mode, $added_config);
|
||||
$ret = try_configure($name, $merge_output, $tarball_name,
|
||||
$dir, "mpich_tester", "$install_dir",
|
||||
$vpath_mode, $added_config);
|
||||
|
||||
$results->{$name} = $ret;
|
||||
$results->{$name} = $ret;
|
||||
$results->{$name} = $ret;
|
||||
$results->{$name}->{config} = $config;
|
||||
$results->{$name}->{want_stderr} = $want_stderr;
|
||||
$results->{$name}->{vpath_mode} = $vpath_mode;
|
||||
$results->{$name}->{installdir} = "$install_dir";
|
||||
}
|
||||
close OUTFILE;
|
||||
# $ret = cleanup($name, $merge_output, $tarball_name,
|
||||
# $dir, "$install_dir",
|
||||
# $vpath_mode, $config);
|
||||
++$i;
|
||||
}
|
||||
}
|
||||
close CONF;
|
||||
}
|
||||
|
||||
# remove this root if we're not leaving the install root
|
||||
chdir($scratch_root_arg);
|
||||
system("rm -rf build-$version")
|
||||
if (!$leave_install_arg);
|
||||
|
||||
my $dir = "$scratch_root_arg";
|
||||
opendir(ROOT, $dir);
|
||||
my @roots = sort(grep { /^build.+[0-9]$/ && -d "$dir/$_" } readdir(ROOT));
|
||||
|
||||
my $i = $#roots;
|
||||
my $j = 0;
|
||||
while ($i >= $max_build_roots) {
|
||||
print "Removing directory $roots[$j]\n" if ($debug);
|
||||
system("rm -rf $roots[$j]");
|
||||
++$j;
|
||||
--$i;
|
||||
}
|
||||
|
||||
# trim the downloads dir to $max_snapshots
|
||||
my $dir = "$scratch_root_arg/downloads";
|
||||
opendir(DOWNLOADS, $dir);
|
||||
my @tarballs = sort(grep { /^openmpi.+gz$/ && -f "$dir/$_" } readdir(DOWNLOADS));
|
||||
closedir(DOWNLOADS);
|
||||
$i = $#tarballs;
|
||||
$j = 0;
|
||||
while ($i >= $max_snapshots) {
|
||||
print "Unlinking $tarballs[$j]\n" if ($debug);
|
||||
unlink("$dir/$tarballs[$j]");
|
||||
++$j;
|
||||
--$i;
|
||||
}
|
||||
|
||||
# save the version that we just tested
|
||||
open LAST, ">$last_test_version_name";
|
||||
print LAST "$version\n";
|
||||
close LAST;
|
||||
|
||||
# if we're leaving the installdirs, output their names into the file
|
||||
# indicated by the --leave-install arg
|
||||
open LEAVE, ">$leave_install_arg"
|
||||
if ($leave_install_arg);
|
||||
|
||||
# send results mail
|
||||
my $email_subject;
|
||||
push(@email_output,
|
||||
"SUMMARY OF RESULTS:
|
||||
(Building and compiling/linking PMB-2.2 and MPIch-testsuite)
|
||||
--------------------------------------------------------------------------\n");
|
||||
|
||||
foreach my $config (keys(%$results)) {
|
||||
my $str;
|
||||
if ($results->{$config}->{status} == 0) {
|
||||
$str = "Success ";
|
||||
print LEAVE "$results->{$config}->{installdir}\n"
|
||||
if ($leave_install_arg);
|
||||
} else {
|
||||
$str = "FAILURE ";
|
||||
$email_subject = $fail_subject;
|
||||
}
|
||||
$str .= $config . "\n";
|
||||
push(@email_output, $str);
|
||||
}
|
||||
close(LEAVE)
|
||||
if ($leave_install_arg);
|
||||
$email_subject = $success_subject
|
||||
if (!$email_subject);
|
||||
|
||||
push(@email_output,
|
||||
"--------------------------------------------------------------------------
|
||||
\n");
|
||||
|
||||
|
||||
# Include additional details if relevant
|
||||
my $header = 0;
|
||||
my $displayed = 0;
|
||||
push(@email_output, "DETAILED RESULTS (as necessary):\n\n");
|
||||
foreach my $config (keys(%$results)) {
|
||||
my $output = 0;
|
||||
my $str;
|
||||
|
||||
$str .= "==> Build: " . $config . "
|
||||
==> Config options: " . $results->{$config}->{config} . "
|
||||
==> Result: " . ($results->{$config}->{status} == 0 ?
|
||||
"Success" : "FAILURE") . "
|
||||
==> Output: " . ($results->{$config}->{want_stderr} ?
|
||||
"stderr and stdout shown separately below" :
|
||||
"stdout and stderr merged below") . "\n";
|
||||
|
||||
if ($results->{$config}->{status} != 0 &&
|
||||
$results->{$config}->{stdout} &&
|
||||
$#{$results->{$config}->{stdout}} >= 0) {
|
||||
push(@email_output, $str);
|
||||
$header = $displayed = $output = 1;
|
||||
|
||||
if ($results->{$config}->{want_stderr}) {
|
||||
push(@email_output,
|
||||
"--Standard output---------------------------------------------------------\n");
|
||||
} else {
|
||||
push(@email_output,
|
||||
"--Standard output and standard error--------------------------------------\n");
|
||||
}
|
||||
my $tmp = trim($max_log_len, $results->{$config}->{stdout});
|
||||
push(@email_output, @$tmp);
|
||||
if ($results->{$config}->{want_stderr}) {
|
||||
push(@email_output,
|
||||
"--Standard output end-----------------------------------------------------\n");
|
||||
} else {
|
||||
push(@email_output,
|
||||
"--Standard output and standard error end----------------------------------\n");
|
||||
}
|
||||
}
|
||||
if ($results->{$config}->{stderr} &&
|
||||
$#{$results->{$config}->{stderr}} >= 0) {
|
||||
push(@email_output, $str)
|
||||
if ($output == 0);
|
||||
$header = $displayed = $output = 1;
|
||||
|
||||
push(@email_output,
|
||||
"--Standard error----------------------------------------------------------\n");
|
||||
my $tmp = trim($max_log_len, $results->{$config}->{stderr});
|
||||
push(@email_output, @$tmp);
|
||||
push(@email_output,
|
||||
"--Standard error end------------------------------------------------------\n");
|
||||
}
|
||||
if ($results->{$config}->{want_stderr} &&
|
||||
$results->{$config}->{make_all_stderr} &&
|
||||
$#{$results->{$config}->{make_all_stderr}} >= 0) {
|
||||
push(@email_output, $str)
|
||||
if ($output == 0);
|
||||
$header = $displayed = $output = 1;
|
||||
|
||||
push(@email_output,
|
||||
"--\"make all\" standard error---------------------------------------------------\n");
|
||||
my $tmp = trim($max_log_len, $results->{$config}->{make_all_stderr});
|
||||
push(@email_output, @$tmp);
|
||||
push(@email_output,
|
||||
"--\"make all\" standard error end-----------------------------------------------\n");
|
||||
}
|
||||
|
||||
if ($output == 1) {
|
||||
push(@email_output,
|
||||
"\n==========================================================================\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
# if we didn't display anything extra, then say so
|
||||
|
||||
if (!$displayed) {
|
||||
push(@email_output, "No additional interesting intformation\n\n");
|
||||
}
|
||||
|
||||
push(@email_output, "Your friendly server,\nCyrador\n");
|
||||
send_mail($email_subject, $email_arg, @email_output);
|
||||
|
||||
# All done
|
||||
|
||||
exit(0);
|
@ -1,167 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Please adjust the below parameters for Your setup.
|
||||
#
|
||||
#
|
||||
SRCDIR=$HOME/WORK/OPENMPI # Where the script and the tar-balls reside
|
||||
DATE_STRING=`date +%Y.%m.%d` # Date string for tmp-/scratch-dir
|
||||
TMPDIR=`ws_allocate OpenMPI-$DATE_STRING 3` # Where to build the OMPI
|
||||
LAST_VERSION=1.0a1r6896 # Should be detected by download
|
||||
TEST_VERSION=r362
|
||||
CONFIG_FILE=build-$HOSTNAME.txt
|
||||
PATCHES="ompi_orte.diff" # Comma-separated list of patches to apply when building
|
||||
#EMAIL="testing@open-mpi.org"
|
||||
EMAIL="keller@hlrs.de"
|
||||
|
||||
# download "latest" filename
|
||||
latest_name="latest_snapshot.txt"
|
||||
|
||||
|
||||
#
|
||||
# This is required on some machines, that do not
|
||||
# have autoconf-tools (cron passes only a short PATH)
|
||||
#
|
||||
export PATH=$HOME/bin:$PATH
|
||||
|
||||
|
||||
if [ "x$HOSTNAME" = "xstrider" ] ; then
|
||||
export PATH=$PATH:/opt/pathscale/bin
|
||||
fi
|
||||
|
||||
#######################################################
|
||||
#
|
||||
# Local functions
|
||||
#
|
||||
# find a program from a list and load it into the target variable
|
||||
find_program() {
|
||||
var=$1
|
||||
shift
|
||||
|
||||
# first zero out the target variable
|
||||
str="$var="
|
||||
eval $str
|
||||
|
||||
# loop through the list and save the first one that we find
|
||||
am_done=
|
||||
while test -z "$am_done" -a -n "$1" ; do
|
||||
prog=$1
|
||||
shift
|
||||
|
||||
if test -z "$prog" ; then
|
||||
am_done=1
|
||||
else
|
||||
not_found="`which $prog 2>&1 | egrep '^no'`"
|
||||
which $prog > /dev/null 2>&1
|
||||
if test "$?" = "0" -a -z "$not_found" ; then
|
||||
str="$var=$prog"
|
||||
eval $str
|
||||
am_done=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
dump () {
|
||||
file=$1
|
||||
shift
|
||||
echo "$1" >> $file
|
||||
}
|
||||
|
||||
############################################
|
||||
# Main part
|
||||
############################################
|
||||
|
||||
if [ \! -d $SRCDIR ] ; then
|
||||
echo "WARNING $SRCDIR does not exist"
|
||||
exit
|
||||
fi
|
||||
|
||||
cd $SRCDIR
|
||||
|
||||
# figure out what download command to use
|
||||
find_program download wget lynx curl
|
||||
if test -z "$download"; then
|
||||
echo "cannot find downloading program -- aborting in despair"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# get the latest snapshot version number
|
||||
# rm -f "$latest_name"
|
||||
# $download "$url_arg/$latest_name"
|
||||
# if test ! -f "$latest_name" ; then
|
||||
# echo "Could not download latest snapshot number -- aborting"
|
||||
# exit 1
|
||||
# fi
|
||||
# version=$LAST_VERSION
|
||||
version="`cat $latest_name`"
|
||||
test_version=$TEST_VERSION
|
||||
|
||||
|
||||
#
|
||||
# If the config-file does not exist, create one standard test file
|
||||
#
|
||||
if [ \! -r $CONFIG_FILE ] ; then
|
||||
echo "CONFIG_FILE:$CONFIG_FILE does not exist, create default file"
|
||||
|
||||
CONFIG_FILE=build_sample_config.txt
|
||||
rm -f $CONFIG_FILE
|
||||
echo "gcc:1::--enable-picky" >> $CONFIG_FILE
|
||||
# echo "default build:::" >> $CONFIG_FILE
|
||||
# echo "static build:::--disable-shared --enable-static" >> $CONFIG_FILE
|
||||
# echo "non-threaded build:::--without-threads" >> $CONFIG_FILE
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# Here comes the main part.
|
||||
#
|
||||
perl build_tarball.pl --email $EMAIL --config $CONFIG_FILE --scratch $TMPDIR --file openmpi-$version.tar.bz2 \
|
||||
--patches "$PATCHES" \
|
||||
--leave-install $SRCDIR/ompi-out-$version.txt --install-dir=$HOME/ompi-install --nocheck
|
||||
|
||||
if [ \! -r ompi-out-$version.txt ] ; then
|
||||
echo "No ompi-out-$version.txt file found; none of the configurations have been built?"
|
||||
exit
|
||||
fi
|
||||
|
||||
#
|
||||
# Now compile and install the tests for different combinations...
|
||||
#
|
||||
perl build_tests.pl --email $EMAIL --config $CONFIG_FILE --file openmpi-tests-$test_version.tar.bz2 --leave-install $SRCDIR/ompi-tests-out-$test_version.txt --outfile $SRCDIR/ompi-out-$version.txt --install-dir=$HOME/ompi-tests-install --nocheck
|
||||
|
||||
f="ompi-script-$version"
|
||||
rm -fr $f
|
||||
dump $f "#!/bin/bash"
|
||||
dump $f "#PBS -l nodes=4,walltime=0:10:00" # Four nodes, and 10 minutes are enough
|
||||
dump $f "#PBS -k eo" # Combine stderr/stdout
|
||||
dump $f "#PBS -m ae" # Send mail on abort/end of job
|
||||
dump $f "#PBS -M $EMAIL" # Mail-adresses to send to
|
||||
dump $f ""
|
||||
dump $f "OLD_PATH=\$PATH"
|
||||
dump $f "OLD_LD_LIBRARY_PATH=\$LD_LIBRARY_PATH"
|
||||
dump $f "rm -fr $HOME/ompi-tmp/openmpi-sessions-*"
|
||||
dump $f "killall -9 orted"
|
||||
|
||||
for MPI_DIR in `cat $SRCDIR/ompi-out-$version.txt` ; do
|
||||
dump $f " echo Starting to test MPI_DIR:$MPI_DIR"
|
||||
dump $f " echo -------------------------------------------------"
|
||||
dump $f " export PATH=$MPI_DIR/bin:\$OLD_PATH"
|
||||
dump $f " export LD_LIBRARY_PATH=$MPI_DIR/lib:\$OLD_LD_LIBRARY_PATH"
|
||||
dump $f " rm -fr $HOME/ompi-tmp/openmpi-sessions-*"
|
||||
# Start the orted daemon in a commonly accessible directory (/tmp is local to each node)
|
||||
dump $f " orted --tmpdir $HOME/ompi-tmp --seed --persistent --scope public"
|
||||
for j in `cat $SRCDIR/ompi-tests-out-$test_version.txt` ; do
|
||||
dump $f " cd $j/bin"
|
||||
dump $f " mpirun -x LD_LIBRARY_PATH -hostfile \$PBS_NODEFILE -tmpdir $HOME/ompi-tmp -np 8 ./PMB-MPI1 PingPong PingPing Sendrecv Exchange Allreduce Reduce Allgather Allgatherv Alltoall Bcast Barrier"
|
||||
dump $f " ./tester -m -x LD_LIBRARY_PATH -hostfile \$PBS_NODEFILE -tmpdir $HOME/ompi-tmp -- mpich_all_tests"
|
||||
dump $f " cd -"
|
||||
dump $f " echo -------------------------------------------------"
|
||||
done
|
||||
dump $f " killall -9 orted"
|
||||
dump $f " sleep 10"
|
||||
dump $f " echo -------------------------------------------------"
|
||||
done
|
||||
|
||||
# qsub $SRCDIR/ompi-script-$version
|
||||
|
@ -1,357 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
# This script is used to make a report of how may unimplemented
|
||||
# top-level MPI functions exist.
|
||||
#
|
||||
# $1: scratch root
|
||||
# $2: e-mail address for destination
|
||||
# $3: URL_ARG
|
||||
#
|
||||
|
||||
scratch_root_arg="$1"
|
||||
email_arg="$2"
|
||||
url_arg="$3"
|
||||
|
||||
# Set this to any value for additional output; typically only when
|
||||
# debugging
|
||||
debug=
|
||||
|
||||
# do you want a success mail?
|
||||
want_success_mail=1
|
||||
|
||||
# download "latest" filename
|
||||
latest_name="latest_snapshot.txt"
|
||||
|
||||
# checksum filenames
|
||||
md5_checksums="md5sums.txt"
|
||||
sha1_checksums="sha1sums.txt"
|
||||
|
||||
# max length of logfile to send in an e-mail
|
||||
max_log_len=250
|
||||
|
||||
# email subject
|
||||
subject="Unimplemented function report"
|
||||
|
||||
# max number of snapshots to keep downloaded
|
||||
max_snapshots=3
|
||||
|
||||
# files to not report
|
||||
skip='accumulate.c|^get.c$|put.c|^win_'
|
||||
|
||||
############################################################################
|
||||
# Shouldn't need to change below this line
|
||||
############################################################################
|
||||
|
||||
start_time="`date`"
|
||||
|
||||
# This gets filled in later
|
||||
config_guess=
|
||||
|
||||
# Sanity checks
|
||||
if test -z "$scratch_root_arg" -o -z "$email_arg" -o -z "$url_arg"; then
|
||||
echo "Must specify scratch root directory, e-mail address, and URL_ARG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# send a mail
|
||||
# should only be called after logdir is set
|
||||
send_error_mail() {
|
||||
outfile="$scratch_root_arg/output.txt"
|
||||
rm -f "$outfile"
|
||||
touch "$outfile"
|
||||
for file in `/bin/ls $logdir/* | sort`; do
|
||||
len="`wc -l $file | awk '{ print $1}'`"
|
||||
if test "`expr $len \> $max_log_len`" = "1"; then
|
||||
tail -$max_log_len "$file" >> "$outfile"
|
||||
else
|
||||
cat "$file" >> "$outfile"
|
||||
fi
|
||||
done
|
||||
$mail -s "Failed report" "$email_arg" < "$outfile"
|
||||
rm -f "$outfile"
|
||||
}
|
||||
|
||||
# send output error message
|
||||
die() {
|
||||
msg="$*"
|
||||
cat > "$logdir/00_announce.txt" <<EOF
|
||||
Creating the nightly tarball ended in error:
|
||||
|
||||
$msg
|
||||
|
||||
Host: `hostname`
|
||||
EOF
|
||||
send_error_mail
|
||||
exit 1
|
||||
}
|
||||
|
||||
# do the work
|
||||
# should only be called after logdir is set
|
||||
do_command() {
|
||||
cmd="$*"
|
||||
logfile="$logdir/20-command.txt"
|
||||
rm -f "$logfile"
|
||||
if test -n "$debug"; then
|
||||
echo "*** Running command: $cmd"
|
||||
eval $cmd > "$logfile" 2>&1
|
||||
st=$?
|
||||
echo "*** Command complete: exit status: $st"
|
||||
else
|
||||
eval $cmd > "$logfile" 2>&1
|
||||
st=$?
|
||||
fi
|
||||
if test "$st" != "0"; then
|
||||
cat > "$logdir/15-error.txt" <<EOF
|
||||
|
||||
ERROR: Command returned a non-zero exist status
|
||||
$cmd
|
||||
|
||||
Host: `hostname`
|
||||
Start time: $start_time
|
||||
End time: `date`
|
||||
|
||||
=======================================================================
|
||||
EOF
|
||||
cat > "$logdir/25-error.txt" <<EOF
|
||||
=======================================================================
|
||||
|
||||
Your friendly daemon,
|
||||
Cyrador
|
||||
EOF
|
||||
send_error_mail
|
||||
exit 2
|
||||
fi
|
||||
rm -f "$logfile"
|
||||
}
|
||||
|
||||
# find a program from a list and load it into the target variable
|
||||
find_program() {
|
||||
var=$1
|
||||
shift
|
||||
|
||||
# first zero out the target variable
|
||||
str="$var="
|
||||
eval $str
|
||||
|
||||
# loop through the list and save the first one that we find
|
||||
am_done=
|
||||
while test -z "$am_done" -a -n "$1"; do
|
||||
prog=$1
|
||||
shift
|
||||
|
||||
if test -z "$prog"; then
|
||||
am_done=1
|
||||
else
|
||||
not_found="`which $prog 2>&1 | egrep '^no'`"
|
||||
which $prog > /dev/null 2>&1
|
||||
if test "$?" = "0" -a -z "$not_found"; then
|
||||
str="$var=$prog"
|
||||
eval $str
|
||||
am_done=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Find a mail program
|
||||
find_program mail Mail mailx mail
|
||||
if test -z "$mail"; then
|
||||
echo "Could not find mail program; aborting in despair"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# figure out what download command to use
|
||||
find_program download wget lynx curl
|
||||
if test -z "$download"; then
|
||||
echo "cannot find downloading program -- aborting in despair"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# move into the scratch directory, and ensure we have an absolute path
|
||||
# for it
|
||||
if test ! -d "$scratch_root_arg"; then
|
||||
mkdir -p "$scratch_root_arg"
|
||||
fi
|
||||
if test ! -d "$scratch_root_arg"; then
|
||||
echo "Could not cd to scratch root: $scratch_root_arg"
|
||||
exit 1
|
||||
fi
|
||||
cd "$scratch_root_arg"
|
||||
scratch_root_arg="`pwd`"
|
||||
logdir="$scratch_root_arg/logs"
|
||||
|
||||
# ensure some subdirs exist
|
||||
for dir in downloads logs; do
|
||||
if test ! -d $dir; then
|
||||
mkdir $dir
|
||||
fi
|
||||
done
|
||||
|
||||
# get the latest snapshot version number
|
||||
cd downloads
|
||||
rm -f "$latest_name"
|
||||
do_command $download "$url_arg/$latest_name"
|
||||
if test ! -f "$latest_name"; then
|
||||
die "Could not download latest snapshot number -- aborting"
|
||||
fi
|
||||
version="`cat $latest_name`"
|
||||
|
||||
# see if we need to download the tarball
|
||||
tarball_name="openmpi-$version.tar.gz"
|
||||
if test ! -f "$tarball_name"; then
|
||||
do_command $download "$url_arg/$tarball_name"
|
||||
if test ! -f "$tarball_name"; then
|
||||
die "Could not download tarball -- aborting"
|
||||
fi
|
||||
|
||||
# get the checksums
|
||||
rm -f "$md5_checksums" "$sha1_checksums"
|
||||
do_command $download "$url_arg/$md5_checksums"
|
||||
do_command $download "$url_arg/$sha1_checksums"
|
||||
fi
|
||||
|
||||
# verify the checksums
|
||||
md5_file="`grep $version.tar.gz $md5_checksums`"
|
||||
find_program md5sum md5sum
|
||||
if test -z "$md5sum"; then
|
||||
cat > $logdir/05_md5sum_warning.txt <<EOF
|
||||
WARNING: Could not find md5sum executable, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known MD5
|
||||
WARNING: checksums. Proceeding anyway...
|
||||
|
||||
EOF
|
||||
elif test -z "$md5_file"; then
|
||||
cat > $logdir/05_md5sum_warning.txt <<EOF
|
||||
WARNING: Could not find md5sum check file, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known MD5
|
||||
WARNING: checksums. Proceeding anyway...
|
||||
|
||||
EOF
|
||||
else
|
||||
md5_actual="`$md5sum $tarball_name 2>&1`"
|
||||
if test "$md5_file" != "$md5_actual"; then
|
||||
die "md5sum from checksum file does not match actual ($md5_file != $md5_actual)"
|
||||
fi
|
||||
fi
|
||||
|
||||
sha1_file="`grep $version.tar.gz $sha1_checksums`"
|
||||
find_program sha1sum sha1sum
|
||||
if test -z "$sha1sum"; then
|
||||
cat > $logdir/06_sha1sum_warning.txt <<EOF
|
||||
WARNING: Could not find sha1sum executable, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known SHA1
|
||||
WARNING: checksums. Proceeding anyway...
|
||||
|
||||
EOF
|
||||
elif test -z "$sha1_file"; then
|
||||
cat > $logdir/06_sha1sum_warning.txt <<EOF
|
||||
WARNING: Could not find sha1sum check file, so I will not be able to check
|
||||
WARNING: the validity of downloaded executables against their known SHA1
|
||||
WARNING: checksums. Proceeding anyway...
|
||||
|
||||
EOF
|
||||
else
|
||||
sha1_actual="`$sha1sum $tarball_name 2>&1`"
|
||||
if test "$sha1_file" != "$sha1_actual"; then
|
||||
die "sha1sum from checksum file does not match actual ($sha1_file != $sha1_actual)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make a root for this build to play in (scratch_root_arg is absolute, so
|
||||
# root will be absolute)
|
||||
root="$scratch_root_arg/build-$version"
|
||||
rm -rf "$root"
|
||||
mkdir "$root"
|
||||
cd "$root"
|
||||
|
||||
# make the unzip root
|
||||
startdir="`pwd`"
|
||||
unzip_root="$root/unimplemented_report"
|
||||
if test ! -d "$unzip_root"; then
|
||||
mkdir "$unzip_root"
|
||||
fi
|
||||
cd "$unzip_root"
|
||||
|
||||
# expand the tarball (do NOT assume GNU tar)
|
||||
do_command "gunzip -c $scratch_root_arg/downloads/$tarball_name | tar xf -"
|
||||
cd openmpi-$version/src/mpi
|
||||
|
||||
# setup output files
|
||||
report_c="$logdir/report_c.$$.txt"
|
||||
report_f77="$logdir/report_f77.$$.txt"
|
||||
rm -f "$report_c" "$report_f77"
|
||||
|
||||
# count unimplemented C functions
|
||||
cd c
|
||||
grep -ls "not yet implemented" *.c | egrep -v $skip > "$report_c"
|
||||
total_c="`ls -1 *.c | wc -l | awk '{ print $1 }'`"
|
||||
num_c="`wc -l $report_c | awk '{ print $1 }'`"
|
||||
|
||||
# count unimplemented F77 functions
|
||||
cd ../f77
|
||||
grep -ls "not yet implemented" *.c > "$report_f77"
|
||||
total_f77="`ls -1 *.c | wc -l | awk '{ print $1 }'`"
|
||||
num_f77="`wc -l $report_f77 | awk '{ print $1 }'`"
|
||||
|
||||
# trim the downloads dir to $max_snapshots
|
||||
cd "$scratch_root_arg/downloads"
|
||||
for ext in gz; do
|
||||
count="`ls openmpi*.tar.$ext | wc -l | awk '{ print $1 }'`"
|
||||
if test "`expr $count \> $max_snapshots`" = "1"; then
|
||||
num_old="`expr $count - $max_snapshots`"
|
||||
old="`ls -rt openmpi*.tar.$ext | head -n $num_old`"
|
||||
rm -f $old
|
||||
fi
|
||||
done
|
||||
|
||||
# send success mail
|
||||
$mail -s "$subject" "$email_arg" <<EOF
|
||||
Unimplemented MPI function report
|
||||
|
||||
Snapshot: $version
|
||||
|
||||
*************
|
||||
*** SKIPPING: $skip
|
||||
*************
|
||||
|
||||
Total C functions: $total_c
|
||||
Unimplemented C functions: $num_c
|
||||
|
||||
Total F77 functions: $total_f77
|
||||
Unimplemented F77 functions: $num_f77
|
||||
|
||||
Unimplemented C functions:
|
||||
---------------------------------------------------------------------------
|
||||
`cat $report_c`
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Unimplemented F77 functions:
|
||||
---------------------------------------------------------------------------
|
||||
`cat $report_f77`
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Your friendly daemon,
|
||||
Cyrador
|
||||
EOF
|
||||
|
||||
# all done
|
||||
rm -rf "$report"
|
||||
rm -rf "$root"
|
||||
rm -f "$config_list"
|
||||
exit 0
|
Загрузка…
x
Ссылка в новой задаче
Block a user