* Stefano Lattarini wrote on Sun, Apr 10, 2011 at 12:57:26PM CEST: > A final testcase I'd like to check in before submitting the final > patch for automake bug#7648 and PR automake/491 (patch not yet > complete ATM, but I think I'm almost there). It checks that many > different Yacc parsers (both C and C++) can co-exists in the same > directory. > > OK for yacc-work? I will push in 72 hours if there is no objection.
OK, a couple of minor nits. Thanks, Ralf > Subject: [PATCH] coverage: test mixed C/C++ yacc-generated parsers in the > same dir > > * tests/yacc-mix-c-cxx.test: New test. > * tests/Makefile.am (TESTS): Update. > --- /dev/null > +++ b/tests/yacc-mix-c-cxx.test > +# Check that many different Yacc parsers (both C and C++) can co-exists > +# in the same directory. > + > +required=yacc > +. ./defs || Exit 1 > + > +set -e > + > +distdir=$me-1.0 > + > +cat >> configure.in << 'END' > +AC_PROG_CC > +AC_PROG_CXX > +AC_PROG_YACC > +AC_OUTPUT > +END > + > +cat > Makefile.am << 'END' > +bin_PROGRAMS = c1 c2 cxx1 cxx2 cxx3 > +AM_YFLAGS = -d > + > +c1_SOURCES = p.y p.h 1.c > +c2_SOURCES = p.y 2.c > +c2_YFLAGS = > + > +cxx1_SOURCES = parse.yy main1.cc parse.hh > + > +cxx2_SOURCES = parse2.y++ main2.c++ > +cxx2_YFLAGS = > + > +cxx3_SOURCES = parse3.yxx main3.cxx > +BUILT_SOURCES = parse3.hxx > +END > + > +# The content of all the .c and .y files created below is valid C but > +# deliberately invalid as C++. s/as // I think. > +# Vice versa, the content of all the .c++, .cxx, .cc, .y++, .yxx and > +# .yy files created below is valid C++ but deliberately invalid C. > + > +cat > p.y <<'END' > +%{ > +int yylex (void) { int new = 0; return new; } > +void yyerror (char *s) { return; } > +%} > +%token ZARDOZ > +%% > +x : 'x' {}; > +%% > +END > + > +cat > 1.c <<'END' > +#include "p.h" > +int main () > +{ > + int new = ZARDOZ; > + return yyparse () + new; > +} > + > +END > + > +cat > 2.c <<'END' > +int main () > +{ > + int yyparse (); > + int new = 0; > + return yyparse () + new; > +} > +END > + > +cat > parse.yy <<'END' > +%{ > +#include <cstdlib> > +#include "parse.hh" > +int yylex (void) { return 0; } > +void yyerror (const char *s) { return; } > +%} > +%token FOOBAR > +%% > +x : 'x' {}; > +%% > +END > + > +cat > parse2.y++ <<'END' > +%{ > +#include <cstdlib> > +int yylex (void) { return 0; } > +void yyerror (const char *s) { return; } > +%} > +%% > +x : 'x' {}; > +%% > +END > + > +cat > main1.cc <<'END' > +using namespace std; > +#include "parse.hh" > +int main (int argc, char **argv) > +{ > + int yyparse (void); > + return yyparse () + FOOBAR; > +} > +END > + > +cat > main2.c++ <<'END' > +using namespace std; > +int main (int argc, char **argv) > +{ > + int yyparse (void); > + return yyparse (); > +} > +END > + > +edit () { sed -e 's/FOOBAR/BAZQUUX/' -e 's/"parse\.hh"/"parse3.hxx"/'; } > +edit <parse.yy >parse3.yxx > +edit <main1.cc >main3.cxx > + > +$ACLOCAL > +$AUTOCONF > +$AUTOMAKE -a > + > +./configure > + > +$MAKE > +ls -l # For debugging. > + > +test -f p.c > +test -f p.h > +test -f c2-p.c > +test ! -r c2-p.h > + > +test -f parse.cc > +test -f parse.hh > +test -f parse3.cxx > +test -f parse3.hxx > + > +test -f cxx2-parse2.c++ > +test ! -r parse2.h++ > +test ! -r cxx2-parse2.h++ > + > +# Minimal checks about recovering from header removal. > +rm -f p.h parse.hh parse3.hxx > +$MAKE p.h parse.hh > +test -f p.h > +test -f parse.hh > +test ! -r parse3.hxx > +$MAKE > +test -f parse3.hxx I think it would make sense to also do parallel build tests (only if make is GNU make, of course) here. Thanks, Ralf