306 lines
8.6 KiB
Bash
Executable File
306 lines
8.6 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
# This is a script for the use of PCRE maintainers. It configures and rebuilds
|
|
# PCRE2 with a variety of configuration options, and in each case runs the
|
|
# tests to ensure that all goes well. Every possible combination would take far
|
|
# too long, so we use a representative sample. This script should be run in the
|
|
# PCRE2 source directory.
|
|
|
|
# Some of the tests have to be skipped when PCRE2 is built with non-Unix
|
|
# newline recognition. I am planning to reduce this as much as possible in due
|
|
# course.
|
|
|
|
|
|
# This is in case the caller has set aliases (as I do - PH)
|
|
|
|
unset cp ls mv rm
|
|
|
|
# Use -v to make the output more verbose
|
|
|
|
verbose=0
|
|
if [ "$1" = "-v" ] ; then verbose=1; fi
|
|
|
|
# This is a temporary directory for testing out-of-line builds
|
|
|
|
tmp=/tmp/pcretesting
|
|
|
|
# Don't bother with compiler optimization for most tests; it just slows down
|
|
# compilation a lot (and running the tests themselves is quick). However, a
|
|
# few specific tests turn optimization on, because it can provoke some compiler
|
|
# warnings.
|
|
|
|
CFLAGS="-g -O0"
|
|
CXXFLAGS="$CFLAGS"
|
|
ISGCC="no"
|
|
|
|
# If the compiler is gcc, add a lot of warning switches.
|
|
|
|
cc --version >zzz 2>/dev/null
|
|
if [ $? -eq 0 ] && grep GCC zzz >/dev/null; then
|
|
ISGCC="yes"
|
|
CFLAGS="$CFLAGS -Wall"
|
|
CFLAGS="$CFLAGS -Wno-overlength-strings"
|
|
CFLAGS="$CFLAGS -Wpointer-arith"
|
|
CFLAGS="$CFLAGS -Wwrite-strings"
|
|
CFLAGS="$CFLAGS -Wundef -Wshadow"
|
|
CFLAGS="$CFLAGS -Wmissing-field-initializers"
|
|
CFLAGS="$CFLAGS -Wunused-parameter"
|
|
CFLAGS="$CFLAGS -Wextra -Wformat"
|
|
CFLAGS="$CFLAGS -Wbad-function-cast"
|
|
CFLAGS="$CFLAGS -Wmissing-declarations"
|
|
CFLAGS="$CFLAGS -Wnested-externs"
|
|
CFLAGS="$CFLAGS -pedantic"
|
|
CFLAGS="$CFLAGS -Wuninitialized"
|
|
CFLAGS="$CFLAGS -Wmissing-prototypes"
|
|
CFLAGS="$CFLAGS -Wstrict-prototypes"
|
|
fi
|
|
|
|
|
|
# This function runs a single test with the set of configuration options that
|
|
# are in $opts. The source directory must be set in srcdir.
|
|
|
|
function runtest()
|
|
{
|
|
rm -f *_unittest
|
|
testcount=`expr $testcount + 1`
|
|
|
|
if [ "$opts" = "" ] ; then
|
|
echo "[$testcount/$testtotal] Configuring with: default settings"
|
|
else
|
|
echo "[$testcount/$testtotal] Configuring with:"
|
|
echo " $opts"
|
|
fi
|
|
|
|
CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
|
|
$srcdir/configure $opts >/dev/null 2>teststderr
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo " "
|
|
echo "**** Error while configuring ****"
|
|
cat teststderr
|
|
exit 1
|
|
fi
|
|
|
|
echo "Making"
|
|
make -j >/dev/null 2>teststderr
|
|
if [ $? -ne 0 -o -s teststderr ]; then
|
|
echo " "
|
|
echo "**** Errors or warnings while making ****"
|
|
echo " "
|
|
cat teststderr
|
|
exit 1
|
|
fi
|
|
|
|
if [ $verbose -eq 1 ]; then
|
|
./pcre2test -C
|
|
fi
|
|
|
|
nl=`./pcre2test -C newline`
|
|
./pcretest -C jit >/dev/null
|
|
jit=$?
|
|
./pcre2test -C utf >/dev/null
|
|
utf=$?
|
|
|
|
if [ "$nl" = "LF" -o "$nl" = "ANY" ]; then
|
|
echo "Running C library tests $withvalgrind"
|
|
$srcdir/RunTest $valgrind >teststdout
|
|
if [ $? -ne 0 ]; then
|
|
echo " "
|
|
echo "**** Test failed ****"
|
|
cat teststdout
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Skipping C library tests: newline is $nl"
|
|
fi
|
|
|
|
if [ "$nl" = "LF" ]; then
|
|
echo "Running pcre2grep tests $withvalgrind"
|
|
$srcdir/RunGrepTest $valgrind >teststdout 2>teststderr
|
|
if [ $? -ne 0 ]; then
|
|
echo " "
|
|
echo "**** Test failed ****"
|
|
cat teststderr
|
|
cat teststdout
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Skipping pcre2grep tests: newline is $nl"
|
|
fi
|
|
|
|
if [ "$jit" -gt 0 -a $utf -gt 0 ]; then
|
|
echo "Running JIT regression tests $withvalgrind"
|
|
$cvalgrind $srcdir/pcre2_jit_test >teststdout 2>teststderr
|
|
if [ $? -ne 0 ]; then
|
|
echo " "
|
|
echo "**** Test failed ****"
|
|
cat teststderr
|
|
cat teststdout
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Skipping JIT regression tests: JIT or UTF not enabled"
|
|
fi
|
|
|
|
# if [ "$nl" = "LF" -o "$nl" = "ANY" ]; then
|
|
# if [ -f pcrecpp_unittest ] ; then
|
|
# for utest in pcrecpp_unittest \
|
|
# pcre_scanner_unittest \
|
|
# pcre_stringpiece_unittest
|
|
# do
|
|
# echo "Running $utest $withvalgrind"
|
|
# $cvalgrind $utest >teststdout
|
|
# if [ $? -ne 0 ]; then
|
|
# echo " "
|
|
# echo "**** Test failed ****"
|
|
# cat teststdout
|
|
# exit 1
|
|
# fi
|
|
# done
|
|
# else
|
|
# echo "Skipping C++ tests: pcrecpp_unittest does not exist"
|
|
# fi
|
|
# else
|
|
# echo "Skipping C++ tests: newline is $nl"
|
|
# fi
|
|
}
|
|
|
|
|
|
# Update the total count whenever a new test is added; it is used to show
|
|
# progess as each test is run.
|
|
|
|
testtotal=40
|
|
testcount=0
|
|
|
|
# This set of tests builds PCRE and runs the tests with a variety of configure
|
|
# options, in the current (source) directory. The empty configuration builds
|
|
# with all the default settings. As well as testing that these options work, we
|
|
# use --disable-shared or --disable-static after the default test (which builds
|
|
# both) to save a bit of time by building only one version of the library for
|
|
# the subsequent tests.
|
|
|
|
valgrind=
|
|
cvalgrind=
|
|
withvalgrind=
|
|
srcdir=.
|
|
export srcdir
|
|
|
|
# If gcc is in use, run a maximally configured test with -O2, because that can
|
|
# throw up warnings that are not detected with -O0.
|
|
|
|
if [ "$ISGCC" = "yes" ]; then
|
|
echo "Maximally configured test with -O2"
|
|
SAVECLFAGS="$CFLAGS"
|
|
CFLAGS="$CFLAGS -O2"
|
|
opts="--disable-shared --enable-utf --enable-jit --enable-pcre16 --enable-pcre32"
|
|
runtest
|
|
CFLAGS="$SAVECFLAGS"
|
|
fi
|
|
|
|
echo "General tests in the current directory"
|
|
for opts in \
|
|
"" \
|
|
"--enable-utf --disable-static" \
|
|
"--disable-stack-for-recursion --disable-shared" \
|
|
"--enable-utf --disable-shared" \
|
|
"--enable-utf --disable-stack-for-recursion --disable-shared" \
|
|
"--enable-utf --with-link-size=3 --disable-shared" \
|
|
"--enable-rebuild-chartables --disable-shared" \
|
|
"--enable-newline-is-any --disable-shared" \
|
|
"--enable-newline-is-cr --disable-shared" \
|
|
"--enable-newline-is-crlf --disable-shared" \
|
|
"--enable-newline-is-anycrlf --enable-bsr-anycrlf --disable-shared" \
|
|
"--enable-utf --enable-newline-is-any --disable-stack-for-recursion --disable-static" \
|
|
"--enable-jit --disable-shared" \
|
|
"--enable-jit --enable-utf --disable-shared" \
|
|
"--enable-jit --enable-utf --with-link-size=3 --disable-shared" \
|
|
"--enable-pcre16" \
|
|
"--enable-pcre16 --enable-jit --enable-utf --disable-shared" \
|
|
"--enable-pcre16 --enable-jit --disable-pcre8 --disable-shared" \
|
|
"--enable-pcre16 --enable-jit --disable-pcre8 --enable-utf --disable-shared" \
|
|
"--enable-pcre16 --disable-stack-for-recursion --disable-shared" \
|
|
"--enable-pcre16 --enable-utf --disable-stack-for-recursion --disable-shared" \
|
|
"--enable-pcre16 --enable-jit --enable-utf --with-link-size=3 --disable-shared" \
|
|
"--enable-pcre16 --enable-jit --enable-utf --with-link-size=4 --disable-shared" \
|
|
"--enable-pcre32" \
|
|
"--enable-pcre32 --enable-jit --enable-utf --disable-shared" \
|
|
"--enable-pcre32 --enable-jit --disable-pcre8 --disable-shared" \
|
|
"--enable-pcre32 --enable-jit --disable-pcre8 --enable-utf --disable-shared" \
|
|
"--enable-pcre32 --disable-stack-for-recursion --disable-shared" \
|
|
"--enable-pcre32 --enable-utf --disable-stack-for-recursion --disable-shared" \
|
|
"--enable-pcre32 --enable-jit --enable-utf --with-link-size=4 --disable-shared" \
|
|
"--enable-pcre32 --enable-pcre16 --disable-shared" \
|
|
"--enable-pcre32 --enable-pcre16 --disable-pcre8 --disable-shared" \
|
|
"--enable-pcre32 --enable-pcre16 --disable-pcre8 --enable-jit --enable-utf --enable-newline-is-anycrlf --enable-bsr-anycrlf --disable-shared"
|
|
do
|
|
runtest
|
|
done
|
|
|
|
# Now re-run some of the tests under valgrind.
|
|
|
|
echo "Tests in the current directory using valgrind"
|
|
valgrind=valgrind
|
|
cvalgrind="valgrind -q --smc-check=all"
|
|
withvalgrind="with valgrind"
|
|
|
|
for opts in \
|
|
"--enable-utf --disable-stack-for-recursion --disable-shared" \
|
|
"--enable-utf --with-link-size=3 --disable-shared" \
|
|
"--enable-jit --enable-utf --disable-shared" \
|
|
"--enable-pcre16 --enable-pcre32 --enable-jit --enable-utf " \
|
|
"--disable-shared"
|
|
do
|
|
opts="--enable-valgrind $opts"
|
|
runtest
|
|
done
|
|
|
|
valgrind=
|
|
cvalgrind=
|
|
withvalgrind=
|
|
|
|
# Clean up the distribution and then do at least one build and test in a
|
|
# directory other than the source directory. It doesn't work unless the
|
|
# source directory is cleaned up first.
|
|
|
|
if [ -f Makefile ]; then
|
|
echo "Running 'make distclean'"
|
|
make distclean >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "** 'make distclean' failed"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "Tests in the $tmp directory"
|
|
srcdir=`pwd`
|
|
export srcdir
|
|
|
|
if [ ! -e $tmp ]; then
|
|
mkdir $tmp
|
|
fi
|
|
|
|
if [ ! -d $tmp ]; then
|
|
echo "** Failed to create $tmp or it is not a directory"
|
|
exit 1
|
|
fi
|
|
|
|
cd $tmp
|
|
if [ $? -ne 0 ]; then
|
|
echo "** Failed to cd to $tmp"
|
|
exit 1
|
|
fi
|
|
|
|
for opts in \
|
|
"--enable-utf --disable-shared"
|
|
do
|
|
runtest
|
|
done
|
|
|
|
echo "Removing $tmp"
|
|
|
|
rm -rf $tmp
|
|
|
|
echo "All done"
|
|
|
|
# End
|