mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-11 11:53:51 +00:00
226 lines
6.2 KiB
Bash
Executable File
226 lines
6.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# This script runs the nightly bootstrap tests.
|
|
# It is invoked directly from cron, so it runs
|
|
# without a proper environment (PATH, etc.) set up.
|
|
#
|
|
# NB. Although this file is under CVS control,
|
|
# the copy that is used by cron does not get
|
|
# automatically updated from the CVS repository.
|
|
# After any modifications, the master copy
|
|
# in /home/mercury/public/test_mercury/scripts
|
|
# should be updated manually.
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
tmpfile=/tmp/run_test$$
|
|
tmpscript=/tmp/test_mercury$$
|
|
mail_subject=/tmp/test_mercury_mail$$
|
|
trap 'rm -f $tmpfile $tmpscript $mail_subject; exit 1' 1 2 3 13 15
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
ulimit -c 0
|
|
|
|
C_COMPILER=gcc
|
|
BRANCH=
|
|
USE_MMC_MAKE=""
|
|
case $# in
|
|
1) HOST=$1 ;;
|
|
2) HOST=$1; C_COMPILER=$2 ;;
|
|
3) HOST=$1; C_COMPILER=$2; BRANCH=$3 ;;
|
|
4) HOST=$1; C_COMPILER=$2; BRANCH=$3; USE_MMC_MAKE=$4 ;;
|
|
*) echo "Usage: $0 host [c-compiler] [branch] [use_mmc_make]" 1>&2
|
|
exit 1 ;;
|
|
esac
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
if [ -d /home/mercury/public/. ]; then
|
|
TOPDIR=/home/mercury/public
|
|
PATH="$HOME/bin/$ARCH`awk '/^[^#]/{printf ":%s",$0;}' $TOPDIR/cron/.path`"
|
|
else
|
|
case "$HOST" in
|
|
# The repeated `mercury' for eris is deliberate.
|
|
eris) TOPDIR=/Users/mercury/mercury/public ;;
|
|
*) TOPDIR=$HOME/public ;;
|
|
esac
|
|
fi
|
|
PATH="$TOPDIR/mercury-latest/$FULLARCH/bin:$PATH"
|
|
PATH="$TOPDIR/$HOST:$PATH"
|
|
PATH="$HOME/bin:$PATH"
|
|
PATH="$PATH:/usr/bin"
|
|
export PATH
|
|
|
|
CVSROOT=/home/mercury/mercury1/repository
|
|
if [ -d $CVSROOT/. ]; then
|
|
:
|
|
else
|
|
case "$HOST" in
|
|
neptune|goofy|eris|bob)
|
|
CVSROOT=":ext:mercury@cvs.mercury.csse.unimelb.edu.au:$CVSROOT"
|
|
;;
|
|
*)
|
|
CVSROOT=":pserver:guest@cvs.mercury.csse.unimelb.edu.au:$CVSROOT"
|
|
;;
|
|
esac
|
|
fi
|
|
export CVSROOT
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Redirect all output to $tmpfile to stop cron mailing
|
|
# content-free messages to mercury@cs.mu.oz.au.
|
|
{
|
|
tm_dir=$TOPDIR/test_mercury/test_dirs/$HOST
|
|
|
|
[ -d $TOPDIR/test_mercury/scripts ] || mkdir -p $TOPDIR/test_mercury/scripts
|
|
cd $TOPDIR/test_mercury/scripts
|
|
|
|
cvs checkout mercury/tools/test_mercury
|
|
cp mercury/tools/test_mercury $tmpscript
|
|
|
|
cvs checkout mercury/tools/generate_index_html
|
|
cvs checkout mercury/config.guess
|
|
|
|
FULLARCH="`./mercury/config.guess`"
|
|
ARCH="`expr $FULLARCH : '\([^-]*\)-.*' `"
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
release_branch=12.08
|
|
case "$BRANCH" in
|
|
"")
|
|
DAY=`date '+%e'`
|
|
case $HOST in
|
|
mundroo|mundula)
|
|
# For these hosts we only run 3 times a week;
|
|
# twice during the week and once on the weekend.
|
|
# During the week, test the main branch.
|
|
# On the weekend, test the release branch.
|
|
#case `date '+%w'` in
|
|
# 0|6) BRANCH=$release_branch ;;
|
|
# *) BRANCH=latest ;;
|
|
#esac
|
|
BRANCH=latest
|
|
;;
|
|
goliath)
|
|
case $DAY in
|
|
*[02468]) BRANCH=$release_branch ;;
|
|
*) BRANCH=latest ;;
|
|
esac
|
|
;;
|
|
carlton)
|
|
BRANCH=latest
|
|
;;
|
|
*)
|
|
# On anything else just test the main branch.
|
|
BRANCH=latest
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
# While we are preparing for the release, test the release branch
|
|
# intensively -- only test the main branch on one host (the ROTD host).
|
|
#case $HOST in
|
|
#earth) ;;
|
|
#*) BRANCH=$release_branch ;;
|
|
#esac
|
|
#
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
echo run_test $HOST $C_COMPILER
|
|
echo branch $BRANCH
|
|
|
|
case "$C_COMPILER" in
|
|
gcc) logname="test-$BRANCH-$HOST" ;;
|
|
*) logname="test-$BRANCH-$HOST-$C_COMPILER" ;;
|
|
esac
|
|
|
|
[ -d $tm_dir/logs ] || mkdir -p $tm_dir/logs ]
|
|
[ -d $tm_dir/logs/old ] || mkdir -p $tm_dir/logs/old ]
|
|
[ -d $tm_dir/logs/old2 ] || mkdir -p $tm_dir/logs/old2 ]
|
|
mv -f $tm_dir/logs/old/$logname.out $tm_dir/logs/old2 2>/dev/null
|
|
mv -f $tm_dir/logs/old/$logname.out.errs $tm_dir/logs/old2 2>/dev/null
|
|
mv -f $tm_dir/logs/old/$logname.test_errs $tm_dir/logs/old2 2>/dev/null
|
|
mv -f $tm_dir/logs/$logname.out $tm_dir/logs/old 2>/dev/null
|
|
mv -f $tm_dir/logs/$logname.out.errs $tm_dir/logs/old 2>/dev/null
|
|
mv -f $tm_dir/logs/$logname.test_errs $tm_dir/logs/old 2>/dev/null
|
|
logfile="$tm_dir/logs/$logname.out"
|
|
|
|
if
|
|
nice -5 sh $tmpscript \
|
|
$HOST $ARCH $FULLARCH $BRANCH $C_COMPILER $USE_MMC_MAKE \
|
|
> $logfile 2>&1
|
|
then
|
|
test_status="succeeded"
|
|
fgrep '**' $logfile > $logfile.errs
|
|
if [ -s $logfile.errs ]; then
|
|
echo "test passed (with some errors supressed/ignored)"
|
|
echo "log file summary in $logfile.errs"
|
|
else
|
|
rm -f $logfile.errs
|
|
echo "test passed"
|
|
fi
|
|
if [ -s $logfile.test_errs ]; then
|
|
test_status="FAILED"
|
|
echo "Error: test passed but $logfile.test_errs not empty"
|
|
else
|
|
rm -f $logfile.test_errs
|
|
fi
|
|
echo
|
|
INSTALL_DIR=`tail $logfile | \
|
|
awk '/^Installation directory:/ { print $3; }' `
|
|
cd $INSTALL_DIR/bin
|
|
ls -l mercury_compile
|
|
size mercury_compile
|
|
{
|
|
echo $FULLARCH $BRANCH $HOST $C_COMPILER
|
|
ls -l mercury_compile
|
|
size mercury_compile
|
|
echo
|
|
} >> $tm_dir/logs/sizes
|
|
else
|
|
test_status="FAILED"
|
|
fgrep '**' $logfile > $logfile.errs
|
|
echo test FAILED
|
|
echo log file in $logfile
|
|
echo log file summary in $logfile.errs
|
|
if [ -s $logfile.test_errs ]; then
|
|
echo test failure summary in $logfile.test_errs
|
|
fi
|
|
fi
|
|
|
|
if [ -s $logfile.errs -o -s $logfile.test_errs ]; then
|
|
if [ -s $logfile.errs ]; then
|
|
# Failures building the compiler or library should
|
|
# occur early in the log summary.
|
|
echo first 10 lines of log file summary:
|
|
head -10 $logfile.errs
|
|
echo
|
|
echo
|
|
fi
|
|
if [ -s $logfile.test_errs ]; then
|
|
echo first 100 test failures:
|
|
grep "FAILED TEST" $logfile.test_errs | head -100 -
|
|
fi
|
|
elif [ $test_status = "FAILED" ]; then
|
|
echo
|
|
echo last 20 lines of log file:
|
|
tail -20 $logfile
|
|
fi
|
|
|
|
# We can't just set a variable containing the mail subject string
|
|
# because sh (but not bash) executes compound commands with redirection
|
|
# in a sub-shell.
|
|
echo "test_mercury $test_status: $BRANCH $HOST $C_COMPILER" > $mail_subject
|
|
} > $tmpfile 2>&1
|
|
|
|
# NB we can't just pipe into `mutt' because the $mail_subject file
|
|
# needs to be written before `mutt' is started.
|
|
mutt -s "`cat $mail_subject`" juliensf@csse.unimelb.edu.au < $tmpfile
|
|
rm -f $tmpfile $tmpscript $mail_subject
|
|
|
|
#-----------------------------------------------------------------------------#
|