automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] {yacc-work} coverage: test mixed C/C++ yacc-generated parser


From: Ralf Wildenhues
Subject: Re: [PATCH] {yacc-work} coverage: test mixed C/C++ yacc-generated parsers in the same dir
Date: Sun, 10 Apr 2011 14:02:16 +0200
User-agent: Mutt/1.5.20 (2010-08-04)

* 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]