1#!/bin/sh 2# $Id: run_make.sh,v 1.21 2022/11/06 20:57:33 tom Exp $ 3# vi:ts=4 sw=4: 4 5# do a test-compile on each of the ".c" files in the test-directory 6 7BISON=`bison --version 2>/dev/null | head -n 1 | sed -e 's/^[^0-9.]*//' -e 's/[^0-9.]*$//'` 8 9if test $# = 1 10then 11 PROG_DIR=`pwd` 12 TEST_DIR=$1 13else 14 PROG_DIR=.. 15 TEST_DIR=. 16fi 17THIS_DIR=`pwd` 18 19: "${FGREP:=grep -F}" 20ifBTYACC=`$FGREP -l 'define YYBTYACC' config.h > /dev/null; test $? != 0; echo $?` 21 22if test "$ifBTYACC" = 0; then 23 REF_DIR=${TEST_DIR}/yacc 24else 25 REF_DIR=${TEST_DIR}/btyacc 26fi 27 28MY_MAKE="make -f $PROG_DIR/makefile srcdir=$PROG_DIR" 29 30run_make() { 31 C_FILE=`basename "$1"` 32 O_FILE=`basename "$C_FILE" .c`.o 33 shift 34 RETEST=`unset CDPATH; cd $TEST_DIR; pwd` 35 cd "$REF_DIR" 36 test -f "$I_FILE" && rm "$I_FILE" 37 make -f "$PROG_DIR/makefile" EXTRA_CFLAGS=-I$RETEST srcdir="$PROG_DIR" "$O_FILE" "$@" 38 test -f "$O_FILE" && rm "$O_FILE" 39 cd "$THIS_DIR" 40} 41 42echo "** `date`" 43echo "** program is in $PROG_DIR" 44echo "** test-files in $REF_DIR" 45 46for input in ${REF_DIR}/*.c 47do 48 case $input in #(vi 49 ${REF_DIR}/err_*|\ 50 ${REF_DIR}/test-err_*) 51 continue 52 ;; 53 esac 54 55 test -f "$input" || continue 56 57 run_make "$input" 58 59 DEFS= 60 case $input in #(vi 61 ${REF_DIR}/pure_*) 62 # DEFS="-DYYLEX_PARAM=flag -DYYLEX_PARAM_TYPE=int" 63 ;; 64 esac 65 66 if test "x$DEFS" != "x" 67 then 68 run_make "$input" DEFINES="$DEFS" 69 fi 70done 71 72if test -n "$BISON" 73then 74 echo "** compare with bison $BISON" 75 for input in ${TEST_DIR}/*.y 76 do 77 test -f "$input" || continue 78 case $input in 79 ${TEST_DIR}/err_*|\ 80 ${TEST_DIR}/test-err_*) 81 continue 82 ;; 83 ${TEST_DIR}/ok_syntax*|\ 84 ${TEST_DIR}/varsyntax*) 85 # Bison does not support all byacc legacy syntax 86 continue 87 ;; 88 ${TEST_DIR}/btyacc_*) 89 # Bison does not support the btyacc []-action & inherited attribute extensions. 90 continue 91 ;; 92 esac 93 94 # Bison does not support pure-parser from command-line. 95 # Also, its support for %expect is generally broken. 96 # Work around these issues using a temporary file. 97 98 echo "... testing $input" 99 rm -f run_make.[coy] 100 101 case $input in 102 ${TEST_DIR}/pure_*) 103 if test -z "`$FGREP -i -l '%pure-parser' "$input"`" 104 then 105 echo "%pure-parser" >>run_make.y 106 fi 107 ;; 108 esac 109 110 sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y 111 112 case $BISON in 113 [3-9].[0-9]*.[0-9]*) 114 bison -Wno-other -Wno-conflicts-sr -Wconflicts-rr -y -Wno-yacc run_make.y 115 ;; 116 *) 117 bison -y run_make.y 118 ;; 119 esac 120 if test -f "y.tab.c" 121 then 122 sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c 123 124 rm -f y.tab.c 125 126 input=run_make.c 127 object=run_make.o 128 if test -f $input 129 then 130 $MY_MAKE $object DEFINES='-DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=1 -DYYSTACK_USE_ALLOCA=0 -DYYMAXDEPTH=0' 131 else 132 echo "?? $input not found" 133 fi 134 fi 135 rm -f run_make.[coy] 136 done 137fi 138 139YACC= 140for name in /usr/ccs/bin/yacc 141do 142 if test -f $name 143 then 144 YACC=$name 145 fi 146done 147 148if test -n "$YACC" 149then 150 echo "** compare with $YACC" 151 for input in ${TEST_DIR}/*.y 152 do 153 test -f "$input" || continue 154 155 echo "... testing $input" 156 rm -f run_make.[coy] 157 158 case $input in 159 pure_*) 160 echo "... skipping $input" 161 continue; 162 ;; 163 *) 164 if $FGREP -i '%pure-parser' "$input" >/dev/null || 165 $FGREP -i '%parse-param' "$input" >/dev/null || 166 $FGREP -i '%lex-param' "$input" >/dev/null || 167 $FGREP -i '%token-table' "$input" >/dev/null || 168 $FGREP 'YYLEX_PARAM' "$input" >/dev/null 169 then 170 echo "... skipping $input" 171 continue; 172 fi 173 ;; 174 esac 175 176 sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y 177 178 $YACC run_make.y 179 if test -f y.tab.c 180 then 181 sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c 182 183 rm -f y.tab.c 184 185 input=run_make.c 186 object=run_make.o 187 if test -f $input 188 then 189 $MY_MAKE $object 190 else 191 echo "?? $input not found" 192 fi 193 fi 194 rm -f run_make.[coy] 195 done 196fi 197