xref: /aosp_15_r20/external/pcre/maint/ManyConfigTests (revision 22dc650d8ae982c6770746019a6f94af92b0f024)
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