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

which was not working on MacOS, possibly due to issues with copying libraries around (without the proper details for MacOS). So now we just default all build mechanisms to be static library builds. Works on Linux and MacOS without other changes. modified: scripts/buildandreleasetest.sh
470 lines
13 KiB
Bash
470 lines
13 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2021 David Anderson
|
|
# This test script is in the public domain for use
|
|
# by anyone for any purpose.
|
|
echo "sh scripts/buildandreleasetest.sh [--static|--shared]"
|
|
echo " [--disable-dwarfgen] [--enable-wall] [--savebart]"
|
|
echo " --savebart means do not delete temp files"
|
|
echo " Defaults to shared library build and use"
|
|
|
|
# A script verifying the distribution gets all needed files
|
|
# for building, including "make check"
|
|
#
|
|
# For a guaranteed clean run:
|
|
# sh autogen.sh
|
|
# sh scripts/buildandreleasetest.sh
|
|
# All the generated files are in /tmp/bart
|
|
#
|
|
|
|
echo 'Starting buildandreleasetest.sh:' \
|
|
`date "+%Y-%m-%d %H:%M:%S"`
|
|
stsecs=`date '+%s'`
|
|
|
|
shared=y
|
|
configureopt="--enable-shared --disable-static"
|
|
cmakeopt="-DBUILD_SHARED=NO -DBUILD_NON_SHARED=YES"
|
|
mesonopt="--default-library static"
|
|
|
|
# accomodate differences in cmake install file count:
|
|
# 16 is for 32bit build
|
|
# 18 is for 64bit build
|
|
#expectlen32=16
|
|
#expectlen64=18
|
|
genopta="--enable-dwarfgen"
|
|
genoptb="-DBUILD_DWARFGEN=ON"
|
|
wd=`pwd`
|
|
# If passes, remove the /tmp/bart working directory.
|
|
# Useful to consider if all intended files actually present,
|
|
# including any possibly not used.
|
|
savebart=n
|
|
enablewall=n
|
|
staticbuild=y
|
|
while [ $# -ne 0 ]
|
|
do
|
|
case $1 in
|
|
--static ) shared=n ;
|
|
staticbuild=y
|
|
configureopt="--enable-static --disable-shared"
|
|
cmakeopt="-DBUILD_SHARED=NO -DBUILD_NON_SHARED=YES"
|
|
mesonopt="--default-library static"
|
|
shift ;;
|
|
--shared ) shared=y ;
|
|
staticbuild=n
|
|
configureopt="--enable-shared --disable-static"
|
|
cmakeopt="-DBUILD_SHARED=YES -DBUILD_NON_SHARED=NO"
|
|
mesonopt="--default-library shared"
|
|
shift ;;
|
|
--enable-wall ) enablewall=y; shift ;;
|
|
--savebart ) savebart=y ; shift ;;
|
|
--disable-dwarfgen ) genopta='' ; genoptb='' ; shift ;;
|
|
* ) echo "Unknown buildandreleasetest.sh option $1. Error." ; exit 1 ;;
|
|
esac
|
|
done
|
|
if [ "x$enablewall" = "y" ]
|
|
then
|
|
configureopt="$configureopt --enable-wall"
|
|
cmakeopt="$cmakeopt -DWALL=YES"
|
|
mesonopt="$mesonopt -Dwerror=true"
|
|
else
|
|
cmakeopt="$cmakeopt"
|
|
mesonopt="$mesonopt -Dwerror=false"
|
|
fi
|
|
echo "Build specific options:"
|
|
echo " configure : $configureopt"
|
|
echo " cmake : $cmakeopt"
|
|
echo " meson : $mesonopt"
|
|
echo "savebart flag:...: $savebart"
|
|
if [ "$staticbuild" = "y" ]
|
|
then
|
|
if [ "x$USERDOMAIN" = "xMSYS" ]
|
|
then
|
|
echo "Libdwarf configure objects to a static build"
|
|
echo "on Windows Msys2 so this script will not work"
|
|
echo "here. Giving up."
|
|
exit 1
|
|
fi
|
|
fi
|
|
if [ -f ./configure.ac ]
|
|
then
|
|
f=./configure.ac
|
|
else
|
|
if [ -f ../configure.ac ]
|
|
then
|
|
f=../configure.ac
|
|
else
|
|
echo "FAIL Running distribution test from the wrong place."
|
|
exit
|
|
fi
|
|
fi
|
|
if [ ! -x ./configure ]
|
|
then
|
|
echo "./configure is missing or not executable."
|
|
echo "Possibly one needs to run autogen.sh?"
|
|
echo "Giving up"
|
|
exit 1
|
|
fi
|
|
v=`./configure --version | head -n 1 | cut -f 3 -d " "`
|
|
echo "configure.ac version is v=$v"
|
|
if [ x$v = "x" ]
|
|
then
|
|
echo FAIL did not get configure.ac version
|
|
exit 1
|
|
fi
|
|
|
|
chkres() {
|
|
if [ $1 -ne 0 ]
|
|
then
|
|
echo "$2"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
mdirs() {
|
|
while [ $# -ne 0 ]
|
|
do
|
|
f=$1
|
|
rm -rf $f
|
|
mkdir $f
|
|
chkres $? "mkdir $f failed!"
|
|
shift
|
|
done
|
|
}
|
|
|
|
safecd() {
|
|
f=$1
|
|
cd $f
|
|
chkres $? "cd $f failed $2"
|
|
}
|
|
safemv() {
|
|
s=$1
|
|
t=$2
|
|
echo "mv $s $t"
|
|
mv $s $t
|
|
chkres $? "mv $f $t failed $3"
|
|
}
|
|
|
|
showinstalled() {
|
|
dir=$1
|
|
msg=$2
|
|
tmpdir=$3
|
|
|
|
echo "REPORT OF INSTALLED FILES in $dir $msg"
|
|
if [ ! -d $dir ]
|
|
then
|
|
echo "Target install directory $1 does not exist"
|
|
echo "Fatal error"
|
|
exit 1
|
|
fi
|
|
find $dir -type f -print >$tmpdir
|
|
len=`wc -l <$tmpdir`
|
|
echo "Number of files $len"
|
|
cat $tmpdir
|
|
echo "======end of install list"
|
|
echo ""
|
|
}
|
|
|
|
configloc=$wd/configure
|
|
bart=/tmp/bart
|
|
abld=$bart/a-dwbld
|
|
ainstall=$bart/a-install
|
|
binstrelp=$bart/a-installrelp
|
|
binstrelbld=$bart/b-installrelbld
|
|
blibsrc=$bart/b-libsrc
|
|
crelbld=$bart/c-installrelbld
|
|
cinstrelp=$bart/c-installrelp
|
|
dbigend=$bart/d-bigendian
|
|
ecmakebld=$bart/e-cmakebld
|
|
fcmakebld=$bart/f-cmakebld
|
|
fcmakeinst=$bart/f-cmakeinstalltarg
|
|
gcmakebld=$bart/g-cmakebld
|
|
hcmakebld=$bart/h-cmakebld
|
|
imesonbld=$bart/i-mesonbld
|
|
mdirs $bart $abld $ainstall $binstrelp $binstrelbld $crelbld
|
|
mdirs $cinstrelp $dbigend $ecmakebld $fcmakebld $gcmakebld
|
|
mdirs $hcmakebld $imesonbld
|
|
relset=$bart/a-gzfilelist
|
|
atfout=$bart/a-tarftout
|
|
btfout=$bart/b-tarftout
|
|
btfoutb=$bart/b-tarftoutb
|
|
ftfout=$bart/f-tarftout
|
|
itfout=$bart/i-tarftout
|
|
rm -rf $bart/a-dwrelease
|
|
rm -rf $blibsrc
|
|
|
|
arelgz=$bart/a-dwrelease.tar.gz
|
|
brelgz=$bart/b-dwrelease.tar.gz
|
|
rm -rf $arelgz
|
|
rm -rf $brelgz
|
|
echo "dirs created empty"
|
|
|
|
echo cd $abld
|
|
safecd $abld "FAIL A cd failed"
|
|
echo "now: $configloc $configureopt --prefix=$ainstall"
|
|
$configloc $configureopt --prefix=$ainstall
|
|
r=$?
|
|
chkres $r "FAIL A4a configure fail"
|
|
echo "TEST Section A: initial $ainstall make install"
|
|
make
|
|
make doc
|
|
chkres $? "FAIL Section A 4rb make doc"
|
|
make install
|
|
chkres $? "FAIL Section A 4b make install"
|
|
showinstalled $ainstall "using configure" $atfout
|
|
ls -lR $ainstall
|
|
make dist
|
|
chkres $? "FAIL make dist Section A"
|
|
# We know there is just one tar.gz in $abld, that we just created
|
|
ls -1 ./*tar.gz
|
|
chkres $? "FAIL Section A ls ./*tar.gz"
|
|
safemv ./*.tar.gz $arelgz "FAIL Section A moving gz"
|
|
ls -l $arelgz
|
|
tar -zxf $arelgz
|
|
chkres $? "FAIL A B2tar tar -zxf $arelgz"
|
|
safemv libdwarf-$v $blibsrc "FAIL moving libdwarf srcdir"
|
|
echo " End Section A $bart"
|
|
################ End Section A
|
|
################ Start Section B
|
|
echo "TEST Section B: now cd $binstrelbld for second build install"
|
|
safecd $binstrelbld "FAIL B cd"
|
|
echo "TEST: now second install install, prefix $binstrelp"
|
|
echo "TEST: Expecting src in $blibsrc"
|
|
$blibsrc/configure $configureopt --enable-dwarfgen --enable-dwarfexample --prefix=$binstrelp
|
|
chkres $? "FAIL configure fail in Section B"
|
|
echo "TEST: In $binstrelbld make install from $blibsrc/configure"
|
|
make
|
|
chkres $? "FAIL make fail in Section B"
|
|
make doc
|
|
chkres $? "FAIL make doc fail in Section B"
|
|
make install
|
|
chkres $? "FAIL Section B install fail"
|
|
showinstalled $binstrelp "config, secondary install" $btfoutb
|
|
echo "TEST: Now lets see if make check works"
|
|
make check
|
|
chkres $? "FAIL make check in Section B"
|
|
make dist
|
|
chkres $? "FAIL make dist Section B"
|
|
# We know there is just one tar.gz in $abld, that we just created
|
|
ls -1 ./*tar.gz
|
|
safemv ./*.tar.gz $brelgz "FAIL Section B moving gz"
|
|
ls -l $arelgz
|
|
ls -l $brelgz
|
|
# gzip does not build diffs quite identically to the byte.
|
|
# Lots of diffs, So we do tar tf to get the file name list.
|
|
echo "Now tar -tf on $arelgz and $brelgz "
|
|
# Sort as freebsd64 manages a distinct order at times.
|
|
tar -tf $arelgz | sort > $atfout
|
|
tar -tf $brelgz | sort > $btfout
|
|
echo "=========================diff make dist content========="
|
|
echo "Now diff the tar tf from $arelgz and $brelgz"
|
|
diff $atfout $btfout
|
|
chkres $? "FAIL second gen tar gz file list does not match first gen"
|
|
echo " End Section B $bart"
|
|
################ End section B
|
|
|
|
################ Start section C
|
|
echo "TEST Section C: now cd $dbigend for big-endian build (not runnable) "
|
|
|
|
safecd $dbigend "FAIL C be1 "
|
|
echo "TEST: now second install install, prefix $crelbld"
|
|
echo "TEST: Expecting src in $blibsrc"
|
|
echo "TEST: $blibsrc/configure $genopta --enable-wall --enable-dwarfexample --prefix=$crelbld"
|
|
$blibsrc/configure $configureopt $genopta --enable-dwarfexample --prefix=$cinstrelp
|
|
chkres $? "FAIL be2 configure fail"
|
|
echo "#define WORDS_BIGENDIAN 1" >> config.h
|
|
echo "TEST: Compile In $dbigend make from $blibsrc/configure"
|
|
make
|
|
chkres $? "FAIL be3 make: Build failed"
|
|
make doc
|
|
chkres $? "FAIL be3 make doc: failed"
|
|
echo " End Section C $bart"
|
|
################ End section C
|
|
|
|
################ Start section D
|
|
safecd $crelbld "FAIL section D cd "
|
|
echo "TEST: Now configure from source dir $blibsrc/ in build dir $crelbld"
|
|
$blibsrc/configure $configureopt --enable-dwarfexample $genopta
|
|
chkres $? "FAIL C9 $blibsrc/configure"
|
|
make
|
|
chkres $? "FAIL C9 $blibsrc/configure make"
|
|
make doc
|
|
chkres $? "FAIL C9 $blibsrc/configure make doc"
|
|
echo " End Section D $bart"
|
|
################### End Section D
|
|
################### Cmake test E
|
|
safecd $ecmakebld "FAIL C10 Section E cd"
|
|
havecmake=n
|
|
which cmake >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
havecmake=y
|
|
echo "We have cmake and can test it."
|
|
fi
|
|
if [ $havecmake = "y" ]
|
|
then
|
|
echo "TEST E: Now cmake from source dir $blibsrc/ in build dir $ecmakebld"
|
|
cmake -G Ninja $cmakeopt $genoptb \
|
|
-DBUILD_NON_SHARED=ON \
|
|
-DBUILD_DWARFEXAMPLE=ON\
|
|
-DDO_TESTING=ON $blibsrc
|
|
chkres $? "FAIL C10b cmake in $ecmakdbld"
|
|
ninja
|
|
chkres $? "FAIL C10c cmake make in $ecmakebld"
|
|
ninja test
|
|
#chkres $? "FAIL C10d cmake make test in $ecmakebld"
|
|
#ctest -R self
|
|
chkres $? "FAIL C10e ctest -R self in $ecmakebld"
|
|
else
|
|
echo "cmake not installed so Test section E not tested."
|
|
fi
|
|
echo " End Section E $bart (ls output follows)"
|
|
ls $bart
|
|
############ End Section E
|
|
################### Cmake test F
|
|
safecd $fcmakebld "FAIL C11 Section F cd"
|
|
havecmake=n
|
|
which cmake >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
havecmake=y
|
|
echo "We have cmake and can test it: test F."
|
|
fi
|
|
if [ x$havecmake = "xy" ]
|
|
then
|
|
echo "TEST F: Now cmake from source dir $blibsrc/ in build dir $fcmakebld"
|
|
# We are doing -DBUILD_DWARFGEN=ON as a sanity check.
|
|
# Building lidwarfp and dwarfgen.
|
|
# You should not be building or installing dwarfgen
|
|
# or libdwarfp, it is unlikely you have a use
|
|
# for lidwarfp and dwarfgen.
|
|
cmake -G "Unix Makefiles" $cmakeopt $genoptb \
|
|
-DCMAKE_INSTALL_PREFIX=$fcmakeinst \
|
|
-DWALL=ON \
|
|
-DBUILD_DWARFEXAMPLE=ON \
|
|
-DDO_TESTING=ON $blibsrc
|
|
chkres $? "FAIL Sec F C11b cmake in $ecmakdbld"
|
|
make
|
|
chkres $? "FAIL Sec F C11c cmake make in $fcmakebld"
|
|
make test
|
|
chkres $? "FAIL Sec F C11d cmake make test in $fcmakebld"
|
|
make install
|
|
chkres $? "FAIL Sec F C11d cmake install in $fcmakebld"
|
|
showinstalled $fcmakeinst "using cmake" $ftfout
|
|
ctest -R self
|
|
chkres $? "FAIL Sec F C11e ctest -R self in $fcmakebld"
|
|
else
|
|
echo "cmake not installed (sec. F) not tested."
|
|
fi
|
|
echo " End Section F $bart (ls output follows)"
|
|
ls $bart
|
|
############ End Section F
|
|
################### Cmake test G
|
|
safecd $gcmakebld "FAIL C11 Section G cd"
|
|
havecmake=n
|
|
which cmake >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
havecmake=y
|
|
echo "We have cmake and can test it."
|
|
fi
|
|
if [ $havecmake = "y" ]
|
|
then
|
|
echo "TEST: Now cmake sharedlib from source dir $blibsrc/ in build dir $gcmakebld"
|
|
echo " lidwarfp expects to see hidden symbols. "
|
|
cmake -G "Unix Makefiles" $cmakeopt $genoptb \
|
|
-DDO_TESTING=ON \
|
|
-DBUILD_DWARFEXAMPLE=ON $blibsrc
|
|
chkres $? "FAIL Sec F C11b cmake in $gcmakdbld"
|
|
make
|
|
chkres $? "FAIL Sec F C11d cmake make in $gcmakebld"
|
|
LD_LIBRARY_PATH="$gcmakebld/src/lib/libdwarf:$LD_LIBRARY_PATH" ctest -R self
|
|
chkres $? "FAIL Sec F C11e ctest -R self in $gcmakebld"
|
|
else
|
|
echo "cmake not installed so Section G not tested."
|
|
fi
|
|
echo " End Section G $bart (ls output follows)"
|
|
ls $bart
|
|
############ End Section G
|
|
|
|
################### Cmake test H
|
|
safecd $hcmakebld "FAIL C12 Section H cd"
|
|
havecmake=n
|
|
which cmake >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
havecmake=y
|
|
echo "We have cmake and can test it."
|
|
else
|
|
echo "We do NOT have cmake, cannot test it."
|
|
fi
|
|
if [ $havecmake = "y" ]
|
|
then
|
|
echo "TEST: Now cmake from source dir $blibsrc/ in build dir $gcmakebld"
|
|
cmake -G "Unix Makefiles" $cmakeopt \
|
|
-DDO_TESTING=ON \
|
|
-DBUILD_DWARFEXAMPLE=ON $blibsrc
|
|
chkres $? "FAIL Sec H C12b cmake in $hcmakdbld"
|
|
make
|
|
chkres $? "FAIL Sec H C12d cmake make test in $hcmakebld"
|
|
ctest -R self
|
|
chkres $? "FAIL Sec H C12e ctest -R self in $hcmakebld"
|
|
else
|
|
echo "cmake not installed so Section H not tested."
|
|
fi
|
|
echo " End Section H $bart (ls output follows)"
|
|
ls $bart
|
|
############ End Section H
|
|
|
|
################### Cmake test I
|
|
safecd $imesonbld "FAIL C13 Section I cd"
|
|
havemeson=n
|
|
haveninja=n
|
|
which meson >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
havemeson=y
|
|
echo "We have meson and can test it."
|
|
which ninja >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
haveninja=y
|
|
else
|
|
echo "We do NOT have ninja, cannot test it."
|
|
fi
|
|
else
|
|
echo "We do NOT have meson, cannot test it or ninja."
|
|
fi
|
|
if [ $havemeson = "y" ]
|
|
then
|
|
echo "TEST: Now meson from source dir $blibsrc/ in build dir $imesonbld"
|
|
meson $wd $mesonopt --prefix=$imesonbld-dist
|
|
if [ $haveninja = "y" ]
|
|
then
|
|
ninja -j8 install
|
|
chkres $? " FAIL C13 ninja -j8 install"
|
|
showinstalled $imesonbld-dist "using meson" $itfout
|
|
ninja test
|
|
chkres $? " FAIL C13 ninja test"
|
|
else
|
|
echo "Skipping ninja, it is not installed"
|
|
fi
|
|
else
|
|
echo "meson not installed so Section I not tested."
|
|
fi
|
|
echo " End Section I $bart (ls output follows)"
|
|
ls $bart
|
|
############ End Section I
|
|
|
|
ndsecs=`date '+%s'`
|
|
showminutes() {
|
|
t=`expr \( $2 \- $1 \+ 29 \) \/ 60`
|
|
echo "Run time in minutes: $t"
|
|
}
|
|
showminutes $stsecs $ndsecs
|
|
|
|
echo "PASS scripts/buildandreleasetest.sh"
|
|
if [ "$savebart" = "n" ]
|
|
then
|
|
rm -rf $bart
|
|
fi
|
|
exit 0
|