diff options
Diffstat (limited to 'test/run_make.sh')
| -rwxr-xr-x | test/run_make.sh | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/test/run_make.sh b/test/run_make.sh new file mode 100755 index 000000000000..a09e6034b317 --- /dev/null +++ b/test/run_make.sh @@ -0,0 +1,196 @@ +#!/bin/sh +# $Id: run_make.sh,v 1.21 2022/11/06 20:57:33 tom Exp $ +# vi:ts=4 sw=4: + +# do a test-compile on each of the ".c" files in the test-directory + +BISON=`bison --version 2>/dev/null | head -n 1 | sed -e 's/^[^0-9.]*//' -e 's/[^0-9.]*$//'` + +if test $# = 1 +then + PROG_DIR=`pwd` + TEST_DIR=$1 +else + PROG_DIR=.. + TEST_DIR=. +fi +THIS_DIR=`pwd` + +: "${FGREP:=grep -F}" +ifBTYACC=`$FGREP -l 'define YYBTYACC' config.h > /dev/null; test $? != 0; echo $?` + +if test "$ifBTYACC" = 0; then + REF_DIR=${TEST_DIR}/yacc +else + REF_DIR=${TEST_DIR}/btyacc +fi + +MY_MAKE="make -f $PROG_DIR/makefile srcdir=$PROG_DIR" + +run_make() { + C_FILE=`basename "$1"` + O_FILE=`basename "$C_FILE" .c`.o + shift + RETEST=`unset CDPATH; cd $TEST_DIR; pwd` + cd "$REF_DIR" + test -f "$I_FILE" && rm "$I_FILE" + make -f "$PROG_DIR/makefile" EXTRA_CFLAGS=-I$RETEST srcdir="$PROG_DIR" "$O_FILE" "$@" + test -f "$O_FILE" && rm "$O_FILE" + cd "$THIS_DIR" +} + +echo "** `date`" +echo "** program is in $PROG_DIR" +echo "** test-files in $REF_DIR" + +for input in ${REF_DIR}/*.c +do + case $input in #(vi + ${REF_DIR}/err_*|\ + ${REF_DIR}/test-err_*) + continue + ;; + esac + + test -f "$input" || continue + + run_make "$input" + + DEFS= + case $input in #(vi + ${REF_DIR}/pure_*) + # DEFS="-DYYLEX_PARAM=flag -DYYLEX_PARAM_TYPE=int" + ;; + esac + + if test "x$DEFS" != "x" + then + run_make "$input" DEFINES="$DEFS" + fi +done + +if test -n "$BISON" +then + echo "** compare with bison $BISON" + for input in ${TEST_DIR}/*.y + do + test -f "$input" || continue + case $input in + ${TEST_DIR}/err_*|\ + ${TEST_DIR}/test-err_*) + continue + ;; + ${TEST_DIR}/ok_syntax*|\ + ${TEST_DIR}/varsyntax*) + # Bison does not support all byacc legacy syntax + continue + ;; + ${TEST_DIR}/btyacc_*) + # Bison does not support the btyacc []-action & inherited attribute extensions. + continue + ;; + esac + + # Bison does not support pure-parser from command-line. + # Also, its support for %expect is generally broken. + # Work around these issues using a temporary file. + + echo "... testing $input" + rm -f run_make.[coy] + + case $input in + ${TEST_DIR}/pure_*) + if test -z "`$FGREP -i -l '%pure-parser' "$input"`" + then + echo "%pure-parser" >>run_make.y + fi + ;; + esac + + sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y + + case $BISON in + [3-9].[0-9]*.[0-9]*) + bison -Wno-other -Wno-conflicts-sr -Wconflicts-rr -y -Wno-yacc run_make.y + ;; + *) + bison -y run_make.y + ;; + esac + if test -f "y.tab.c" + then + sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c + + rm -f y.tab.c + + input=run_make.c + object=run_make.o + if test -f $input + then + $MY_MAKE $object DEFINES='-DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=1 -DYYSTACK_USE_ALLOCA=0 -DYYMAXDEPTH=0' + else + echo "?? $input not found" + fi + fi + rm -f run_make.[coy] + done +fi + +YACC= +for name in /usr/ccs/bin/yacc +do + if test -f $name + then + YACC=$name + fi +done + +if test -n "$YACC" +then + echo "** compare with $YACC" + for input in ${TEST_DIR}/*.y + do + test -f "$input" || continue + + echo "... testing $input" + rm -f run_make.[coy] + + case $input in + pure_*) + echo "... skipping $input" + continue; + ;; + *) + if $FGREP -i '%pure-parser' "$input" >/dev/null || + $FGREP -i '%parse-param' "$input" >/dev/null || + $FGREP -i '%lex-param' "$input" >/dev/null || + $FGREP -i '%token-table' "$input" >/dev/null || + $FGREP 'YYLEX_PARAM' "$input" >/dev/null + then + echo "... skipping $input" + continue; + fi + ;; + esac + + sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y + + $YACC run_make.y + if test -f y.tab.c + then + sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c + + rm -f y.tab.c + + input=run_make.c + object=run_make.o + if test -f $input + then + $MY_MAKE $object + else + echo "?? $input not found" + fi + fi + rm -f run_make.[coy] + done +fi |
