338 lines
6.8 KiB
Bash
Executable File
338 lines
6.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
cd "`dirname $0`/.."
|
|
binary="`basename $0`"
|
|
|
|
usage () {
|
|
cat <<EOF
|
|
usage: $binary [ <option> ]
|
|
|
|
where '<option>' is one of the following
|
|
|
|
-h print this command line option summary
|
|
-n only print and fake building and testing
|
|
-1 single configuration option mode (default)
|
|
-2 double configuration options mode
|
|
-3 triple configuration options mode
|
|
-f force '--coverage' with 'clang'
|
|
EOF
|
|
exit 0
|
|
}
|
|
|
|
# All './configure' options except '-p' (pedantic).
|
|
|
|
all="--default --extreme -m32 --ultimate -c -g -l -s --coverage --profile --compact --no-options --quiet --metrics --stats --no-proofs -fPIC --no-metrics --no-stats"
|
|
|
|
tmp=/tmp/m32-support-$$
|
|
cat <<EOF > $tmp.c
|
|
#include <stdio.h>
|
|
int main (void) {
|
|
printf ("%zu\n", sizeof (void*));
|
|
return 0;
|
|
}
|
|
EOF
|
|
m32=yes
|
|
if gcc -m32 -o $tmp $tmp.c 1>/dev/null 2>/dev/null
|
|
then
|
|
res="`$tmp 2>/dev/null`"
|
|
[ "$res" = 4 ] || m32=no
|
|
else
|
|
m32=no
|
|
fi
|
|
if [ $m32 = no ]
|
|
then
|
|
echo "compilation with '-m32' disabled (install 'g++-multilib' first)"
|
|
all="`echo $all|sed -e 's, -m32,,'`"
|
|
fi
|
|
rm -f $tmp*
|
|
|
|
# Default mode is to test single configurations ('-1').
|
|
|
|
mode=1
|
|
fake=no
|
|
|
|
if [ -t 1 ]
|
|
then
|
|
BOLD="\033[1m"
|
|
GREEN="\033[1;32m"
|
|
NORMAL="\033[0m"
|
|
RED="\033[1;31m"
|
|
else
|
|
BOLD=""
|
|
GREEN=""
|
|
NORMAL=""
|
|
RED=""
|
|
fi
|
|
|
|
die () {
|
|
echo "${BOLD}$binary: ${RED}error:${NORMAL} $*"
|
|
exit 1
|
|
}
|
|
|
|
force=no
|
|
coverage=yes
|
|
|
|
while [ $# -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
-h) usage;;
|
|
-n) fake=yes;;
|
|
-1) mode=1;;
|
|
-2) mode=2;;
|
|
-3) mode=3;;
|
|
-n) force=yes;;
|
|
*) die "invalid option '$1' (try '-h')";;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
failed () {
|
|
echo
|
|
echo "${BOLD}$binary: ${RED}failed:${NORMAL} $*"
|
|
exit 1
|
|
}
|
|
|
|
count=0
|
|
|
|
run () {
|
|
configure="`echo ./configure $*|sed -e 's, --default,,'`"
|
|
printf "%-49s" "$configure"
|
|
if [ $fake = no ]
|
|
then
|
|
$configure 1>/dev/null 2>/dev/null
|
|
status=$?
|
|
else
|
|
status=0
|
|
fi
|
|
if [ $status = 0 ]
|
|
then
|
|
printf " && make"
|
|
if [ $fake = no ]
|
|
then
|
|
make 1>/dev/null 2>/dev/null
|
|
status=$?
|
|
else
|
|
status=0
|
|
fi
|
|
if [ $status = 0 ]
|
|
then
|
|
printf " test"
|
|
if [ $fake = no ]
|
|
then
|
|
make test 1>/dev/null 2>/dev/null
|
|
status=$?
|
|
else
|
|
status=0
|
|
fi
|
|
if [ $status = 0 ]
|
|
then
|
|
printf " && make clean"
|
|
if [ $fake = no ]
|
|
then
|
|
make clean 1>/dev/null 2>/dev/null
|
|
status=$?
|
|
else
|
|
status=0
|
|
fi
|
|
if [ $status = 0 ]
|
|
then
|
|
echo
|
|
count=`expr $count + 1`
|
|
else
|
|
failed "$configure && make test && make clean"
|
|
fi
|
|
else
|
|
failed "$configure && make test"
|
|
fi
|
|
else
|
|
failed "$configure && make"
|
|
fi
|
|
else
|
|
failed "$configure"
|
|
fi
|
|
}
|
|
|
|
#----------------------------------------------------#
|
|
|
|
case $mode in
|
|
1) modestr=single;;
|
|
2) modestr="single and double";;
|
|
3) modestr="single, double and triple";;
|
|
esac
|
|
|
|
echo
|
|
echo "testing $modestr combinations"
|
|
if [ "$CC" = "" ]
|
|
then
|
|
echo "using default compiler ('gcc')"
|
|
else
|
|
echo "using '$CC' compiler (from environment variable 'CC')"
|
|
case "$CC" in
|
|
clang*)
|
|
if [ $force = yes ]
|
|
then
|
|
echo "forced to use '--coverage' for 'clang' (due to '-f')"
|
|
coverage=yes
|
|
else
|
|
echo "not using '--coverage' for 'clang' (use '-f' to force)"
|
|
coverage=no
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ $coverage = no ]
|
|
then
|
|
all=`echo "$all" | sed -e 's,--coverage ,,'`
|
|
fi
|
|
|
|
#----------------------------------------------------#
|
|
|
|
# single options both pedantic and not pedantic
|
|
|
|
echo
|
|
echo "---- [ single configurations ]" \
|
|
"---------------------------------------------"
|
|
echo
|
|
|
|
for pedantic in yes no
|
|
do
|
|
for first in $all
|
|
do
|
|
[ $first = --no-metrics ] && continue
|
|
options="$first"
|
|
[ $pedantic = yes ] && options="-p $options"
|
|
run $options
|
|
done
|
|
done
|
|
|
|
#----------------------------------------------------#
|
|
|
|
redundant () {
|
|
case $1$2 in
|
|
-c-g) return 0;;
|
|
--default--no-metrics) return 0;;
|
|
--default--no-stats) return 0;;
|
|
--extreme--ultimate) return 0;;
|
|
--extreme--compact) return 0;;
|
|
--extreme-l) return 0;;
|
|
--extreme--no-options) return 0;;
|
|
--extreme--quiet) return 0;;
|
|
--extreme--no-metrics) return 0;;
|
|
--extreme--no-stats) return 0;;
|
|
-g-l) return 0;;
|
|
-g--metrics) return 0;;
|
|
-g--stats) return 0;;
|
|
-g-s) return 0;;
|
|
--metrics--no-metrics) return 0;;
|
|
--metrics--no-stats) return 0;;
|
|
--metrics--stats) return 0;;
|
|
--no-metrics--no-stats) return 0;;
|
|
--stats--no-stats) return 0;;
|
|
--ultimate--compact) return 0;;
|
|
--ultimate-l) return 0;;
|
|
--ultimate--no-options) return 0;;
|
|
--ultimate--quiet) return 0;;
|
|
--ultimate--no-metrics) return 0;;
|
|
--ultimate--no-stats) return 0;;
|
|
--ultimate--no-proofs) return 0;;
|
|
-l--metrics) return 0;;
|
|
-l--stats) return 0;;
|
|
-l--quiet) return 0;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
#----------------------------------------------------#
|
|
|
|
if [ $mode -gt 1 ]
|
|
then
|
|
|
|
# double options both pedantic and not pedantic
|
|
|
|
echo
|
|
echo "---- [ double configurations ]" \
|
|
"---------------------------------------------"
|
|
echo
|
|
|
|
for pedantic in yes no
|
|
do
|
|
for first in $all
|
|
do
|
|
[ x$first = x--default ] && continue;
|
|
[ x$first = x--no-metrics ] && continue;
|
|
metrics=no
|
|
[ x$first = x-g -o x$first = x-l ] && metrics=yes
|
|
for second in `echo -- $all|fmt -0|sed "1,/$first/d"`
|
|
do
|
|
if redundant $first $second; then continue; fi
|
|
[ x$second = x--no-metrics -a $metrics = no ] && continue
|
|
options="$first $second"
|
|
[ $pedantic = yes ] && options="-p $options"
|
|
run $options
|
|
done
|
|
done
|
|
done
|
|
|
|
fi
|
|
|
|
#----------------------------------------------------#
|
|
|
|
if [ $mode -gt 2 ]
|
|
then
|
|
|
|
# triple options both pedantic and not pedantic
|
|
|
|
echo
|
|
echo "---- [ triple configurations ]" \
|
|
"---------------------------------------------"
|
|
echo
|
|
|
|
for pedantic in yes no
|
|
do
|
|
for first in $all
|
|
do
|
|
[ x$first = x--default ] && continue;
|
|
[ x$first = x-g -o x$first = x-l ] && metrics=yes
|
|
for second in `echo -- $all|fmt -0|sed "1,/$first/d"`
|
|
do
|
|
if redundant $first $second; then continue; fi
|
|
metrics=no
|
|
[ x$first = x-g -o x$first = x-l ] && metrics=yes
|
|
[ x$second = x--no-metrics -a $metrics = no ] && continue
|
|
[ x$second = x-g -o x$second = x-l ] && metrics=yes
|
|
for third in `echo -- $all|fmt -0|sed "1,/$second/d"`
|
|
do
|
|
if redundant $first $third; then continue; fi
|
|
if redundant $second $third; then continue; fi
|
|
[ x$third = x--no-metrics -a $metrics = no ] && continue
|
|
options="$first $second $third"
|
|
[ $pedantic = yes ] && options="-p $options"
|
|
run $options
|
|
done
|
|
done
|
|
done
|
|
done
|
|
|
|
fi
|
|
|
|
#----------------------------------------------------#
|
|
echo
|
|
echo "---- [ summary ]" \
|
|
"-----------------------------------------------------------"
|
|
echo
|
|
|
|
echo "All $count $modestr combinations" \
|
|
"${GREEN}successfully${NORMAL} tested."
|
|
|
|
case $modestr in
|
|
single)
|
|
echo
|
|
echo "Consider to run double ('-2') or even triple mode ('-3') too."
|
|
;;
|
|
double)
|
|
echo
|
|
echo "Consider to run triple mode ('-3') too."
|
|
;;
|
|
esac
|