#!/bin/sh
# Copyright (C) 2021 David Anderson
# This test script is in the public domain for use
# by anyone for any purpose.
start=`date`
echo "start run-all-tests.sh at $start"
echo "This removes and recreates /tmp/dw-regression"
echo "Use --enable-nonstandardprintf to use Windows long long"
echo " printf formats."
echo 'Starting run-all-tests.sh' \
`date "+%Y-%m-%d %H:%M:%S"`
stsecs=`date '+%s'`
# Removes and recreates /tmp/dwtestalldd directory
# for the regression tests.
chkisdir() {
if [ ! -d $1 ]
then
echo "The directory $1 is not found"
echo "we are in the wrong directory to run-all-tests.sh"
exit 1
fi
}
here=`pwd`
ddsrc=$here/src/bin/dwarfdump
rosrc=$here/../readelfobj/code
rtestsrc=$here/../regressiontests
# Sanity checks ensuring we are in the right place.
chkisdir scripts
chkisdir $ddsrc
chkisdir $rtestsrc
chkisdir $here/src/lib/libdwarf
chkisdir $here/src/bin/dwarfexample
chkisdir $here/src/bin/dwarfgen
chkisdir $here/test
chkisdir $here/doc
# We run the regression tests here.
ddtestdir=/tmp/dw-regression
rm -rf $ddtestdir
mkdir $ddtestdir
ddbld=/tmp/vaddbld
robld=/tmp/varobld
argval=''
nonstdprintf=
goodcount=0
failcount=0
stsecs=`date '+%s'`
chkres () {
if [ $1 = 0 ]
then
goodcount=`expr $goodcount + 1`
else
echo FAIL $2
failcount=`expr $failcount + 1`
fi
}
while [ $# -ne 0 ]
do
case $1 in
--enable-nonstandardprintf ) nonstdprintf=$1 ; shift ;;
* ) echo "Only --enable-nonstandardprintf allowed."
echo "No action taken. Exit"
exit 1 ;;
esac
done
if [ x$nonstdprintf != "x" ]
then
echo "Use nonstandardprintf. $nonstdprintf"
fi
echo "Starting run-all-tests.sh now"
echo run from $here
if [ ! -d $here/src/bin/dwarfdump ]
then
chkres 1 "A FAIL: This is not the libdwarf 'code' directory "
echo "A FAIL: $here/src/bin/dwarfdump missing. Run from 'code'"
exit 1
fi
if [ ! -d $here/src/lib/libdwarf ]
then
chkres 1 "B FAIL: This is not the libdwarf 'code' directory "
echo "B FAIL: $here/src/lib/libdwarf missing"
fi
if [ ! -d $here/src/bin/dwarfexample ]
then
chkres 1 "C FAIL: This is not the libdwarf 'code' directory"
echo "C FAIL: $here/src/bin/dwarfexample missing"
exit 1
fi
# ========
builddwarfdump() {
echo "Build dwarfdump source: $here builddir: $ddbld nonstdprintf $nonstdprintf"
oac=$ddbld
rm -rf $oac
mkdir $oac
chkres $? "D FAIL: unable to create $oac, giving up."
cd $oac
chkres $? "E FAIL: unable to cd to $oac, giving up."
if [ x$1 = "x" ]
then
$here/configure --enable-wall $nonstdprintf --enable-dwarfgen --enable-dwarfexample
else
$here/configure --enable-wall $1 $nonstdprintf --enable-dwarfexample
fi
chkres $? "F FAIL: configure failed in $oac giving up."
make check
chkres $? "G FAIL: make check failed in $oac, giving up."
if [ $failcount -eq 0 ]
then
echo "PASS Build dwarfdump"
else
echo "FAIL FAIL Build dwarfdump give up"
exit 1
fi
}
rundistcheck()
{
echo "Now rundistcheck"
cd $here
chkres $? "Q FAIL: scripts/buildandreleasetest.sh FAIL"
sh scripts/buildandreleasetest.sh $1 $nonstdprintf
r=$?
chkres $r "R FAIL: scripts/buildandreleasetest.sh FAIL"
if [ $failcount -eq 0 ]
then
echo "PASS run-all-tests.sh rundistcheck"
else
echo "Exit rundistcheck"
exit 1
fi
}
#======= readelfobj, readobjpe, readobjmacho etc tests
# with make check
buildreadelfobj() {
echo "Now buildreadelfobj"
rm -rf $robld
mkdir $robld
rodir=$rosrc
echo "Build readelfobj source: $rosrc builddir: $robld"
if [ ! -d $rodir ]
then
echo "K FAIL: cd $rodir not a directory, giving up."
exit 1
fi
echo "Now run readelfobj in $robld from readelfobj source $rodir"
chkres $? "L FAIL: $robld mkdir failed, giving up."
cd $robld
chkres $? "M FAIL: cd $robld failed, giving up."
# Just safety, we do not care if distclean fails
make distclean
#
$rodir/configure --enable-wall $nonstdprintf
chkres $? "N FAIL: configure $rodir/configure failed, giving up."
make
chkres $? "Oa FAIL: make in $rodir failed, giving up."
make check
chkres $? "Ob FAIL: make check in $rodir failed, giving up."
if [ $failcount -eq 0 ]
then
echo "PASS run-all-tests.sh buildreadelfobj"
else
echo "Exit buildreadelfobj"
exit 1
fi
}
#=================now run tests, meaning regressiontests
runfullddtest() {
echo "Run full dd test: run regressiontests in $ddtestdir"
cd $ddtestdir
chkres $? "H FAIL: cd $ddtestdir failed , giving up."
# so big diff files just do cmp
export SUPPRESSBIGDIFFS=y
$rtestsrc/INITIALSETUP.sh $rtestsrc
chkres $? "J FAIL INITIALSETUP failed $ddtestdir. giving up."
unset SUPPRESSBIGDIFFS
$rtestsrc/RUNALL.sh
chkres $? "J FAIL RUNALL failed $ddtestdir."
# Just show the fails, if any.
grep FAIL <$ddtestdir/ALLdd
# Now actually check result against the 'PASS' result.
grep "FAIL count: 0" $ddtestdir/ALLdd
chkres $? "Q FAIL: something failed in $ddtestdir."
tail -40 $ddtestdir/ALLdd
if [ $failcount -eq 0 ]
then
head -n 15 ALLdd
echo "..."
head -n 30 ALLdd
echo "PASS full run-all-tests.sh regressiontests"
else
echo "FAIL count $failcount full run-all-tests.sh regressiontests"
if [ $r -ne 0 ]
then
echo "Stopping after RUNALL.sh"
exit 1
fi
fi
}
#========actually run tests
if [ -d $ddsrc ]
then
builddwarfdump $argval $nonstdprintf
rundistcheck $argval $nonstdprintf
r=$?
chkres $r "FAIL rundistcheck"
if [ $r -ne 0 ]
then
echo "Stopping after distcheck"
exit 1
fi
else
echo "dwarfdump make check etc not run"
fi
if [ -d $rosrc ]
then
buildreadelfobj
r=$?
chkres $r "FAIL buildreadelfobj"
if [ $r -ne 0 ]
then
echo "Stopping after buildreadelfobj"
exit 1
fi
else
echo "readelfobj make check etc not run"
fi
if [ -d $rtestsrc ]
then
runfullddtest $argval $nonstdprintf
r=$?
chkres $r "FAIL runddtest"
if [ $r -ne 0 ]
then
echo "Stopping after buildreadelfobj"
exit 1
fi
else
echo "dwarfdump regressiontests not run"
fi
echo "Done with all tests"
echo "FAIL $failcount in run-all-tests.sh"
if [ $failcount -ne 0 ]
then
echo "FAIL $failcount as known to run-all-tests.sh"
else
echo "PASS run-all-tests.sh"
fi
echo "run-all-tests.sh started at $start"
don=`date`
echo "run-all-tests.sh done at $don"
ndsecs=`date '+%s'`
showminutes() {
t=`expr \( $2 \- $1 \+ 29 \) \/ 60`
echo "Run time in minutes: $t"
}
showminutes $stsecs $ndsecs
if [ $failcount -ne 0 ]
then
echo "run-all-tests.sh FAIL count $failcount"
exit 1
else
echo "run-all-tests.sh all PASS"
fi
exit 0