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. Regards, Stefano
From bbc40f6216b38b96ec5ab54e03912174344f7030 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Sun, 10 Apr 2011 12:06:45 +0200 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. --- ChangeLog | 6 ++ tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/yacc-mix-c-cxx.test | 165 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 173 insertions(+), 0 deletions(-) create mode 100755 tests/yacc-mix-c-cxx.test diff --git a/ChangeLog b/ChangeLog index daba1c3..6462d5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2011-04-10 Stefano Lattarini <stefano.lattar...@gmail.com> + 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. + +2011-04-10 Stefano Lattarini <stefano.lattar...@gmail.com> + cosmetics: fix typos and wording in some yacc tests * tests/yacc-cxx.test (foo.cc): Clarify comment about the content of this file being valid C++ but invalid C. diff --git a/tests/Makefile.am b/tests/Makefile.am index 0de0211..3794ef1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -813,6 +813,7 @@ yacc-nodist.test \ yaccpp.test \ yaccvpath.test \ yacc-d-vpath.test \ +yacc-mix-c-cxx.test \ yacc-weirdnames.test \ yflags.test \ yflags2.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index f9949c3..519bdfc 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -1080,6 +1080,7 @@ yacc-nodist.test \ yaccpp.test \ yaccvpath.test \ yacc-d-vpath.test \ +yacc-mix-c-cxx.test \ yacc-weirdnames.test \ yflags.test \ yflags2.test \ diff --git a/tests/yacc-mix-c-cxx.test b/tests/yacc-mix-c-cxx.test new file mode 100755 index 0000000..6795c92 --- /dev/null +++ b/tests/yacc-mix-c-cxx.test @@ -0,0 +1,165 @@ +#! /bin/sh +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# 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++. +# 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 + +: -- 1.7.2.3