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