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