2 # Copyright (C) 2011-2012 Free Software Foundation, Inc.
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2, or (at your option)
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17 # Check that many different Yacc parsers (both C and C++) can co-exists
18 # in the same directory.
20 required='cc c++ yacc'
23 cat >> configure.ac << 'END'
30 cat > Makefile.am << 'END'
31 bin_PROGRAMS = c1 c2 cxx1 cxx2 cxx3
34 c1_SOURCES = p.y p.h 1.c
38 cxx1_SOURCES = parse.yy main1.cc parse.hh
40 cxx2_SOURCES = parse2.y++ main2.c++
43 cxx3_SOURCES = parse3.yxx main3.cxx
45 BUILT_SOURCES = p.h parse.hh parse3.hxx
48 # The content of all the .c and .y files created below is valid C but
49 # deliberately invalid C++.
50 # Vice versa, the content of all the .c++, .cxx, .cc, .y++, .yxx and
51 # .yy files created below is valid C++ but deliberately invalid C.
55 int yylex (void) { int new = 0; return new; }
56 void yyerror (char *s) { return; }
69 return yyparse () + new;
79 return yyparse () + new;
83 cat > parse.yy <<'END'
87 int yylex (void) { return 0; }
88 void yyerror (const char *s) { return; }
96 cat > parse2.y++ <<'END'
99 int yylex (void) { return 0; }
100 void yyerror (const char *s) { return; }
107 cat > main1.cc <<'END'
110 int main (int argc, char **argv)
113 return yyparse () + FOOBAR;
117 cat > main2.c++ <<'END'
119 int main (int argc, char **argv)
126 edit () { sed -e 's/FOOBAR/BAZQUUX/' -e 's/"parse\.hh"/"parse3.hxx"/'; }
127 edit <parse.yy >parse3.yxx
128 edit <main1.cc >main3.cxx
134 # Try a VPATH and by default serial build first, and then an in-tree
135 # and by default parallel build.
139 if test $try -eq 0; then
140 # VPATH serial build.
144 debug_info="ls -l . $srcdir"
146 elif test $try -eq 1; then
147 # In-tree parallel build.
152 # Degree of parallelism already specified by the user: do
156 # Some make implementations (e.g., HP-UX) don't grok '-j',
157 # some require no space between '-j' and the number of jobs
158 # (e.g., older GNU make versions), and some *do* require a
159 # space between '-j' and the number of jobs (e.g., Solaris
160 # dmake). We need a runtime test to see what works.
161 echo 'all:' > Makefile
162 for run_make in "$MAKE -j3" "$MAKE -j 3" "$MAKE"; do
168 echo "$me: invalid value of \$try '$try'" >&2
187 test -f cxx2-parse2.c++
189 test ! -r cxx2-parse2.h++
191 # Minimal checks about recovering from header removal.
192 rm -f p.h parse.hh parse3.hxx
193 $run_make p.h parse.hh