xref: /freebsd/contrib/byacc/test/run_make.sh (revision 8e022d3c)
198e903e7SBaptiste Daroussin#!/bin/sh
2*8e022d3cSDag-Erling Smørgrav# $Id: run_make.sh,v 1.21 2022/11/06 20:57:33 tom Exp $
398e903e7SBaptiste Daroussin# vi:ts=4 sw=4:
498e903e7SBaptiste Daroussin
598e903e7SBaptiste Daroussin# do a test-compile on each of the ".c" files in the test-directory
698e903e7SBaptiste Daroussin
798e903e7SBaptiste DaroussinBISON=`bison --version 2>/dev/null | head -n 1 | sed -e 's/^[^0-9.]*//' -e 's/[^0-9.]*$//'`
898e903e7SBaptiste Daroussin
998e903e7SBaptiste Daroussinif test $# = 1
1098e903e7SBaptiste Daroussinthen
1198e903e7SBaptiste Daroussin	PROG_DIR=`pwd`
1298e903e7SBaptiste Daroussin	TEST_DIR=$1
1398e903e7SBaptiste Daroussinelse
1498e903e7SBaptiste Daroussin	PROG_DIR=..
1598e903e7SBaptiste Daroussin	TEST_DIR=.
1698e903e7SBaptiste Daroussinfi
170c8de5b0SBaptiste DaroussinTHIS_DIR=`pwd`
1898e903e7SBaptiste Daroussin
19*8e022d3cSDag-Erling Smørgrav: "${FGREP:=grep -F}"
20*8e022d3cSDag-Erling SmørgravifBTYACC=`$FGREP -l 'define YYBTYACC' config.h > /dev/null; test $? != 0; echo $?`
210c8de5b0SBaptiste Daroussin
22*8e022d3cSDag-Erling Smørgravif test "$ifBTYACC" = 0; then
230c8de5b0SBaptiste Daroussin	REF_DIR=${TEST_DIR}/yacc
240c8de5b0SBaptiste Daroussinelse
250c8de5b0SBaptiste Daroussin	REF_DIR=${TEST_DIR}/btyacc
260c8de5b0SBaptiste Daroussinfi
270c8de5b0SBaptiste Daroussin
280c8de5b0SBaptiste DaroussinMY_MAKE="make -f $PROG_DIR/makefile srcdir=$PROG_DIR"
290c8de5b0SBaptiste Daroussin
300c8de5b0SBaptiste Daroussinrun_make() {
310c8de5b0SBaptiste Daroussin	C_FILE=`basename "$1"`
320c8de5b0SBaptiste Daroussin	O_FILE=`basename "$C_FILE" .c`.o
330c8de5b0SBaptiste Daroussin	shift
34*8e022d3cSDag-Erling Smørgrav	RETEST=`unset CDPATH; cd $TEST_DIR; pwd`
35*8e022d3cSDag-Erling Smørgrav	cd "$REF_DIR"
36*8e022d3cSDag-Erling Smørgrav	test -f "$I_FILE" && rm "$I_FILE"
37*8e022d3cSDag-Erling Smørgrav	make -f "$PROG_DIR/makefile" EXTRA_CFLAGS=-I$RETEST srcdir="$PROG_DIR" "$O_FILE" "$@"
38*8e022d3cSDag-Erling Smørgrav	test -f "$O_FILE" && rm "$O_FILE"
39*8e022d3cSDag-Erling Smørgrav	cd "$THIS_DIR"
400c8de5b0SBaptiste Daroussin}
4198e903e7SBaptiste Daroussin
42*8e022d3cSDag-Erling Smørgravecho "** `date`"
430c8de5b0SBaptiste Daroussinecho "** program is in $PROG_DIR"
440c8de5b0SBaptiste Daroussinecho "** test-files in $REF_DIR"
450c8de5b0SBaptiste Daroussin
460c8de5b0SBaptiste Daroussinfor input in ${REF_DIR}/*.c
4798e903e7SBaptiste Daroussindo
480c8de5b0SBaptiste Daroussin	case $input in #(vi
49c5b5d71aSJung-uk Kim	${REF_DIR}/err_*|\
50c5b5d71aSJung-uk Kim	${REF_DIR}/test-err_*)
510c8de5b0SBaptiste Daroussin		continue
520c8de5b0SBaptiste Daroussin		;;
530c8de5b0SBaptiste Daroussin	esac
540c8de5b0SBaptiste Daroussin
5598e903e7SBaptiste Daroussin	test -f "$input" || continue
5698e903e7SBaptiste Daroussin
570c8de5b0SBaptiste Daroussin	run_make "$input"
5898e903e7SBaptiste Daroussin
5998e903e7SBaptiste Daroussin	DEFS=
6098e903e7SBaptiste Daroussin	case $input in #(vi
610c8de5b0SBaptiste Daroussin	${REF_DIR}/pure_*)
6298e903e7SBaptiste Daroussin		# DEFS="-DYYLEX_PARAM=flag -DYYLEX_PARAM_TYPE=int"
6398e903e7SBaptiste Daroussin		;;
6498e903e7SBaptiste Daroussin	esac
6598e903e7SBaptiste Daroussin
6698e903e7SBaptiste Daroussin	if test "x$DEFS" != "x"
6798e903e7SBaptiste Daroussin	then
680c8de5b0SBaptiste Daroussin		run_make "$input" DEFINES="$DEFS"
6998e903e7SBaptiste Daroussin	fi
7098e903e7SBaptiste Daroussindone
7198e903e7SBaptiste Daroussin
7298e903e7SBaptiste Daroussinif test -n "$BISON"
7398e903e7SBaptiste Daroussinthen
7498e903e7SBaptiste Daroussin	echo "** compare with bison $BISON"
7598e903e7SBaptiste Daroussin	for input in ${TEST_DIR}/*.y
7698e903e7SBaptiste Daroussin	do
7798e903e7SBaptiste Daroussin		test -f "$input" || continue
780c8de5b0SBaptiste Daroussin		case $input in
79c5b5d71aSJung-uk Kim		${TEST_DIR}/err_*|\
80c5b5d71aSJung-uk Kim		${TEST_DIR}/test-err_*)
81c5b5d71aSJung-uk Kim			continue
82c5b5d71aSJung-uk Kim			;;
83c5b5d71aSJung-uk Kim		${TEST_DIR}/ok_syntax*|\
84c5b5d71aSJung-uk Kim		${TEST_DIR}/varsyntax*)
85c5b5d71aSJung-uk Kim			# Bison does not support all byacc legacy syntax
860c8de5b0SBaptiste Daroussin			continue
870c8de5b0SBaptiste Daroussin			;;
880c8de5b0SBaptiste Daroussin		${TEST_DIR}/btyacc_*)
89c5b5d71aSJung-uk Kim			# Bison does not support the btyacc []-action & inherited attribute extensions.
900c8de5b0SBaptiste Daroussin			continue
910c8de5b0SBaptiste Daroussin			;;
920c8de5b0SBaptiste Daroussin		esac
9398e903e7SBaptiste Daroussin
9498e903e7SBaptiste Daroussin		# Bison does not support pure-parser from command-line.
9598e903e7SBaptiste Daroussin		# Also, its support for %expect is generally broken.
9698e903e7SBaptiste Daroussin		# Work around these issues using a temporary file.
9798e903e7SBaptiste Daroussin
9898e903e7SBaptiste Daroussin		echo "... testing $input"
9998e903e7SBaptiste Daroussin		rm -f run_make.[coy]
10098e903e7SBaptiste Daroussin
10198e903e7SBaptiste Daroussin		case $input in
1020c8de5b0SBaptiste Daroussin		${TEST_DIR}/pure_*)
103*8e022d3cSDag-Erling Smørgrav			if test -z "`$FGREP -i -l '%pure-parser' "$input"`"
10498e903e7SBaptiste Daroussin			then
10598e903e7SBaptiste Daroussin				echo "%pure-parser" >>run_make.y
10698e903e7SBaptiste Daroussin			fi
10798e903e7SBaptiste Daroussin			;;
10898e903e7SBaptiste Daroussin		esac
10998e903e7SBaptiste Daroussin
110*8e022d3cSDag-Erling Smørgrav		sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y
11198e903e7SBaptiste Daroussin
112b53bb29fSJung-uk Kim		case $BISON in
113b53bb29fSJung-uk Kim		[3-9].[0-9]*.[0-9]*)
114b53bb29fSJung-uk Kim			bison -Wno-other -Wno-conflicts-sr -Wconflicts-rr -y -Wno-yacc run_make.y
115b53bb29fSJung-uk Kim			;;
116b53bb29fSJung-uk Kim		*)
117b53bb29fSJung-uk Kim			bison -y run_make.y
118b53bb29fSJung-uk Kim			;;
119b53bb29fSJung-uk Kim		esac
1200c8de5b0SBaptiste Daroussin		if test -f "y.tab.c"
1210c8de5b0SBaptiste Daroussin		then
122*8e022d3cSDag-Erling Smørgrav			sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c
12398e903e7SBaptiste Daroussin
12498e903e7SBaptiste Daroussin			rm -f y.tab.c
12598e903e7SBaptiste Daroussin
12698e903e7SBaptiste Daroussin			input=run_make.c
12798e903e7SBaptiste Daroussin			object=run_make.o
12898e903e7SBaptiste Daroussin			if test -f $input
12998e903e7SBaptiste Daroussin			then
13098e903e7SBaptiste Daroussin				$MY_MAKE $object DEFINES='-DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=1 -DYYSTACK_USE_ALLOCA=0 -DYYMAXDEPTH=0'
13198e903e7SBaptiste Daroussin			else
13298e903e7SBaptiste Daroussin				echo "?? $input not found"
13398e903e7SBaptiste Daroussin			fi
1340c8de5b0SBaptiste Daroussin		fi
13598e903e7SBaptiste Daroussin		rm -f run_make.[coy]
13698e903e7SBaptiste Daroussin	done
13798e903e7SBaptiste Daroussinfi
13898e903e7SBaptiste Daroussin
13998e903e7SBaptiste DaroussinYACC=
14098e903e7SBaptiste Daroussinfor name in /usr/ccs/bin/yacc
14198e903e7SBaptiste Daroussindo
14298e903e7SBaptiste Daroussin	if test -f $name
14398e903e7SBaptiste Daroussin	then
14498e903e7SBaptiste Daroussin		YACC=$name
14598e903e7SBaptiste Daroussin	fi
14698e903e7SBaptiste Daroussindone
14798e903e7SBaptiste Daroussin
14898e903e7SBaptiste Daroussinif test -n "$YACC"
14998e903e7SBaptiste Daroussinthen
15098e903e7SBaptiste Daroussin	echo "** compare with $YACC"
15198e903e7SBaptiste Daroussin	for input in ${TEST_DIR}/*.y
15298e903e7SBaptiste Daroussin	do
15398e903e7SBaptiste Daroussin		test -f "$input" || continue
15498e903e7SBaptiste Daroussin
15598e903e7SBaptiste Daroussin		echo "... testing $input"
15698e903e7SBaptiste Daroussin		rm -f run_make.[coy]
15798e903e7SBaptiste Daroussin
15898e903e7SBaptiste Daroussin		case $input in
15998e903e7SBaptiste Daroussin		pure_*)
16098e903e7SBaptiste Daroussin			echo "... skipping $input"
16198e903e7SBaptiste Daroussin			continue;
16298e903e7SBaptiste Daroussin			;;
16398e903e7SBaptiste Daroussin		*)
164*8e022d3cSDag-Erling Smørgrav			if $FGREP -i '%pure-parser' "$input" >/dev/null ||
165*8e022d3cSDag-Erling Smørgrav			   $FGREP -i '%parse-param' "$input" >/dev/null ||
166*8e022d3cSDag-Erling Smørgrav			   $FGREP -i '%lex-param' "$input" >/dev/null ||
167*8e022d3cSDag-Erling Smørgrav			   $FGREP -i '%token-table' "$input" >/dev/null ||
168*8e022d3cSDag-Erling Smørgrav			   $FGREP 'YYLEX_PARAM' "$input" >/dev/null
16998e903e7SBaptiste Daroussin			then
17098e903e7SBaptiste Daroussin				echo "... skipping $input"
17198e903e7SBaptiste Daroussin				continue;
17298e903e7SBaptiste Daroussin			fi
17398e903e7SBaptiste Daroussin			;;
17498e903e7SBaptiste Daroussin		esac
17598e903e7SBaptiste Daroussin
176*8e022d3cSDag-Erling Smørgrav		sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y
17798e903e7SBaptiste Daroussin
17898e903e7SBaptiste Daroussin		$YACC run_make.y
1790c8de5b0SBaptiste Daroussin		if test -f y.tab.c
1800c8de5b0SBaptiste Daroussin		then
181*8e022d3cSDag-Erling Smørgrav			sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c
18298e903e7SBaptiste Daroussin
18398e903e7SBaptiste Daroussin			rm -f y.tab.c
18498e903e7SBaptiste Daroussin
18598e903e7SBaptiste Daroussin			input=run_make.c
18698e903e7SBaptiste Daroussin			object=run_make.o
18798e903e7SBaptiste Daroussin			if test -f $input
18898e903e7SBaptiste Daroussin			then
18998e903e7SBaptiste Daroussin				$MY_MAKE $object
19098e903e7SBaptiste Daroussin			else
19198e903e7SBaptiste Daroussin				echo "?? $input not found"
19298e903e7SBaptiste Daroussin			fi
1930c8de5b0SBaptiste Daroussin		fi
19498e903e7SBaptiste Daroussin		rm -f run_make.[coy]
19598e903e7SBaptiste Daroussin	done
19698e903e7SBaptiste Daroussinfi
197