freebsd-dev/contrib/byacc/test/run_make.sh
Jung-uk Kim b53bb29fed MFV: r362513
Update byacc to 20200330.
2020-07-14 01:54:24 +00:00

194 lines
3.6 KiB
Bash
Executable File

#!/bin/sh
# $Id: run_make.sh,v 1.18 2019/11/25 23:23:26 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`
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
cd $REF_DIR
make -f $PROG_DIR/makefile 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