mirror of
https://github.com/davea42/libdwarf-code.git
synced 2025-10-19 12:03:39 +08:00

cmp as on many systems multiple differences affecting many tests will be painfully slow. Affects tests generating text over 30MB (some individual tests generate 3GB to 5GB of text).. modified: scripts/run-all-tests.sh
288 lines
6.5 KiB
Bash
288 lines
6.5 KiB
Bash
#!/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
|
|
|