#!/bin/sh

# Automated build and test for Valgrind.  
#   Use: two args, first is path to top of ValgrindABT tree
#        second is name of machine

runcmd () {
   echo -n "   $1  ... " >> log.short
   shift

   (eval "$*") >> log.verbose 2>&1

   if [ $? == 0 ]
   then
      echo "done" >> log.short
      return 0
   else
      echo "failed" >> log.short
      return 1
   fi
}

ABT_TOP=$1
ABT_MACHINE=$2

ABT_START=`date "+%F %H:%M:%S %Z"`

cd $ABT_TOP

source $ABT_TOP/conf/$ABT_MACHINE.conf

rm -rf log.verbose log.short valgrind

echo > log.short
echo > log.verbose

echo "Nightly build on" $ABT_MACHINE "(" $ABT_DETAILS ") started at" $ABT_START >> log.short
echo >> log.short

echo "Nightly build on" $ABT_MACHINE "(" $ABT_DETAILS ") started at" $ABT_START >> log.verbose
echo >> log.verbose

runcmd "Checking out vex source tree     " \
       "svn co svn://svn.valgrind.org/vex/trunk vex" && \
\
runcmd "Building vex                     " \
       "cd vex && pwd && make clean version all" && \
\
runcmd "Checking out valgrind source tree" \
       "svn co svn://svn.valgrind.org/valgrind/trunk valgrind" && \
\
runcmd "Configuring valgrind             " \
       "cd valgrind && ./autogen.sh  && ./configure --prefix=$ABT_TOP/Inst --with-vex=$ABT_TOP/vex" && \
\
runcmd "Building valgrind                " \
       "cd valgrind && make && make install" && \
\
runcmd "Running regression tests         " \
       "cd valgrind && make regtest"

egrep -q '^== [0-9]+ tests' log.verbose && (
   echo >> log.short
   echo "Regression test results follow" >> log.short
   echo >> log.short
   awk '/^== [0-9]+ tests/, /^$/ { print }' log.verbose >> log.short
) || (
   echo >> log.short
   echo "Last 20 lines of log.verbose follow" >> log.short
   echo >> log.short
   tail -20 log.verbose >> log.short
)

$ABT_TOP/conf/$ABT_MACHINE.sendmail "$ABT_START nightly build ($ABT_MACHINE, $ABT_DETAILS)" \
	$ABT_TOP/log.short
