1*22dc650dSSadaf Ebrahimi#! /bin/sh 2*22dc650dSSadaf Ebrahimi 3*22dc650dSSadaf Ebrahimi# This is a script for the use of PCRE2 maintainers. It configures and builds 4*22dc650dSSadaf Ebrahimi# PCRE2 with a variety of configuration options, and in each case runs the 5*22dc650dSSadaf Ebrahimi# tests to ensure that all goes well. Every possible combination would take far 6*22dc650dSSadaf Ebrahimi# too long, so we use a representative sample. This script should be run in the 7*22dc650dSSadaf Ebrahimi# PCRE2 source directory. 8*22dc650dSSadaf Ebrahimi 9*22dc650dSSadaf Ebrahimi# While debugging, it is sometimes useful to be able to cut out some of the 10*22dc650dSSadaf Ebrahimi# tests, in order to run those that are giving errors. The following options 11*22dc650dSSadaf Ebrahimi# do this: 12*22dc650dSSadaf Ebrahimi# 13*22dc650dSSadaf Ebrahimi# -noasan skip the test that uses -fsanitize=address 14*22dc650dSSadaf Ebrahimi# -nousan skip the test that uses -fsanitize=undefined 15*22dc650dSSadaf Ebrahimi# -nodebug skip the test that uses --enable-debug 16*22dc650dSSadaf Ebrahimi# -nojit skip all JIT tests 17*22dc650dSSadaf Ebrahimi# -nojitmain skip non-valgrind JIT tests 18*22dc650dSSadaf Ebrahimi# -nojitvalgrind skip JIT tests with valgrind 19*22dc650dSSadaf Ebrahimi# -nomain skip all the main (non-JIT) set of tests 20*22dc650dSSadaf Ebrahimi# -nomainvalgrind skip the main (non-JIT) valgrind tests 21*22dc650dSSadaf Ebrahimi# -notmp skip the tests in a temporary directory 22*22dc650dSSadaf Ebrahimi# -notmpjit skip the JIT test in a temporary directory 23*22dc650dSSadaf Ebrahimi# -novalgrind skip all the valgrind tests 24*22dc650dSSadaf Ebrahimi 25*22dc650dSSadaf Ebrahimi# Alternatively, if any of those names are given with '+' instead of '-no', 26*22dc650dSSadaf Ebrahimi# only those groups named with '+' are run (e.g. +jit). If -dummy is given, 27*22dc650dSSadaf Ebrahimi# no tests are actually run - this provides a means of testing the selectors. 28*22dc650dSSadaf Ebrahimi 29*22dc650dSSadaf Ebrahimi# The -v option causes a call to 'pcre2test -C' to happen for each 30*22dc650dSSadaf Ebrahimi# configuration. 31*22dc650dSSadaf Ebrahimi 32*22dc650dSSadaf Ebrahimiuseasan=1 33*22dc650dSSadaf Ebrahimiuseusan=1 34*22dc650dSSadaf Ebrahimiusedebug=1 35*22dc650dSSadaf Ebrahimiusejit=1 36*22dc650dSSadaf Ebrahimiusejitvalgrind=1 37*22dc650dSSadaf Ebrahimiusemain=1 38*22dc650dSSadaf Ebrahimiusemainvalgrind=1 39*22dc650dSSadaf Ebrahimiusetmp=1 40*22dc650dSSadaf Ebrahimiusetmpjit=1 41*22dc650dSSadaf Ebrahimiusevalgrind=1 42*22dc650dSSadaf Ebrahimi 43*22dc650dSSadaf Ebrahimidummy=0 44*22dc650dSSadaf Ebrahimiseenplus=0 45*22dc650dSSadaf Ebrahimiverbose=0 46*22dc650dSSadaf Ebrahimi 47*22dc650dSSadaf Ebrahimiwhile [ $# -gt 0 ] ; do 48*22dc650dSSadaf Ebrahimi case $1 in 49*22dc650dSSadaf Ebrahimi +*) if [ $seenplus -eq 0 ]; then 50*22dc650dSSadaf Ebrahimi useasan=0 51*22dc650dSSadaf Ebrahimi useusan=0 52*22dc650dSSadaf Ebrahimi usedebug=0 53*22dc650dSSadaf Ebrahimi usejit=0 54*22dc650dSSadaf Ebrahimi usejitvalgrind=0 55*22dc650dSSadaf Ebrahimi usemain=0 56*22dc650dSSadaf Ebrahimi usemainvalgrind=0 57*22dc650dSSadaf Ebrahimi usetmp=0 58*22dc650dSSadaf Ebrahimi usetmpjit=0 59*22dc650dSSadaf Ebrahimi usevalgrind=0 60*22dc650dSSadaf Ebrahimi seenplus=1 61*22dc650dSSadaf Ebrahimi fi;; 62*22dc650dSSadaf Ebrahimi esac 63*22dc650dSSadaf Ebrahimi 64*22dc650dSSadaf Ebrahimi case $1 in 65*22dc650dSSadaf Ebrahimi -dummy) dummy=1;; 66*22dc650dSSadaf Ebrahimi -v) verbose=1;; 67*22dc650dSSadaf Ebrahimi -noasan) useasan=0;; 68*22dc650dSSadaf Ebrahimi -nousan) useusan=0;; 69*22dc650dSSadaf Ebrahimi -nodebug) usedebug=0;; 70*22dc650dSSadaf Ebrahimi -nojit) usejit=0; usejitvalgrind=0; usetmpjit=0;; 71*22dc650dSSadaf Ebrahimi -nojitmain) usejit=0;; 72*22dc650dSSadaf Ebrahimi -nojitvalgrind) usejitvalgrind=0;; 73*22dc650dSSadaf Ebrahimi -nomain) usemain=0; usemainvalgrind=0;; 74*22dc650dSSadaf Ebrahimi -nomainvalgrind) usemainvalgrind=0;; 75*22dc650dSSadaf Ebrahimi -notmp) usetmp=0; usetmpjit=0;; 76*22dc650dSSadaf Ebrahimi -notmpjit) usetmpjit=0;; 77*22dc650dSSadaf Ebrahimi -novalgrind) usevalgrind=0;; 78*22dc650dSSadaf Ebrahimi +asan) useasan=1;; 79*22dc650dSSadaf Ebrahimi +usan) useusan=1;; 80*22dc650dSSadaf Ebrahimi +debug) usedebug=1;; 81*22dc650dSSadaf Ebrahimi +jit) usejit=1; usejitvalgrind=1; usetmpjit=1;; 82*22dc650dSSadaf Ebrahimi +jitmain) usejit=1;; 83*22dc650dSSadaf Ebrahimi +jitvalgrind) usejitvalgrind=1;; 84*22dc650dSSadaf Ebrahimi +main) usemain=1; usemainvalgrind=1;; 85*22dc650dSSadaf Ebrahimi +mainvalgrind) usemainvalgrind=1;; 86*22dc650dSSadaf Ebrahimi +tmp) usetmp=1;; 87*22dc650dSSadaf Ebrahimi +tmpjit) usetmpjit=1;; 88*22dc650dSSadaf Ebrahimi +valgrind) usevalgrind=1; usejitvalgrind=1; usemainvalgrind=1;; 89*22dc650dSSadaf Ebrahimi *) echo "Unknown option '$1'"; exit 1;; 90*22dc650dSSadaf Ebrahimi esac 91*22dc650dSSadaf Ebrahimi shift 92*22dc650dSSadaf Ebrahimidone 93*22dc650dSSadaf Ebrahimi 94*22dc650dSSadaf Ebrahimiif [ $usejitvalgrind -eq 0 -a $usemainvalgrind -eq 0 ] ; then 95*22dc650dSSadaf Ebrahimi usevalgrind=0 96*22dc650dSSadaf Ebrahimifi 97*22dc650dSSadaf Ebrahimi 98*22dc650dSSadaf Ebrahimi# This is in case the caller has set aliases (as I do - PH) 99*22dc650dSSadaf Ebrahimi 100*22dc650dSSadaf Ebrahimiunset cp ls mv rm 101*22dc650dSSadaf Ebrahimi 102*22dc650dSSadaf Ebrahimi# This is a temporary directory for testing out-of-line builds 103*22dc650dSSadaf Ebrahimi 104*22dc650dSSadaf Ebrahimitmp=/tmp/pcre2testing 105*22dc650dSSadaf Ebrahimi 106*22dc650dSSadaf Ebrahimi# Don't bother with compiler optimization for most tests; it just slows down 107*22dc650dSSadaf Ebrahimi# compilation a lot (and running the tests themselves is quick). However, one 108*22dc650dSSadaf Ebrahimi# special test turns optimization on, because it can provoke some compiler 109*22dc650dSSadaf Ebrahimi# warnings. 110*22dc650dSSadaf Ebrahimi 111*22dc650dSSadaf EbrahimiCFLAGS="-g" 112*22dc650dSSadaf EbrahimiOFLAGS="-O0" 113*22dc650dSSadaf EbrahimiISGCC=0 114*22dc650dSSadaf Ebrahimi 115*22dc650dSSadaf Ebrahimi# If the compiler is gcc, add a lot of warning switches. 116*22dc650dSSadaf Ebrahimi 117*22dc650dSSadaf Ebrahimicc --version >/tmp/pcre2ccversion 2>/dev/null 118*22dc650dSSadaf Ebrahimiif [ $? -eq 0 ] && grep GCC /tmp/pcre2ccversion >/dev/null; then 119*22dc650dSSadaf Ebrahimi ISGCC=1 120*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wall" 121*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wno-overlength-strings" 122*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wpointer-arith" 123*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wwrite-strings" 124*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wundef -Wshadow" 125*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wmissing-field-initializers" 126*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wunused-parameter" 127*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wextra -Wformat" 128*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wbad-function-cast" 129*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wmissing-declarations" 130*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wnested-externs" 131*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -pedantic" 132*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wuninitialized" 133*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wmaybe-uninitialized" 134*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wmissing-prototypes" 135*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wstrict-prototypes" 136*22dc650dSSadaf Ebrahimi CFKAGS="$CFLAGS -Warray-bounds" 137*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS -Wformat-overflow=2" 138*22dc650dSSadaf Ebrahimifi 139*22dc650dSSadaf Ebrahimirm -f /tmp/pcre2ccversion 140*22dc650dSSadaf Ebrahimi 141*22dc650dSSadaf Ebrahimi# This function runs a single test with the set of configuration options that 142*22dc650dSSadaf Ebrahimi# are in $opts. The source directory must be set in srcdir. The function must 143*22dc650dSSadaf Ebrahimi# be defined as "runtest()" not "function runtest()" in order to run on 144*22dc650dSSadaf Ebrahimi# Solaris. 145*22dc650dSSadaf Ebrahimi 146*22dc650dSSadaf Ebrahimiruntest() 147*22dc650dSSadaf Ebrahimi { 148*22dc650dSSadaf Ebrahimi rm -f $srcdir/pcre2test $srcdir/pcre2grep $srcdir/pcre2_jit_test $srcdir/pcre2posix_test 149*22dc650dSSadaf Ebrahimi testcount=`expr $testcount + 1` 150*22dc650dSSadaf Ebrahimi 151*22dc650dSSadaf Ebrahimi if [ "$opts" = "" ] ; then 152*22dc650dSSadaf Ebrahimi echo "[$testcount/$testtotal] Configuring with: default settings" 153*22dc650dSSadaf Ebrahimi else 154*22dc650dSSadaf Ebrahimi echo "[$testcount/$testtotal] Configuring with:" 155*22dc650dSSadaf Ebrahimi echo " $opts" 156*22dc650dSSadaf Ebrahimi fi 157*22dc650dSSadaf Ebrahimi 158*22dc650dSSadaf Ebrahimi if [ $dummy -eq 1 ]; then return; fi 159*22dc650dSSadaf Ebrahimi 160*22dc650dSSadaf Ebrahimi CFLAGS="$CFLAGS" \ 161*22dc650dSSadaf Ebrahimi $srcdir/configure $opts >/dev/null 2>teststderrM 162*22dc650dSSadaf Ebrahimi if [ $? -ne 0 ]; then 163*22dc650dSSadaf Ebrahimi echo " " 164*22dc650dSSadaf Ebrahimi echo "******** Error while configuring ********" 165*22dc650dSSadaf Ebrahimi cat teststderrM 166*22dc650dSSadaf Ebrahimi exit 1 167*22dc650dSSadaf Ebrahimi fi 168*22dc650dSSadaf Ebrahimi 169*22dc650dSSadaf Ebrahimi# There is an infelicity in the Autotools world (as of October 2015) which 170*22dc650dSSadaf Ebrahimi# causes the message 171*22dc650dSSadaf Ebrahimi# 172*22dc650dSSadaf Ebrahimi# ar: `u' modifier ignored since `D' is the default (see `U') 173*22dc650dSSadaf Ebrahimi# 174*22dc650dSSadaf Ebrahimi# to be output while linking. This triggers an unwanted error report from this 175*22dc650dSSadaf Ebrahimi# script, because it expects no stderr output while making. To get round this 176*22dc650dSSadaf Ebrahimi# we filter the stderr output through sed, removing all occurrences of the 177*22dc650dSSadaf Ebrahimi# above lines. Just for paranoia, check that sed is available before doing 178*22dc650dSSadaf Ebrahimi# this. 179*22dc650dSSadaf Ebrahimi 180*22dc650dSSadaf Ebrahimi echo "Making" 181*22dc650dSSadaf Ebrahimi make -j >/dev/null 2>teststderrM 182*22dc650dSSadaf Ebrahimi makeRC=$? 183*22dc650dSSadaf Ebrahimi if command -v sed >/dev/null 2>&1 ; then 184*22dc650dSSadaf Ebrahimi sed "/\`u' modifier ignored since \`D' is the default/ d" \ 185*22dc650dSSadaf Ebrahimi teststderrM > teststderrMM 186*22dc650dSSadaf Ebrahimi mv -f teststderrMM teststderrM 187*22dc650dSSadaf Ebrahimi fi 188*22dc650dSSadaf Ebrahimi if [ $makeRC -ne 0 -o -s teststderrM ]; then 189*22dc650dSSadaf Ebrahimi echo " " 190*22dc650dSSadaf Ebrahimi echo "******** Errors or warnings while making ********" 191*22dc650dSSadaf Ebrahimi echo " " 192*22dc650dSSadaf Ebrahimi cat teststderrM 193*22dc650dSSadaf Ebrahimi exit 1 194*22dc650dSSadaf Ebrahimi fi 195*22dc650dSSadaf Ebrahimi 196*22dc650dSSadaf Ebrahimi if [ $verbose -eq 1 ]; then 197*22dc650dSSadaf Ebrahimi ./pcre2test -C 198*22dc650dSSadaf Ebrahimi fi 199*22dc650dSSadaf Ebrahimi 200*22dc650dSSadaf Ebrahimi ./pcre2test -C jit >/dev/null 201*22dc650dSSadaf Ebrahimi jit=$? 202*22dc650dSSadaf Ebrahimi ./pcre2test -C pcre2-8 >/dev/null 203*22dc650dSSadaf Ebrahimi pcre2_8=$? 204*22dc650dSSadaf Ebrahimi 205*22dc650dSSadaf Ebrahimi echo "Running PCRE2 library tests $withvalgrind" 206*22dc650dSSadaf Ebrahimi $srcdir/RunTest $valgrind >teststdoutM 2>teststderrM 207*22dc650dSSadaf Ebrahimi 208*22dc650dSSadaf Ebrahimi if [ $? -ne 0 -o -s teststderrM ]; then 209*22dc650dSSadaf Ebrahimi echo " " 210*22dc650dSSadaf Ebrahimi echo "**** Test failed ****" 211*22dc650dSSadaf Ebrahimi if [ -s teststderrM ] ; then 212*22dc650dSSadaf Ebrahimi cat teststderrM 213*22dc650dSSadaf Ebrahimi else 214*22dc650dSSadaf Ebrahimi cat teststdoutM 215*22dc650dSSadaf Ebrahimi fi 216*22dc650dSSadaf Ebrahimi exit 1 217*22dc650dSSadaf Ebrahimi fi 218*22dc650dSSadaf Ebrahimi 219*22dc650dSSadaf Ebrahimi if [ $pcre2_8 -gt 0 ]; then 220*22dc650dSSadaf Ebrahimi echo "Running pcre2grep tests $withvalgrind" 221*22dc650dSSadaf Ebrahimi $srcdir/RunGrepTest $valgrind >teststdoutM 2>teststderrM 222*22dc650dSSadaf Ebrahimi if [ $? -ne 0 -o -s teststderrM ]; then 223*22dc650dSSadaf Ebrahimi echo " " 224*22dc650dSSadaf Ebrahimi echo "**** Test failed ****" 225*22dc650dSSadaf Ebrahimi cat teststderrM 226*22dc650dSSadaf Ebrahimi cat teststdoutM 227*22dc650dSSadaf Ebrahimi exit 1 228*22dc650dSSadaf Ebrahimi fi 229*22dc650dSSadaf Ebrahimi echo "Running pcre2posix test $withvalgrind" 230*22dc650dSSadaf Ebrahimi $valgrind ./pcre2posix_test >teststdoutM 2>teststderrM 231*22dc650dSSadaf Ebrahimi 232*22dc650dSSadaf Ebrahimi if [ $? -ne 0 ]; then 233*22dc650dSSadaf Ebrahimi echo " " 234*22dc650dSSadaf Ebrahimi echo "**** Test failed ****" 235*22dc650dSSadaf Ebrahimi exit 1 236*22dc650dSSadaf Ebrahimi fi 237*22dc650dSSadaf Ebrahimi else 238*22dc650dSSadaf Ebrahimi echo "Skipping pcre2grep and pcre2posix tests: 8-bit library not compiled" 239*22dc650dSSadaf Ebrahimi fi 240*22dc650dSSadaf Ebrahimi 241*22dc650dSSadaf Ebrahimi if [ "$jit" -gt 0 ]; then 242*22dc650dSSadaf Ebrahimi echo "Running JIT regression tests $withvalgrind" 243*22dc650dSSadaf Ebrahimi $jrvalgrind ./pcre2_jit_test >teststdoutM 2>teststderrM 244*22dc650dSSadaf Ebrahimi if [ $? -ne 0 -o -s teststderrM ]; then 245*22dc650dSSadaf Ebrahimi echo " " 246*22dc650dSSadaf Ebrahimi echo "**** Test failed ****" 247*22dc650dSSadaf Ebrahimi cat teststderrM 248*22dc650dSSadaf Ebrahimi cat teststdoutM 249*22dc650dSSadaf Ebrahimi exit 1 250*22dc650dSSadaf Ebrahimi fi 251*22dc650dSSadaf Ebrahimi else 252*22dc650dSSadaf Ebrahimi echo "Skipping JIT regression tests: JIT is not enabled" 253*22dc650dSSadaf Ebrahimi fi 254*22dc650dSSadaf Ebrahimi } 255*22dc650dSSadaf Ebrahimi 256*22dc650dSSadaf Ebrahimi# Update the total count whenever a new test is added; it is used to show 257*22dc650dSSadaf Ebrahimi# progess as each test is run. 258*22dc650dSSadaf Ebrahimi 259*22dc650dSSadaf Ebrahimitesttotal=`expr 17 \* $usemain + \ 260*22dc650dSSadaf Ebrahimi 1 \* $usemain \* $usedebug + \ 261*22dc650dSSadaf Ebrahimi 1 \* $usetmp + 1 \* $usetmpjit + \ 262*22dc650dSSadaf Ebrahimi 1 \* $ISGCC \* $usemain + \ 263*22dc650dSSadaf Ebrahimi 1 \* $ISGCC \* $usemain \* $useasan + \ 264*22dc650dSSadaf Ebrahimi 1 \* $ISGCC \* $usemain \* $useusan + \ 265*22dc650dSSadaf Ebrahimi 13 \* $usejit + \ 266*22dc650dSSadaf Ebrahimi 2 \* $usemainvalgrind + \ 267*22dc650dSSadaf Ebrahimi 2 \* $usejitvalgrind` 268*22dc650dSSadaf Ebrahimi 269*22dc650dSSadaf Ebrahimitestcount=0 270*22dc650dSSadaf Ebrahimi 271*22dc650dSSadaf Ebrahimiif [ $testtotal -eq 0 ] ; then 272*22dc650dSSadaf Ebrahimi echo "** No tests selected" 273*22dc650dSSadaf Ebrahimi exit 1 274*22dc650dSSadaf Ebrahimifi 275*22dc650dSSadaf Ebrahimi 276*22dc650dSSadaf Ebrahimivalgrind= 277*22dc650dSSadaf Ebrahimijrvalgrind= 278*22dc650dSSadaf Ebrahimiwithvalgrind= 279*22dc650dSSadaf Ebrahimisrcdir=. 280*22dc650dSSadaf Ebrahimiexport srcdir 281*22dc650dSSadaf Ebrahimi 282*22dc650dSSadaf Ebrahimiif [ $usejit -ne 0 ]; then 283*22dc650dSSadaf Ebrahimi enable_jit=--enable-jit 284*22dc650dSSadaf Ebrahimielse 285*22dc650dSSadaf Ebrahimi enable_jit= 286*22dc650dSSadaf Ebrahimifi 287*22dc650dSSadaf Ebrahimi 288*22dc650dSSadaf Ebrahimi# If gcc is in use, run a maximally configured test with -O2, because that can 289*22dc650dSSadaf Ebrahimi# throw up warnings that are not detected with -O0. Then run a second test with 290*22dc650dSSadaf Ebrahimi# -fsanitize=address, which also may throw up new warnings as well as checking 291*22dc650dSSadaf Ebrahimi# things at runtime. Finally, run another test using -fsanitize=undefined 292*22dc650dSSadaf Ebrahimi# -std-gnu99 to check for runtime actions that are not well defined. 293*22dc650dSSadaf Ebrahimi 294*22dc650dSSadaf Ebrahimiif [ $ISGCC -ne 0 -a $usemain -ne 0 ]; then 295*22dc650dSSadaf Ebrahimi echo "---------- Maximally configured test with -O2 ----------" 296*22dc650dSSadaf Ebrahimi SAVECFLAGS="$CFLAGS" 297*22dc650dSSadaf Ebrahimi CFLAGS="-O2 $CFLAGS" 298*22dc650dSSadaf Ebrahimi echo "CFLAGS=$CFLAGS" 299*22dc650dSSadaf Ebrahimi opts="--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32" 300*22dc650dSSadaf Ebrahimi runtest 301*22dc650dSSadaf Ebrahimi if [ $useasan -ne 0 ]; then 302*22dc650dSSadaf Ebrahimi echo "---------- Maximally configured test with -fsanitize=address ----------" 303*22dc650dSSadaf Ebrahimi# Following a kernel change, sanitize address doesn't work unless the extra 304*22dc650dSSadaf Ebrahimi# PIE options are also set. 305*22dc650dSSadaf Ebrahimi CFLAGS="$OFLAGS $SAVECFLAGS -no-pie -fno-PIE -fsanitize=address" 306*22dc650dSSadaf Ebrahimi echo "CFLAGS=$CFLAGS" 307*22dc650dSSadaf Ebrahimi opts="--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32" 308*22dc650dSSadaf Ebrahimi runtest 309*22dc650dSSadaf Ebrahimi fi 310*22dc650dSSadaf Ebrahimi# This also seems to be the case for sanitize undefined. 311*22dc650dSSadaf Ebrahimi if [ $useusan -ne 0 ]; then 312*22dc650dSSadaf Ebrahimi echo "------- Maximally configured test with -fsanitize=undefined -fno-sanitize=alignment -std=gnu99 -------" 313*22dc650dSSadaf Ebrahimi CFLAGS="$OFLAGS $SAVECFLAGS -no-pie -fno-PIE -fsanitize=undefined -fno-sanitize=alignment -std=gnu99" 314*22dc650dSSadaf Ebrahimi echo "CFLAGS=$CFLAGS" 315*22dc650dSSadaf Ebrahimi opts="--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32" 316*22dc650dSSadaf Ebrahimi runtest 317*22dc650dSSadaf Ebrahimi fi 318*22dc650dSSadaf Ebrahimi CFLAGS="$SAVECFLAGS" 319*22dc650dSSadaf Ebrahimifi 320*22dc650dSSadaf Ebrahimi 321*22dc650dSSadaf Ebrahimi# This set of tests builds PCRE2 and runs the tests with a variety of configure 322*22dc650dSSadaf Ebrahimi# options, in the current (source) directory. The empty configuration builds 323*22dc650dSSadaf Ebrahimi# with all the default settings. As well as testing that these options work, we 324*22dc650dSSadaf Ebrahimi# use --disable-shared or --disable-static except for the default test (which 325*22dc650dSSadaf Ebrahimi# builds both) to save a bit of time by building only one version of the 326*22dc650dSSadaf Ebrahimi# library for the subsequent tests. 327*22dc650dSSadaf Ebrahimi 328*22dc650dSSadaf Ebrahimiecho "---------- CFLAGS for the remaining tests ----------" 329*22dc650dSSadaf EbrahimiCFLAGS="$OFLAGS $CFLAGS" 330*22dc650dSSadaf Ebrahimiecho "CFLAGS=$CFLAGS" 331*22dc650dSSadaf Ebrahimi 332*22dc650dSSadaf Ebrahimiif [ $usemain -ne 0 ]; then 333*22dc650dSSadaf Ebrahimi if [ $usedebug -ne 0 ]; then 334*22dc650dSSadaf Ebrahimi echo "---------- Maximally configured test with --enable-debug ----------" 335*22dc650dSSadaf Ebrahimi opts="--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug" 336*22dc650dSSadaf Ebrahimi runtest 337*22dc650dSSadaf Ebrahimi fi 338*22dc650dSSadaf Ebrahimi 339*22dc650dSSadaf Ebrahimi echo "---------- Non-JIT tests in the current directory ----------" 340*22dc650dSSadaf Ebrahimi for opts in \ 341*22dc650dSSadaf Ebrahimi "" \ 342*22dc650dSSadaf Ebrahimi "--disable-static" \ 343*22dc650dSSadaf Ebrahimi "--disable-shared" \ 344*22dc650dSSadaf Ebrahimi "--disable-unicode --disable-shared --enable-never-backslash-C" \ 345*22dc650dSSadaf Ebrahimi "--with-link-size=3 --disable-shared --disable-pcre2grep-callout" \ 346*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-rebuild-chartables --disable-shared" \ 347*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-newline-is-any --disable-shared" \ 348*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-newline-is-cr --disable-shared" \ 349*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-newline-is-crlf --disable-shared" \ 350*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-newline-is-anycrlf --enable-bsr-anycrlf --disable-shared" \ 351*22dc650dSSadaf Ebrahimi "--enable-newline-is-any --disable-static" \ 352*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-pcre2-16" \ 353*22dc650dSSadaf Ebrahimi "--enable-pcre2-16 --disable-shared" \ 354*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-pcre2-32" \ 355*22dc650dSSadaf Ebrahimi "--enable-pcre2-32 --disable-shared" \ 356*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-pcre2-32 --enable-pcre2-16 --disable-shared" \ 357*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-pcre2-32 --enable-pcre2-16 --disable-pcre2-8 --disable-shared" 358*22dc650dSSadaf Ebrahimi do 359*22dc650dSSadaf Ebrahimi runtest 360*22dc650dSSadaf Ebrahimi done 361*22dc650dSSadaf Ebrahimifi 362*22dc650dSSadaf Ebrahimi 363*22dc650dSSadaf Ebrahimi# Now run the JIT tests unless disabled 364*22dc650dSSadaf Ebrahimi 365*22dc650dSSadaf Ebrahimiif [ $usejit -ne 0 ]; then 366*22dc650dSSadaf Ebrahimi echo "---------- JIT tests in the current directory ----------" 367*22dc650dSSadaf Ebrahimi for opts in \ 368*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-jit --disable-shared" \ 369*22dc650dSSadaf Ebrahimi "--enable-jit --disable-shared" \ 370*22dc650dSSadaf Ebrahimi "--enable-jit --with-link-size=3 --disable-shared" \ 371*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-16 --disable-shared" \ 372*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-jit --enable-pcre2-16 --disable-pcre2-8 --disable-shared" \ 373*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-16 --disable-pcre2-8 --disable-shared" \ 374*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-16 --with-link-size=3 --disable-shared" \ 375*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-16 --with-link-size=4 --disable-shared" \ 376*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-32 --disable-shared" \ 377*22dc650dSSadaf Ebrahimi "--disable-unicode --enable-jit --enable-pcre2-32 --disable-pcre2-8 --disable-shared" \ 378*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-32 --disable-pcre2-8 --disable-shared" \ 379*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-32 --with-link-size=4 --disable-shared" \ 380*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-32 --enable-pcre2-16 --disable-pcre2-8 --enable-newline-is-anycrlf --enable-bsr-anycrlf --disable-shared" 381*22dc650dSSadaf Ebrahimi do 382*22dc650dSSadaf Ebrahimi runtest 383*22dc650dSSadaf Ebrahimi done 384*22dc650dSSadaf Ebrahimifi 385*22dc650dSSadaf Ebrahimi 386*22dc650dSSadaf Ebrahimi# Now re-run some of the tests under valgrind. 387*22dc650dSSadaf Ebrahimi 388*22dc650dSSadaf Ebrahimiif [ $usevalgrind -ne 0 ]; then 389*22dc650dSSadaf Ebrahimi echo "---------- Tests in the current directory using valgrind ----------" 390*22dc650dSSadaf Ebrahimi valgrind=valgrind 391*22dc650dSSadaf Ebrahimi withvalgrind="with valgrind" 392*22dc650dSSadaf Ebrahimi 393*22dc650dSSadaf Ebrahimi if [ $usemainvalgrind -ne 0 ]; then 394*22dc650dSSadaf Ebrahimi for opts in \ 395*22dc650dSSadaf Ebrahimi "--disable-shared" \ 396*22dc650dSSadaf Ebrahimi "--with-link-size=3 --enable-pcre2-16 --enable-pcre2-32 --disable-shared" 397*22dc650dSSadaf Ebrahimi do 398*22dc650dSSadaf Ebrahimi opts="--enable-valgrind $opts" 399*22dc650dSSadaf Ebrahimi runtest 400*22dc650dSSadaf Ebrahimi done 401*22dc650dSSadaf Ebrahimi fi 402*22dc650dSSadaf Ebrahimi 403*22dc650dSSadaf Ebrahimi if [ $usejitvalgrind -ne 0 ]; then 404*22dc650dSSadaf Ebrahimi jrvalgrind="valgrind --tool=memcheck -q --smc-check=all-non-file --suppressions=$srcdir/testdata/valgrind-jit.supp" 405*22dc650dSSadaf Ebrahimi for opts in \ 406*22dc650dSSadaf Ebrahimi "--enable-jit --disable-shared" \ 407*22dc650dSSadaf Ebrahimi "--enable-jit --enable-pcre2-16 --enable-pcre2-32" 408*22dc650dSSadaf Ebrahimi do 409*22dc650dSSadaf Ebrahimi opts="--enable-valgrind $opts" 410*22dc650dSSadaf Ebrahimi runtest 411*22dc650dSSadaf Ebrahimi done 412*22dc650dSSadaf Ebrahimi fi 413*22dc650dSSadaf Ebrahimifi 414*22dc650dSSadaf Ebrahimi 415*22dc650dSSadaf Ebrahimivalgrind= 416*22dc650dSSadaf Ebrahimijrvalgrind= 417*22dc650dSSadaf Ebrahimiwithvalgrind= 418*22dc650dSSadaf Ebrahimi 419*22dc650dSSadaf Ebrahimi# Clean up the distribution and then do at least one build and test in a 420*22dc650dSSadaf Ebrahimi# directory other than the source directory. It doesn't work unless the 421*22dc650dSSadaf Ebrahimi# source directory is cleaned up first. 422*22dc650dSSadaf Ebrahimi 423*22dc650dSSadaf Ebrahimiif [ -f Makefile ]; then 424*22dc650dSSadaf Ebrahimi echo "Running 'make distclean'" 425*22dc650dSSadaf Ebrahimi make distclean >/dev/null 2>&1 426*22dc650dSSadaf Ebrahimi if [ $? -ne 0 ]; then 427*22dc650dSSadaf Ebrahimi echo "** 'make distclean' failed" 428*22dc650dSSadaf Ebrahimi exit 1 429*22dc650dSSadaf Ebrahimi fi 430*22dc650dSSadaf Ebrahimifi 431*22dc650dSSadaf Ebrahimi 432*22dc650dSSadaf Ebrahimiecho "---------- End of tests in the source directory ----------" 433*22dc650dSSadaf Ebrahimiecho "Removing teststdoutM and teststderrM" 434*22dc650dSSadaf Ebrahimirm -rf teststdoutM teststderrM 435*22dc650dSSadaf Ebrahimi 436*22dc650dSSadaf Ebrahimiif [ $usetmp -ne 0 -o $usetmpjit -ne 0 ]; then 437*22dc650dSSadaf Ebrahimi srcdir=`pwd` 438*22dc650dSSadaf Ebrahimi export srcdir 439*22dc650dSSadaf Ebrahimi 440*22dc650dSSadaf Ebrahimi if [ ! -e $tmp ]; then 441*22dc650dSSadaf Ebrahimi mkdir $tmp 442*22dc650dSSadaf Ebrahimi fi 443*22dc650dSSadaf Ebrahimi 444*22dc650dSSadaf Ebrahimi if [ ! -d $tmp ]; then 445*22dc650dSSadaf Ebrahimi echo "** Failed to create $tmp or it is not a directory" 446*22dc650dSSadaf Ebrahimi exit 1 447*22dc650dSSadaf Ebrahimi fi 448*22dc650dSSadaf Ebrahimi 449*22dc650dSSadaf Ebrahimi cd $tmp 450*22dc650dSSadaf Ebrahimi if [ $? -ne 0 ]; then 451*22dc650dSSadaf Ebrahimi echo "** Failed to cd to $tmp" 452*22dc650dSSadaf Ebrahimi exit 1 453*22dc650dSSadaf Ebrahimi fi 454*22dc650dSSadaf Ebrahimi 455*22dc650dSSadaf Ebrahimi if [ $usetmp -ne 0 ]; then 456*22dc650dSSadaf Ebrahimi echo "---------- Tests in the $tmp directory ----------" 457*22dc650dSSadaf Ebrahimi for opts in \ 458*22dc650dSSadaf Ebrahimi "--disable-shared" 459*22dc650dSSadaf Ebrahimi do 460*22dc650dSSadaf Ebrahimi runtest 461*22dc650dSSadaf Ebrahimi done 462*22dc650dSSadaf Ebrahimi fi 463*22dc650dSSadaf Ebrahimi 464*22dc650dSSadaf Ebrahimi if [ $usetmpjit -ne 0 ]; then 465*22dc650dSSadaf Ebrahimi echo "---------- JIT tests in the $tmp directory ----------" 466*22dc650dSSadaf Ebrahimi for opts in \ 467*22dc650dSSadaf Ebrahimi "--enable-jit --disable-shared" 468*22dc650dSSadaf Ebrahimi do 469*22dc650dSSadaf Ebrahimi runtest 470*22dc650dSSadaf Ebrahimi done 471*22dc650dSSadaf Ebrahimi fi 472*22dc650dSSadaf Ebrahimi 473*22dc650dSSadaf Ebrahimi echo "Removing $tmp" 474*22dc650dSSadaf Ebrahimi rm -rf $tmp 475*22dc650dSSadaf Ebrahimifi 476*22dc650dSSadaf Ebrahimi 477*22dc650dSSadaf Ebrahimiecho "---------- All done ----------" 478*22dc650dSSadaf Ebrahimi 479*22dc650dSSadaf Ebrahimi# End 480