mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-13 22:46:59 +00:00
159 lines
5.0 KiB
Bash
Executable File
159 lines
5.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Automated build and test for Valgrind. Compares Valgrind from 24 hours
|
|
# ago with the current one.
|
|
#
|
|
# Use: two args, first is path to top of ValgrindABT tree
|
|
# second is name of machine
|
|
#----------------------------------------------------------------------------
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Helper function
|
|
#----------------------------------------------------------------------------
|
|
|
|
runcmd () {
|
|
logfile=$1
|
|
str=$2
|
|
shift 2
|
|
|
|
# Header in short logfile
|
|
echo -n " $str ... " >> $logfile.short
|
|
|
|
# Header and command in verbose logfile
|
|
echo -n " $str ... " >> $logfile.verbose
|
|
echo "$*" >> $logfile.verbose
|
|
|
|
# Run the command
|
|
(eval "$*") >> $logfile.verbose 2>&1
|
|
res=$?
|
|
|
|
# Write result to the short logfile
|
|
if [ $res == 0 ]
|
|
then
|
|
echo "done" >> $logfile.short
|
|
else
|
|
echo "failed" >> $logfile.short
|
|
fi
|
|
|
|
return $res
|
|
}
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Startup
|
|
#----------------------------------------------------------------------------
|
|
# Get args from command line
|
|
ABT_TOP=$1
|
|
ABT_MACHINE=$2
|
|
|
|
# Get times and date
|
|
ABT_START=`date "+%F %H:%M:%S %Z"`
|
|
|
|
svn_old_date=`date --date=yesterday +%Y-%m-%dT%H:%M:%S`
|
|
svn_new_date=`date --date=today +%Y-%m-%dT%H:%M:%S`
|
|
|
|
cd $ABT_TOP
|
|
|
|
source $ABT_TOP/conf/$ABT_MACHINE.conf
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Check out, build, test
|
|
#----------------------------------------------------------------------------
|
|
|
|
# Do everything twice -- once for the 24 hours old Valgrind, and once
|
|
# for the current one.
|
|
for logfile in old new ; do
|
|
|
|
# Remove the old valgrind/ and vex/ directories
|
|
rm -rf valgrind vex
|
|
|
|
# Remove old short and verbose log files, and start the new ones
|
|
for ext in short verbose ; do
|
|
echo > $logfile.$ext
|
|
done
|
|
|
|
# Choose the current Valgrind, or one from 24 hours ago
|
|
if [ $logfile = "old" ] ; then
|
|
svn_date=$svn_old_date
|
|
else
|
|
svn_date=$svn_new_date
|
|
fi
|
|
|
|
# Get dates for the old and new versions
|
|
|
|
# Check out, build, run tests
|
|
runcmd $logfile \
|
|
"Checking out valgrind source tree" \
|
|
"svn co svn://svn.valgrind.org/valgrind/trunk -r {$svn_date} valgrind" && \
|
|
\
|
|
runcmd $logfile \
|
|
"Configuring valgrind " \
|
|
"cd valgrind && ./autogen.sh && ./configure --prefix=$ABT_TOP/Inst" && \
|
|
\
|
|
runcmd $logfile \
|
|
"Building valgrind " \
|
|
"cd valgrind && make && make install" && \
|
|
\
|
|
runcmd $logfile \
|
|
"Running regression tests " \
|
|
"cd valgrind && make regtest"
|
|
|
|
# Grab some indicative text for the short log file -- if the regtests
|
|
# succeeded, show their results. If we didn't make it that far, show the
|
|
# last 20 lines.
|
|
egrep -q '^== [0-9]+ tests' $logfile.verbose && (
|
|
echo >> $logfile.short
|
|
echo "Regression test results follow" >> $logfile.short
|
|
echo >> $logfile.short
|
|
awk '/^== [0-9]+ tests/, /^$/ { print }' $logfile.verbose >> $logfile.short
|
|
) || (
|
|
echo >> $logfile.short
|
|
echo "Last 20 lines of verbose log follow" >> $logfile.short \
|
|
echo >> $logfile.short
|
|
tail -20 $logfile.verbose >> $logfile.short
|
|
)
|
|
done
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Prepare results and send
|
|
#----------------------------------------------------------------------------
|
|
|
|
# 'final' shows the difference between the old and new results
|
|
echo > final
|
|
echo "Nightly build on" $ABT_MACHINE "(" $ABT_DETAILS ")" \
|
|
"started at" $ABT_START >> final
|
|
|
|
# If the results differ from 24 hours ago, print extra stuff.
|
|
diff -C1 old.short new.short > diff.short
|
|
changed=$?
|
|
|
|
if [ $changed != 0 ] ; then
|
|
echo "Results differ from 24 hours ago" >> final
|
|
else
|
|
echo "Results unchanged from 24 hours ago" >> final
|
|
fi
|
|
|
|
# Always show the current results.
|
|
cat new.short >> final
|
|
|
|
if [ $changed != 0 ] ; then
|
|
echo "=================================================" >> final
|
|
echo "== Results from 24 hours ago ==" >> final
|
|
echo "=================================================" >> final
|
|
cat old.short >> final
|
|
|
|
echo >> final
|
|
echo "=================================================" >> final
|
|
echo "== Difference between 24 hours ago and now ==" >> final
|
|
echo "=================================================" >> final
|
|
echo >> final
|
|
cat diff.short >> final
|
|
echo >> final
|
|
fi
|
|
|
|
# Email the results
|
|
$ABT_TOP/conf/$ABT_MACHINE.sendmail \
|
|
"$ABT_START nightly build ($ABT_MACHINE, $ABT_DETAILS)" \
|
|
$ABT_TOP/final
|