aboutsummaryrefslogtreecommitdiff
path: root/test/run_make.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/run_make.sh')
-rwxr-xr-xtest/run_make.sh196
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