2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
tests: drop unnecessary requirement in 'subpkg.test'
* tests/subpkg.test ($required): Drop "bison", it is not required
anymore since commit `v1.11-502-g7e5ae80'.
* tests/remake-am-pr10111.test: Make executable.
* tests/remake-m4-pr10111.test: Likewise.
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc/lex tests: remove an unneeded workaround for bug#8485
+
+ * tests/yacc-d-cxx.test: Remove the workaround previously required
+ to avoid spurious failures due to automake bug#8485: that bug has
+ been solved with commit `v1.11-512-g40c3432'.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc/lex tests: avoid too much failures with FreeBSD make
+
+ In various Yacc/Lex tests, we used to run "make distcheck" commands
+ whose value was mostly dubious, and, even when it was there, was
+ very, very little. The presence of these extra distchecks had two
+ disadvantages: it slowed down our already-too-slow testsuite even
+ more, and, much worse, caused a lot of extra failures with FreeBSD,
+ all due to automake bug#7884, which is already exposed by the test
+ case `yacc-dist-nobuild.test'.
+
+ We can improve this situation by simply removing "make distcheck"
+ calls from a few testcases, or making them conditional to the use
+ of GNU make.
+
+ * tests/lex-clean-cxx.test: Do not call "make distcheck".
+ * tests/lex-clean.test: Likewise.
+ * tests/yacc-clean-cxx.test: Likewise.
+ * tests/yacc-clean.test: Likewise.
+ * tests/yflags-force-override.test: Likewise.
+ * tests/yacc-nodist.test: Only run "make distcheck" if make
+ is GNU make.
+
+2011-12-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'maint' into 'yacc-work'
+ * tests/silent-lex.test: Provide a dummy `yywrap()' function, to
+ avoid link errors on systems that doesn't provide a "lex library".
+ See also commit `v1.11-546-gca0ba5d'.
+
2011-12-14 Stefano Lattarini <stefano.lattarini@gmail.com>
readme: reference webpages for automake mailing lists
complaints from the `sc_no_brace_variable_expansions' maintainer
check.
+2011-10-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * tests/yacc-dist-nobuild.test: Add reference to relevant bug#7884.
+
2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
fix: make a test script executable
* tests/parallel-tests-log-compiler-example.test: Likewise.
* tests/Makefile.am (TESTS): Update.
+2011-06-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc tests: fix bug in 'yacc-cxx.test'
+ * tests/yacc-cxx.test: Enable `errexit' shell flag (the lack of
+ which was masking the bug).
+ (bar.cxx): Rename to ...
+ (bar2.cxx): ... this, otherwise automake will (correctly) complain
+ that object `bar.o' is created by both `bar.cxx' and `bar.c++'.
+ (Makefile.am): Adjust.
+
+2011-06-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: fix spurious link errors on Solaris
+ On Solaris 10, linking of lex-generated programs was failing in a
+ couple of lex tests with errors like this:
+ g++ -g -O2 -o joe joe.o -ll
+ Undefined symbol first referenced in file
+ yywrap() joe.o
+ ld: fatal: Symbol referencing errors. No output written to joe
+ collect2: ld returned 1 exit status
+ This change fixes it, also fixing at once potential problems for
+ systems that don't have a "lex library" (this happens for example
+ when cross-compiling from GNU/Linux to MinGW).
+ * tests/lex-depend-cxx.test (joe.ll, moe.l++): Define a dummy
+ `yywrap()' function.
+ * tests/lex-clean-cxx.test (mainfoo.cc, mainbar.cpp, mainbaz.c++,
+ mainqux.cxx): Likewise.
+
2011-06-23 Stefano Lattarini <stefano.lattarini@gmail.com>
docs: avoid a footnote, some related rewordings and improvements
with the same timestamp in alphabetical order when using the `-t'
option.
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex: "make clean" removes .c files from non-distributed .l
+ Previously, while automake did *not* distribute C source and header
+ files derived from non-distributed Lex sources, it still caused
+ them to be removed only by "make maintainer-clean" only, and not by
+ simply "make clean" or "make distclean".
+ This caused "make distcheck" to fail, unless the developer put
+ those generated .c files in CLEANFILES or in DISTCLEANFILES by
+ hand.
+ This change fixes this issue, by making non-distributed `.c' files
+ generated by non-distributed Lex sources cleaned by "make clean".
+ A similar problem for Yacc support had been fixed with the commit
+ v1.11-263-ged2c8bc.
+ * tests/automake.in (lang_lex_target_hook): Make C source files
+ derived from non-distributed Lex files cleaned by "make clean",
+ not only by "make maintainer-clean".
+ * tests/lex-clean.test: New test.
+ * tests/lex-clean-cxx.test: Likewise.
+ * tests/lex-nodist.test: Likewise.
+ * tests/lex-pr204.test: Likewise.
+ * tests/pr204.test: For consistency, renamed ...
+ * tests/yacc-pr204.test: ... to this, and updated to keep it
+ more in sync with 'lex-pr204.test'.
+ * tests/yacc-nodist.test: Updated to keep it more in sync with
+ 'lex-nodist.test'.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: make test on Lex dependency tracking more "semantic"
+ * tests/lex4.test: Renamed ...
+ * tests/lex-depend-grep.test: ... to this, and extended.
+ * tests/lex-depend.test, tests/lex-depend-cxx.test: ... these
+ new tests.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: remove erroneous check about ylwrap distribution
+ * tests/lex5.test: Do not check that the ylwrap script is *not*
+ distributed when there is only one lexer, as ylwrap is in fact
+ expected to distributed unconditionally (at least starting from
+ commit `Release-1-9-323-gc5881cc' of 19-08-2006). Note that this
+ bogus check wasn't triggering any failure because it was done at
+ the wrong time (i.e. from the VPATH build directory), so that it
+ could never fail anyway.
+ Instead, check that ylwrap is distributed even when there is only
+ one lexer.
+ Since we are at it, add a couple of `ls -l' calls, to get better
+ debugging info.
+
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc tests: "make clean" removes C++ files from non-distributed .y
+ * tests/yacc-clean-cxx.test: New test, sister of `yacc-clean.test'.
+ * tests/yacc-clean.test: Update heading comment to reference the
+ new sister test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add a workaround for automake bug#8485
+ * tests/yacc-d-cxx.test (Makefile.am): Add temporary workaround
+ for automake bug#8485. The bug is still exposed by the testcase
+ 'yacc-dist-nobuild-subdir.test'.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add a couple of inter-tests reference
+ * tests/yacc-nodist.test, tests/pr204.test: These tests are
+ related, so add references to each other in heading comments.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: require just `lex' instead of `flex'
+ * tests/lex-subobj-nodep.test ($required): Require `lex',
+ not `flex', as this test is expected to work with any lex
+ implementation.
+ * tests/silent-lex.test: Likewise.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: use `skip_' for skipping yacc/lex related tests
+ * tests/defs.in (lex, bison): Use `skip_' to signal test skipping.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: merge cleanup
+ * tests/defs.in (flex, bison): Requirements removed, we have real
+ `lex' and `yacc' requirements now.
+
2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
tests defs: allow requirements for compilers (mostly dummy)
2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
- coverage: test for automake bug#8485 (known regression)
- * tests/yacc-dist-nobuild-subdir.test: New test.
- * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+ lex/yacc tests: remove redundant $distdir definition
+ * tests/lex3.test ($distdir): Remove definition, that's already
+ done in `tests/defs'.
+ * tests/lexvpath.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/yacc-cxx.test: Likewise.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yacc-d-cxx.test: Likewise.
+ * tests/yacc-d-vpath.test: Likewise.
+ * tests/yacc-dist-nobuild-subdir.test: Likewise.
+ * tests/yacc-dist-nobuild.test: Likewise.
+ * tests/yacc-mix-c-cxx.test: Likewise.
+ * tests/yaccvpath.test: Likewise.
2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
* tests/vtexi3.test: Add comment explaining why we redefine
$distdir in this test.
+2011-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: test lex-generated "#line" directives postprocessing
+ * tests/yacc-line.test: In heading comments, add reference to new
+ sister test `lex-line.test'.
+ * tests/lex-line.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: minor improvements to a couple of yacc tests
+ * tests/yacc-auxdir.test: Avoid running autoconf, it's not
+ needed.
+ * tests/yacc-line.test: Also check that the yacc-generated C
+ and header files do not contain "#line" directives referencing
+ `y.tab.c' or `y.tab.h'. Add a couple of explicative comments.
+
+2011-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: split yacc6.test, for better separation and coverage
+ * tests/yacc6.test: Test removed, its content extended and split
+ into ...
+ * tests/yacc-auxdir.test, tests/yacc-depend.test,
+ tests/yacc-line.test: ... these new tests.
+ * tests/yacc-depend2.test: New test, exposes the failure that
+ FreeBSD used to encounter in yacc6.test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: do not uselessly require GNU make or gcc in a few tests
+ * tests/lex3.test: Remove gcc from requirements, as any working C
+ compiler should be ok. Consequently, do not clobber user CFLAGS.
+ Also, remove GNUmake from requirements; it was added (see commit
+ `Release-1-8-103-g0d2f592') because this test fails with FreeBSD
+ make due to VPATH issues -- but so do many other yacc-related and
+ lex-related tests currently, and requiring GNU make in all of
+ them would unacceptably reduce coverage.
+ * tests/lexvpath.test: Remove gcc from requirements, as any
+ working C compiler should be ok.
+ * tests/yacc4.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/lex5.test: Likewise. Also, do not require anymore GNU
+ make; to compensate, explicitly call "$MAKE Makefile" to update
+ the out-of-date Makefile if $MAKE is not GNU make.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in test 'yacc-d-cxx.test'
+ * tests/yacc-d-cxx.test: Create ylwrap script before calling
+ automake for the first time, so that the script gets correctly
+ distributed. Add checks verifying it indeed is.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests cosmetics: remove redundant definitions of variable $tab
+ * tests/yacc-d-basic.test ($tab): Remove definition: it's already
+ defined in `tests/defs'.
+ * tests/yacc-d-cxx.test: Likewise.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: add some tests on bison support (still xfailing)
+ Related to automake bug#7648 and PR automake/491.
+ * tests/bison-skeleton-cxx.test: New test.
+ * tests/bison-skeleton.test: New test.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Updated.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: test for automake bug#8485 (known regression)
+ * tests/yacc-dist-nobuild-subdir.test: New test.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-04-10 Stefano Lattarini <stefano.lattarini@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.lattarini@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.
+ (parse1.yy): Likewise. Also, remove redundant parentheses in a
+ `return' statement.
+ * tests/yacc-d-cxx.test (write_parse): Clarify comment about the
+ content of the generated files being valid C++ but invalid C.
+ (write_main): Likewise.
+ * tests/yacc-basic.test: Remove redundant parentheses in a
+ `return' statement.
+ * tests/yacc-d-vpath.test: Adjust spacing around curly brackets.
+ * tests/yaccvpath.test: Likewise.
+ * tests/yaccdry.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/yacc4.test: Likewise.
+ Suggested by Ralf Wildenhues.
+
+2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: update NEWS and docs about yacc-generated headers extensions
+ * doc/automake.texi (Yacc and Lex): Document explicitly that
+ extensions of yacc-generated headers are modelled after the
+ extension of the corresponding sources.
+ * NEWS: Update.
+
+2011-01-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: extension of headers modelled after extension of sources
+ With this change, if '-d' is in *YFLAGS, a yacc input file named
+ foo.y++ will cause a foo.h++ header to be generated, instead of a
+ foo.h header. Similarly for foo.ypp, foo.yxx and foo.yy.
+ This way, the name of the files generated by an automake-created
+ `ylwrap' invocation should be consistent with those generated by
+ a `bison -o' call.
+ Related to automake bug#7648 and PR automake/491.
+ * lib/am/yacc.am (am__yacc_c2h): New internal variable.
+ (?GENERIC?%EXT%%DERIVED-EXT%, ?!GENERIC?%OBJ%): Get the name of
+ the header dynamically at make runtime, so that its extension is
+ modelled after the extension of the source.
+ * automake.in (lang_yacc_target_hook): Adjust the calculation of
+ `$header' accordingly.
+ * tests/yacc-cxx.test: New test.
+ * tests/yacc-d-cxx.test: Likewise.
+ * tests/yacc-weirdnames.test: Likewise.
+ * tests/yacc-basic.test: Update comments.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yaccpp.test: Updated and extended.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: don't define YACC and LEX in the Makefiles
+ We don't want YACC and LEX defined as make variables, otherwise
+ the values determined at configure time will override those from
+ the environment, even in the make-spawned testcases. For example,
+ before this change, with the following usage:
+ $ ./configure YACC=yacc
+ $ export YACC='bison -y'
+ $ make check
+ the testsuite would have ended up, very counterintuitively, with
+ YACC defined to 'yacc' in the testcases' environment.
+ * configure.ac: Call `AM_SUBST_NOTMAKE' on YACC and LEX.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in lflags*.test
+ * tests/lflags.test: Remove 'LEX' from the environment, so
+ that it won't be erroneously picked up by `make -e'.
+ * tests/lflags2.test: Likewise.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more on 'yacc -d' and recovery from deleted headers
+ * tests/yacc-deleted-headers.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundancy from silent lex/yacc tests
+ * tests/silent-yacc-gcc.test, tests/silent-yacc-generic.test: Merge
+ these two testcases into ...
+ * tests/silent-yacc.test: ... this new one, which doesn't fiddle
+ which dependency tracking, as that shouldn't impact on generation
+ of yacc-derived C source and header files (and, for what concerns
+ compilation of C files, is already tested in other testcases).
+ * tests/silent-lex-gcc.test, tests/silent-lex-generic.test: Merge
+ these two testcases into ...
+ * tests/silent-lex.test: ... this new test, for similar reasons.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests init: better messages for 'yacc' and 'lex' requirements
+ * tests/defs.in: Give better diagnostic messages when a test must
+ be skipped to the unavailability of yacc or lex program. Also,
+ improve syncing between code for requiring yacc and lex.
+
+2011-01-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: look for a lex program to be used by the testsuite
+ This will allow the testcases requiring a 'lex' program to run also
+ with vendor/legacy lex implementations, not only with 'flex'.
+ * configure.ac: Look for a lex program, using AC_CHECK_PROGS.
+ * tests/defs.in: New required entry 'lex'.
+ ($LEX): Let the user override the lex program to be used by the
+ testsuite.
+ * tests/cond35.test ($required): Require 'lex', not 'flex'.
+ * tests/cond36.test: Likewise.
+ * tests/lexv3.test: Likewise.
+ * tests/lexv3.test: Likewise.
+ * tests/silent-lex-gcc.test: Likewise.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise.
+ * tests/silent-many-generic.test:likewise.
+ * tests/lexvpath.test: Likewise, and fix typo in comments.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: look for a yacc program to be used by the testsuite
+ Instead of forcing the user to manually export 'YACC' in the
+ testsuite to use a non-bison yacc, we now look for a yacc program
+ at configure time, and use that as the default in the testsuite.
+ * configure.ac: Look for a yacc program, using AC_CHECK_PROGS.
+ * tests/defs.in: Updated to use the value of $YACC precomputed by
+ configure, unless the user overrides that in the environment.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more coverage on yacc/lex silent-rules, plus minor cleanups
+ * tests/silent-yacc-gcc.test: Add sanity checks verifying that the
+ generated Makefile.in files really contains the non-generic rules
+ we expect. Do not redundantly manually remove files we know to be
+ already removed "make maintainer-clean".
+ (Makefile.am): Ensure we cover also non-generic yacc rules, by
+ setting target-specific YFLAGS.
+ (sub/Makefile.am): Likewise.
+ * tests/silent-yacc-generic.test: Likewise.
+ * tests/silent-lex-gcc.test: Likewise, but with LFLAGS instead of
+ YFLAGS.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise, but with both LFLAGS and
+ YFLAGS. Also ...
+ (do_and_check_verbose_build): Remove redundant blank line.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-yacc-headers.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in yflags*.test
+ * tests/yflags.test: Remove 'YACC' from the environment, so
+ that it won't be erroneously picked up by `make -e'.
+ * tests/yflags2.test: Likewise.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: cover yacc target-specific flags, and `-v' flag handling
+ * tests/yacc-basic.test: Also try to build a parser having `-v'
+ as target-specific flags. Add a couple of `ls -l' commands, for
+ debugging. Update and extend comments. Escape literal dots in
+ grep regular expressions.
+
+2011-01-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: clustered '-d' not recognized in YFLAGS
+ This change fixes automake bug#7828.
+ * doc/automake.texi (Yacc and Lex): Document that automake
+ recognizes '-d' in AM_YFLAGS only if it's not clustered with
+ other options.
+ From a report by Юрий Пухальский.
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: do not force yacc-requiring tests to use bison
+ * tests/defs.in: New required entry 'yacc'. Remove old
+ required entry 'bison'.
+ * tests/cond35.test ($required): Require yacc, not bison.
+ * tests/cond36.test: Likewise.
+ * tests/pr204.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-yacc-gcc.test: Likewise.
+ * tests/silent-yacc-generic.test: Likewise.
+ * tests/subpkg.test: Likewise.
+ * tests/suffix10.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/yacc-clean.test: Likewise.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yacc-d-vpath.test: Likewise.
+ * tests/yacc-dist-nobuild.test: Likewise.
+ * tests/yacc-nodist.test: Likewise.
+ * tests/yacc4.test: Likewise.
+ * tests/yacc6.test: Likewise.
+ * tests/yacc7.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/yaccdry.test: Likewise.
+ * tests/yaccvpath.test: Likewise.
+
+2011-01-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: warn about conditional content in *YFLAGS variables
+ This change fixes automake bug#7804.
+ * automake.in (lang_yacc_target_hook): Warn if any of the relevant
+ *YFLAGS variables has conditional contents (not only a conditional
+ definition). Related refactoring.
+ * NEWS: Updated.
+ * tests/yflags-conditional.test: Updated and extended.
+ * tests/yflags-conditional-force.test: New test.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: support variable expansions in *YFLAGS definition.
+ This change fixes automake bug#7800.
+ * automake.in (lang_yacc_target_hook): Use 'value_as_list_recursive'
+ instead of 'variable_value' to get the value of *YFLAGS variables.
+ Related changes.
+ ($DASH_D_PATTERN): Removed.
+ * tests/Makefile.am (XFAIL_TESTS): Remove yflags-var-expand.test.
+ * tests/yacc-clean.test: Remove workaround for now-fixed bug.
+ * NEWS: Update.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: more tests on *YFLAGS support
+ * tests/yflags-var-expand.test: New test, still xfailing. It
+ exposes automake bug#7800 -- "automake fails to honor `-d' in
+ AM_YFLAGS when variable expansions are involved".
+ * tests/yflags-d-false-positive.test: New test, checking that
+ automake do not spuriously see `-d' in *YFLAGS when that isn't
+ really there.
+ * tests/yflags-force-override.test: New test, checking that
+ automake can cope with definition of the YFLAGS variable in
+ Makefile.am (even if that is an extremely bad practice, as that
+ variable is user-reserved).
+ * tests/yflags-cmdline-override.test: New test, checking that
+ automake can cope with user-redefinition of YFLAGS at configure
+ time and/or at make time.
+ * tests/yflags-conditional.test: New test, checks that automake
+ warns on conditionally-defined *YFLAGS variables.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: extend and improve tests
+ * tests/yacc-basic.test: Also check that the intermediate C file
+ is mentioned in the generated Makefile.in, and that it is created
+ by the first make invocation.
+ * tests/yacc3.test: Test removed, superseded by ...
+ * tests/yacc-d-basic.test: ... this new test.
+ * tests/yacc2.test: Add reference to that new test in the heading
+ comments.
+ * tests/yacc-d-vpath.test: New test.
+ * tests/yaccvpath.test: Updated heading comments. Do not require
+ gcc anymore, as any working C compiler should be enough. Remove
+ redundant comments.
+ * tests/yacc-nodist.test: New test.
+ * tests/yacc-dist-nobuild.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-12-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extend, fix and improve tests on Lex and Yacc support.
+ * tests/lexcpp.test: New test script, on support for Lex + C++.
+ * tests/lexvpath.test: New test script, test build and rebuild
+ rules for lexers in VPATH setup.
+ * tests/yacc-basic.test: New test script, run simple "semantic"
+ checks on basic Yacc support (similarly to what lex3.test does
+ for Lex support).
+ * tests/lex.test: Don't create useless dummy source file joe.l.
+ Remove extra blank lines.
+ * tests/lex4.test: Add trailing `:' command. Do not create dummy
+ useless lex source file.
+ * tests/lex2.test: Likewise. Call automake with the `-a' option,
+ so that it doesn't fail for the absence of `ylwrap' script. Make
+ grepping of automake stderr stricter.
+ * tests/yacc7.test: Add trailing `:' command. Enable `errexit'
+ shell flag earlier (just after having sourced ./defs).
+ * tests/yacc4.test: Likewise. Also ...
+ (configure.in): Use pre-populated skeleton set up by ./defs,
+ instead of writing one from scratch.
+ Other minor cosmetic changes.
+ * tests/yacc5.test: Likewise.
+ * tests/yaccvpath.test: Likewise. Also ...
+ ($distdir): New variable.
+ Use it throughout.
+ * tests/lex5.test: Likewise.
+ * tests/lex3.test: Likewise. Check the distdir, rather than
+ grepping the distribution tarball. Extend the test on the
+ created binary, and be sure to avoid hangs. Add some comments.
+ * tests/yacc.test: Use stricter grepping. Add trailing `:'.
+ * tests/yacc6.test: Likewise.
+ * tests/yacc3.test: Likewise. Do not create the unused file
+ `Makefile.sed'. Remove useless rules from Makefile.am. Other
+ minor cosmetic changes.
+ * tests/yacc2.test: Make grepping of generated `Makefile.in' and
+ of automake error messages stricter. Do not redirect output of
+ grep to /dev/null. Move call to aclocal earlier. Reduce the
+ number of empty blank lines. Fix a typo in comments.
+ * tests/yacc8.test: Fixed bugs that reduced the completeness of
+ the tests. Added trailing `:' command.
+ (configure.in): Use pre-populated skeleton set up by ./defs,
+ instead of writing one from scratch.
+ * tests/yaccpp.test: Test also extensions `.y++', `.ypp', and
+ `.yxx', rather than only `.yy'.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: "make clean" removes .c and .h files from non-distributed .y
+ Previously, while automake did *not* distribute C source and header
+ files derived from non-distributed Yacc sources, it still caused
+ them to be removed only by "make maintainer-clean" only, and not by
+ simply "make clean" or "make distclean".
+ This caused "make distcheck" to fail, unless the developer put
+ those generated .c and .h files in CLEANFILES or in DISTCLEANFILES
+ by hand.
+ This change fixes this issue, by making non-distributed `.c' and
+ `.h' files generated by non-distributed Yacc sources cleaned by
+ "make clean".
+ * tests/automake.in (lang_yacc_target_hook): Make C source and
+ header files derived from non-distributed Yacc files cleaned by
+ "make clean", not only by "make maintainer-clean".
+ * tests/yacc-clean.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
2011-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
depcomp: fix bugs in tests and in the depcomp script
the `${infodir}/dir' file, by exporting the new environment variable
`AM_UPDATE_INFO_DIR' to the value "no".
+* Changes to Yacc support:
+
+ - C source and header files derived from non-distributed Yacc and/or
+ Lex sources are now removed by a simple "make clean" (while they were
+ previously removed only "make maintainer-clean").
+
+ - Slightly backward-incompatible change, relevant only for use of Yacc
+ with C++: the extensions of the header files produced by the Yacc
+ rules are now modelled after extension of the sources corresponding
+ sources. For example, yacc files named "foo.y++" and "bar.yy" will
+ produce header files named respectively "foo.h++" and "bar.hh", where
+ they would have previously produced header files named simply "foo.h"
+ and "bar.h". This change offers better compatibility with `bison -o'.
+
Bugs fixed in 1.11.0a:
* Bugs introduced by 1.11:
- Java sources specified with check_JAVA are no longer compiled for
"make all", but only for "make check".
+ - Automake now detects the presence of the `-d' flag in the various
+ `*YFLAGS' variables even when their definitions involve indirections
+ through other variables, such as in:
+ foo_opts = -d
+ AM_YFLAGS = $(foo_opts)
+
+ - Automake now complains if a `*YFLAGS' variable has any conditional
+ content, not only a conditional definition.
+
- An usage like "java_JAVA = foo.java" will now cause Automake to warn
and error out if `javadir' is undefined, instead of silently producing
a broken Makefile.in.
. '|(\$\(srcdir\)/' . $PATH_PATTERN . ')'
. '|([^/\$]' . $PATH_PATTERN . '))\s*(#.*)?' . "\$");
-# Match `-d' as a command-line argument in a string.
-my $DASH_D_PATTERN = "(^|\\s)-d(\\s|\$)";
# Directories installed during 'install-exec' phase.
my $EXEC_DIR_PATTERN =
'^(?:bin|sbin|libexec|sysconf|localstate|lib|pkglib|.*exec.*)' . "\$";
{
my ($self, $aggregate, $output, $input, %transform) = @_;
- my $flag = $aggregate . "_YFLAGS";
- my $flagvar = var $flag;
- my $YFLAGSvar = var 'YFLAGS';
- if (($flagvar && $flagvar->variable_value =~ /$DASH_D_PATTERN/o)
- || ($YFLAGSvar && $YFLAGSvar->variable_value =~ /$DASH_D_PATTERN/o))
- {
- (my $output_base = $output) =~ s/$KNOWN_EXTENSIONS_PATTERN$//;
- my $header = $output_base . '.h';
+ # If some relevant *YFLAGS variable contains the `-d' flag, we'll
+ # have to to generate special code.
+ my $yflags_contains_minus_d = 0;
+
+ foreach my $pfx ("", "${aggregate}_")
+ {
+ my $yflagsvar = var ("${pfx}YFLAGS");
+ next unless $yflagsvar;
+ # We cannot work reliably with conditionally-defined YFLAGS.
+ if ($yflagsvar->has_conditional_contents)
+ {
+ msg_var ('unsupported', $yflagsvar,
+ "`${pfx}YFLAGS' cannot have conditional contents");
+ }
+ else
+ {
+ $yflags_contains_minus_d = 1
+ if grep (/^-d$/, $yflagsvar->value_as_list_recursive);
+ }
+ }
+ if ($yflags_contains_minus_d)
+ {
# Found a `-d' that applies to the compilation of this file.
# Add a dependency for the generated header file, and arrange
# for that file to be included in the distribution.
+
+ # The extension of the output file (e.g., `.c' or `.cxx').
+ # We'll need it to compute the name of the generated header file.
+ (my $output_ext = basename ($output)) =~ s/.*(\.[^.]+)$/$1/;
+
+ # We know that a yacc input should be turned into either a C or
+ # C++ output file. We depend on this fact (here and in yacc.am),
+ # so check that it really holds.
+ my $lang = $languages{$extension_map{$output_ext}};
+ prog_error "invalid output name `$output' for yacc file `$input'"
+ if (!$lang || ($lang->name ne 'c' && $lang->name ne 'cxx'));
+
+ (my $header_ext = $output_ext) =~ s/c/h/g;
+ # Quote $output_ext in the regexp, so that dots in it are taken
+ # as literal dots, not as metacharacters.
+ (my $header = $output) =~ s/\Q$output_ext\E$/$header_ext/;
+
foreach my $cond (Automake::Rule::define (${header}, 'internal',
RULE_AUTOMAKE, TRUE,
INTERNAL))
&push_dist_common ($header)
if $transform{'DIST_SOURCE'};
- # If the files are built in the build directory, then we want
- # to remove them with `make clean'. If they are in srcdir
- # they shouldn't be touched. However, we can't determine this
- # statically, and the GNU rules say that yacc/lex output files
- # should be removed by maintainer-clean. So that's what we
- # do.
- $clean_files{$header} = MAINTAINER_CLEAN;
- }
- # Erase $OUTPUT on `make maintainer-clean' (by GNU standards).
+ # The GNU rules say that yacc/lex output files should be removed
+ # by maintainer-clean. However, if the files are not distributed,
+ # then we want to remove them with "make clean"; otherwise,
+ # "make distcheck" will fail.
+ $clean_files{$header} = $transform{'DIST_SOURCE'} ? MAINTAINER_CLEAN : CLEAN;
+ }
# See the comment above for $HEADER.
- $clean_files{$output} = MAINTAINER_CLEAN;
+ $clean_files{$output} = $transform{'DIST_SOURCE'} ? MAINTAINER_CLEAN : CLEAN;
}
# This is a lex helper which is called whenever we have decided to
# compile a lex file.
sub lang_lex_target_hook
{
- my ($self, $aggregate, $output, $input) = @_;
- # If the files are built in the build directory, then we want to
- # remove them with `make clean'. If they are in srcdir they
- # shouldn't be touched. However, we can't determine this
- # statically, and the GNU rules say that yacc/lex output files
- # should be removed by maintainer-clean. So that's what we do.
- $clean_files{$output} = MAINTAINER_CLEAN;
+ my ($self, $aggregate, $output, $input, %transform) = @_;
+ # The GNU rules say that yacc/lex output files should be removed
+ # by maintainer-clean. However, if the files are not distributed,
+ # then we want to remove them with "make clean"; otherwise,
+ # "make distcheck" will fail.
+ $clean_files{$output} = $transform{'DIST_SOURCE'} ? MAINTAINER_CLEAN : CLEAN;
}
# This is a helper for both lex and yacc.
# for input from the terminal.
AM_RUN_LOG([$TEX --version </dev/null])
+# The test suite will skip some tests if no lex or yacc program is
+# available.
+# We don't use AC_PROG_LEX nor AC_PROG_YACC here because:
+# 1. we don't want flex (resp. bison) to be preferred to system lex
+# (resp. system yacc);
+# 2. we don't want $LEX (resp. $YACC) to be defined to ':' (resp. 'yacc')
+# by default;
+# 3. we prefer not to have the variables YFLAGS, LEX_OUTPUT_ROOT and
+# LEXLIB to be calculated and/or AC_SUBST'd;
+# 4. we prefer that the YACC and LEX variables are not reported in the
+# configure help screen.
+AC_CHECK_PROGS([YACC], [yacc byacc 'bison -y'], [false])
+AC_CHECK_PROGS([LEX], [lex flex], [false])
+# We don't want YACC and LEX defined as make variables, otherwise the
+# values determined at configure time will override those from the
+# environment, even in the make-spawned testcases.
+AM_SUBST_NOTMAKE([YACC])
+AM_SUBST_NOTMAKE([LEX])
+
# Generate man pages.
AM_MISSING_PROG([HELP2MAN], [help2man])
@file{y.tab.c}, which is more traditional).
The extension of a yacc source file is used to determine the extension
-of the resulting C or C++ file. Files with the extension @file{.y}
-will be turned into @file{.c} files; likewise, @file{.yy} will become
-@file{.cc}; @file{.y++}, @file{c++}; @file{.yxx}, @file{.cxx}; and
-@file{.ypp}, @file{.cpp}.
-
-Likewise, lex source files can be used to generate C or C++; the
+of the resulting C or C++ source and header files. Note that header
+files are generated only when the @option{-d} Yacc option is used; see
+below for more information about this flag, and how to specify it.
+Files with the extension @file{.y} will thus be turned into @file{.c}
+sources and @file{.h} headers; likewise, @file{.yy} will become
+@file{.cc} and @file{.hh}, @file{.y++} will become @file{c++} and
+@file{h++}, @file{.yxx} will become @file{.cxx} and @file{.hxx},
+and @file{.ypp} will become @file{.cpp} and @file{.hpp}.
+
+Similarly, lex source files can be used to generate C or C++; the
extensions @file{.l}, @file{.ll}, @file{.l++}, @file{.lxx}, and
@file{.lpp} are recognized.
## distributed or not. We cannot have a generic rule that works in
## both cases, so we ensure in automake that nodist_ parsers always
## use non-generic rules.
-if %?MAINTAINER-MODE%
if %?FIRST%
+if %?MAINTAINER-MODE%
@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
-endif %?FIRST%
endif %?MAINTAINER-MODE%
+## The 's/c$/h/' substitution *must* be the last one.
+am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
+ -e s/c++$$/h++/ -e s/c$$/h/
+endif %?FIRST%
?GENERIC?%EXT%%DERIVED-EXT%:
?!GENERIC?%OBJ%: %SOURCE%
-?GENERIC? %VERBOSE%$(am__skipyacc) $(SHELL) $(YLWRAP) %SOURCE% y.tab.c %OBJ% y.tab.h %BASE%.h y.output %BASE%.output -- %COMPILE%
+?GENERIC? %VERBOSE%$(am__skipyacc) $(SHELL) $(YLWRAP) %SOURCE% y.tab.c %OBJ% y.tab.h `echo %OBJ% | $(am__yacc_c2h)` y.output %BASE%.output -- %COMPILE%
?!GENERIC? %VERBOSE% \
?!GENERIC??DIST_SOURCE? $(am__skipyacc) \
## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
-?!GENERIC? $(SHELL) $(YLWRAP) `test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE% y.tab.c %OBJ% y.tab.h %BASE%.h y.output %BASE%.output -- %COMPILE%
+?!GENERIC? $(SHELL) $(YLWRAP) `test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE% y.tab.c %OBJ% y.tab.h `echo %OBJ% | $(am__yacc_c2h)` y.output %BASE%.output -- %COMPILE%
XFAIL_TESTS = \
all.test \
auxdir2.test \
+yacc-bison-skeleton-cxx.test \
+yacc-bison-skeleton.test \
cond17.test \
dist-auxfile.test \
dist-auxfile-2.test \
lex.test \
lex2.test \
lex3.test \
-lex4.test \
lex5.test \
+lexcpp.test \
+lexvpath.test \
+lex-clean.test \
+lex-clean-cxx.test \
+lex-depend.test \
+lex-depend-cxx.test \
+lex-depend-grep.test \
+lex-line.test \
+lex-nodist.test \
+lex-pr204.test \
lex-subobj-nodep.test \
lflags.test \
lflags2.test \
pr9.test \
pr72.test \
pr87.test \
-pr204.test \
pr211.test \
pr220.test \
pr224.test \
silentf90.test \
silent-many-gcc.test \
silent-many-generic.test \
-silent-lex-gcc.test \
-silent-lex-generic.test \
-silent-yacc-gcc.test \
-silent-yacc-generic.test \
+silent-lex.test \
+silent-yacc.test \
+silent-yacc-headers.test \
silent-configsite.test \
srcsub.test \
srcsub2.test \
whoami.test \
xsource.test \
xz.test \
+yacc-basic.test \
+yacc-d-basic.test \
+yacc-cxx.test \
+yacc-d-cxx.test \
+yacc-clean.test \
+yacc-clean-cxx.test \
yacc.test \
yacc2.test \
-yacc3.test \
yacc4.test \
yacc5.test \
-yacc6.test \
yacc7.test \
yacc8.test \
yaccdry.test \
+yacc-auxdir.test \
+yacc-bison-skeleton-cxx.test \
+yacc-bison-skeleton.test \
+yacc-line.test \
+yacc-depend.test \
+yacc-depend2.test \
+yacc-deleted-headers.test \
+yacc-dist-nobuild.test \
+yacc-dist-nobuild-subdir.test \
+yacc-nodist.test \
+yacc-pr204.test \
yaccpp.test \
yaccvpath.test \
-yacc-dist-nobuild-subdir.test \
+yacc-d-vpath.test \
+yacc-mix-c-cxx.test \
+yacc-weirdnames.test \
yflags.test \
yflags2.test \
+yflags-cmdline-override.test \
+yflags-conditional.test \
+yflags-d-false-positives.test \
+yflags-force-override.test \
+yflags-force-conditional.test \
+yflags-var-expand.test \
libtool-macros.test \
gettext-macros.test \
$(parallel_tests)
# Check rules output for parser defined conditionally.
# Report from Roman Fietze.
-required='flex bison gcc'
+required='lex yacc gcc'
. ./defs || Exit 1
set -e
export SHELL
# User can override various tools used.
test -z "$PERL" && PERL='@PERL@'
+test -z "$YACC" && YACC='@YACC@'
+test -z "$LEX" && LEX='@LEX@'
test -z "$MAKE" && MAKE=make
test -z "$AUTOCONF" && AUTOCONF="@am_AUTOCONF@"
test -z "$AUTOM4TE" && AUTOM4TE="@am_AUTOM4TE@"
# Check that each required tool is present.
case $tool in
:) ;;
- bison|yacc)
- # Since bison is required, we pick YACC for ./configure.
- YACC='bison -y'
- export YACC
- echo "$me: running bison --version"
- ( bison --version ) || exit 77
- ;;
- flex|lex)
- # Since flex is required, we pick LEX for ./configure.
- LEX=flex
- export LEX
- echo "$me: running flex --version"
- flex --version || exit 77
- ;;
cc|c++|fortran|fortran77)
echo "$me: dummy requirement '$tool', no check done"
;;
echo "$me: running texi2dvi -o /dev/null --version"
( texi2dvi -o /dev/null --version ) || exit 77
;;
+ lex)
+ export LEX
+ test x"$LEX" = x"false" && skip_ "lex not found or disabled"
+ ;;
+ yacc)
+ export YACC
+ test x"$YACC" = x"false" && skip_ "yacc not found or disabled"
+ ;;
# Generic case: the tool must support --version.
*)
echo "$me: running $tool --version"
--- /dev/null
+#! /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 C++ source and header files derived from non-distributed
+# Yacc sources are cleaned by "make clean", while C++ source and
+# header files derived from distributed Yacc sources are cleaned by
+# "make maintainer-clean".
+# See also sister test `lex-clean.test'.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CXX
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = mainfoo.cc parsefoo.lxx
+
+bar_SOURCES = mainbar.cpp parsebar.ll
+bar_LFLAGS = $(AM_LFLAGS)
+
+baz_SOURCES = mainbaz.c++
+nodist_baz_SOURCES = parsebaz.l++
+
+qux_SOURCES = mainqux.cxx
+nodist_qux_SOURCES = parsequx.lpp
+qux_LFLAGS = $(AM_LFLAGS)
+
+parsebaz.l++ parsequx.lpp:
+ cp $(srcdir)/parsefoo.lxx $@
+
+CLEANFILES = parsebaz.l++ parsequx.lpp
+
+LDADD = $(LEXLIB)
+END
+
+cat > parsefoo.lxx << 'END'
+%%
+"GOOD" return EOF;
+.
+END
+cp parsefoo.lxx parsebar.ll
+
+cat > mainfoo.cc << 'END'
+// This file should contain valid C++ but invalid C.
+using namespace std;
+int yywrap (void)
+{
+ return 1;
+}
+int main (int argc, char **argv)
+{
+ extern int yylex (void);
+ return yylex ();
+}
+END
+cp mainfoo.cc mainbar.cpp
+cp mainfoo.cc mainbaz.c++
+cp mainfoo.cc mainqux.cxx
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l
+# Sanity checks.
+test -f parsefoo.cxx
+test -f bar-parsebar.cc
+test -f parsebaz.l++
+test -f parsebaz.c++
+test -f parsequx.lpp
+test -f qux-parsequx.cpp
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l
+ test -f parsefoo.cxx
+ test -f bar-parsebar.cc
+ test ! -r parsebaz.l++
+ test ! -r parsebaz.c++
+ test ! -r parsequx.lpp
+ test ! -r qux-parsequx.cpp
+done
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+$MAKE maintainer-clean
+ls -l
+test -f parsefoo.lxx
+test -f parsebar.ll
+test ! -r parsefoo.cxx
+test ! -r bar-parsebar.cc
+test -f parsefoo.lxx
+test -f parsebar.ll
+test ! -r parsefoo.cxx
+test ! -r bar-parsebar.cc
+
+:
--- /dev/null
+#! /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 .c files derived from non-distributed .l sources
+# are cleaned by "make clean", while .c files derived from
+# distributed .l sources are cleaned by "make maintainer-clean".
+# See also sister test `lex-clean-cxx.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = main.c lexer.l
+
+bar_SOURCES = main.c lexer.l
+bar_LFLAGS = $(AM_LFLAGS)
+
+baz_SOURCES = main.c
+nodist_baz_SOURCES = baz.l
+
+qux_SOURCES = main.c
+nodist_qux_SOURCES = baz.l
+qux_LFLAGS = $(AM_LFLAGS)
+
+baz.l:
+ cp $(srcdir)/lexer.l $@
+
+CLEANFILES = baz.l
+
+LDADD = $(LEXLIB)
+END
+
+cat > lexer.l << 'END'
+%%
+"GOOD" return EOF;
+.
+END
+
+cat > main.c << 'END'
+int main (void)
+{
+ return yylex ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l
+# Sanity checks.
+test -f lexer.l
+test -f lexer.c
+test -f bar-lexer.c
+test -f baz.l
+test -f baz.c
+test -f qux-baz.c
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l
+ test -f lexer.l
+ test -f lexer.c
+ test -f bar-lexer.c
+ test ! -r baz.l
+ test ! -r baz.c
+ test ! -r qux-baz.c
+done
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+$MAKE maintainer-clean
+ls -l
+test -f lexer.l
+test ! -r lexer.c
+test ! -r bar-lexer.c
+
+:
--- /dev/null
+#! /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/>.
+
+# Test to make sure dependencies work with Lex/C++.
+# Test synthesized from PR automake/6.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CXX
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = joe moe
+joe_SOURCES = joe.ll
+moe_SOURCES = moe.l++
+LDADD = $(LEXLIB)
+
+.PHONY: test-deps-exist
+test-deps-exist:
+ ls -l $(DEPDIR) ;: For debugging.
+ test -f $(DEPDIR)/joe.Po
+ test -f $(DEPDIR)/moe.Po
+
+.PHONY: test-obj-updated
+test-obj-updated: joe.$(OBJEXT) moe.$(OBJEXT)
+ stat older my-hdr.hxx joe.$(OBJEXT) moe.$(OBJEXT) || :
+ test `ls -t older joe.$(OBJEXT) | sed 1q` = joe.$(OBJEXT)
+ test `ls -t older moe.$(OBJEXT) | sed 1q` = moe.$(OBJEXT)
+END
+
+cat > joe.ll << 'END'
+%%
+"foo" return EOF;
+.
+%%
+#include "my-hdr.hxx"
+int yywrap (void)
+{
+ return 1;
+}
+int main (int argc, char **argv)
+{
+ printf("Hello, World!\n");
+ return 0;
+}
+END
+
+cp joe.ll moe.l++
+
+cat > my-hdr.hxx <<'END'
+// This header contains deliberetly invalid C (but valid C++)
+#include <cstdio>
+using namespace std;
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$FGREP joe.Po Makefile.in
+$FGREP moe.Po Makefile.in
+
+$AUTOCONF
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+
+$MAKE test-deps-exist
+$MAKE
+
+: > older
+$sleep
+touch my-hdr.hxx
+$MAKE test-obj-updated
+
+:
--- /dev/null
+#! /bin/sh
+# Copyright (C) 1999, 2001, 2002, 2006, 2010 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/>.
+
+# Test to make sure dependencies for Lex and C/C++ does not break
+# in obvious ways. See PR automake/6, and related semantic tests
+# `lex-depend.test' and `lex-depend-cxx.test'.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_LEX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zoo foo
+zoo_SOURCES = joe.ll
+foo_SOURCES = moe.l
+noinst_PROGRAMS = zardoz
+zardoz_SOURCES = _0.l _1.ll _2.lxx _3.l++ _4.lpp
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$EGREP '([mj]oe|_[01234]|include|\.P)' Makefile.in # For debugging.
+
+for x in joe moe _0 _1 _2 _3 _4; do
+ grep "include.*$x\.Po" Makefile.in
+done
+
+:
--- /dev/null
+#! /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/>.
+
+# Test to make sure automatic dependency tracking work with Lex/C.
+# Test suggested by PR automake/6.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zoo
+zoo_SOURCES = joe.l
+LDADD = $(LEXLIB)
+
+.PHONY: test-deps-exist
+test-deps-exist:
+ ls -l $(DEPDIR) ;: For debugging.
+ test -f $(DEPDIR)/joe.Po
+
+.PHONY: test-obj-updated
+test-obj-updated: joe.$(OBJEXT)
+ stat older my-hdr.h joe.$(OBJEXT) || : For debugging.
+ test `ls -t older joe.$(OBJEXT) | sed 1q` = joe.$(OBJEXT)
+END
+
+cat > joe.l << 'END'
+%%
+"foo" return EOF;
+.
+%%
+#include "my-hdr.h"
+int main (void)
+{
+ printf("%s\n", MESSAGE);
+ return 0;
+}
+END
+
+cat > my-hdr.h <<'END'
+#include <stdio.h>
+#define MESSAGE "Hello, World!"
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$FGREP joe.Po Makefile.in
+
+$AUTOCONF
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+
+$MAKE test-deps-exist
+$MAKE
+
+: > older
+$sleep
+touch my-hdr.h
+$MAKE test-obj-updated
+
+:
--- /dev/null
+#! /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 automake lex support ensures that lex-generated C
+# files use correct "#line" directives. Try also with the
+# `subdir-object' option enabled.
+# See also sister test `yacc-line.test'.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+mkdir dir sub sub/dir
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo bar
+LDADD = $(LEXLIB)
+bar_LFLAGS = -v
+foo_SOURCES = zardoz.l
+bar_SOURCES = dir/quux.l
+## Avoid spurious failures with Solaris make.
+zardoz.@OBJEXT@: zardoz.c
+bar-quux.@OBJEXT@: bar-quux.c
+END
+
+cat > sub/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_PROGRAMS = foo bar
+## We already used $(LEXLIB) above, so try @LEXLIB@ now.
+LDADD = @LEXLIB@
+foo_LFLAGS = -v
+foo_SOURCES = zardoz.l
+bar_SOURCES = dir/quux.l
+## Avoid spurious failures with Solaris make.
+foo-zardoz.@OBJEXT@: foo-zardoz.c
+dir/quux.@OBJEXT@: dir/quux.c
+END
+
+cat > zardoz.l << 'END'
+%%
+"END" return EOF;
+.
+%%
+int main ()
+{
+ while (yylex () != EOF)
+ ;
+ return 0;
+}
+END
+
+cp zardoz.l dir/quux.l
+cp zardoz.l sub/zardoz.l
+cp zardoz.l sub/dir/quux.l
+
+c_outputs='zardoz.c bar-quux.c sub/foo-zardoz.c sub/dir/quux.c'
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE
+
+ # For debugging,
+ ls -l . sub sub/dir
+ $FGREP '.l' $c_outputs
+
+ # Adjusted "#line" should not contain reference to the builddir.
+ $EGREP '#.*line.*(build|\.\.).*\.l' $c_outputs && Exit 1
+ # Adjusted "#line" should not contain reference to the default
+ # output file names, e.g., `lex.yy.c'.
+ $EGREP '#.*line.*lex\.yy' $c_outputs && Exit 1
+ # Don't be excessively strict in grepping, to avoid spurious failures.
+ grep '#.*line.*zardoz\.l' zardoz.c
+ grep '#.*line.*quux\.l' bar-quux.c
+ grep '#.*line.*zardoz\.l' sub/foo-zardoz.c
+ grep '#.*line.*quux\.l' sub/dir/quux.c
+ cd $srcdir
+
+done
+
+:
--- /dev/null
+#! /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/>.
+
+# Checks for .c files derived from non-distributed .l sources.
+# The test `lex-pr204.test' does similar check with AM_MAINTAINER_MODE
+# enabled.
+# The tests 'yacc-nodist.test' and 'yacc-pr204.test' does similar checks
+# for yacc-generated .c and .h files.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+dnl Sister test 'lex-pr204.test' should use 'AC_PROG_LEX' instead.
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+.PHONY: test-build test-dist
+test-build: all
+ ls -l
+ test -f lexer.l
+ test -f lexer.c
+test-dist: distdir
+ ls -l $(distdir)
+ test ! -r $(distdir)/lexer.l
+ test ! -r $(distdir)/lexer.c
+check-local: test-build test-dist
+
+lexer.l:
+ rm -f $@ $@-t
+ :; { : \
+ && echo '%%' \
+ && echo '"GOOD" return EOF;' \
+ && echo '.'; \
+ } > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+bin_PROGRAMS = prog
+prog_SOURCES = main.c
+nodist_prog_SOURCES = lexer.l
+prog_LDADD = $(LEXLIB)
+CLEANFILES = $(nodist_prog_SOURCES)
+END
+
+cat > main.c << 'END'
+int main ()
+{
+ return yylex ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+$MAKE test-build
+$MAKE test-dist
+
+# But the distribution must work correctly, assuming the user has
+# the proper tools to process yacc files.
+$MAKE distcheck
+
+:
--- /dev/null
+#! /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/>.
+
+# Related to PR 204.
+# C sources derived from nodist_ lex sources should not be distributed.
+# See also related test `lex-nodist.test'.
+# The tests 'yacc-nodist.test' and 'yacc-pr204.test' does similar checks
+# for yacc-generated .c and .h files.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'EOF'
+AM_MAINTAINER_MODE
+AC_PROG_CC
+dnl We use AC_PROG_LEX deliberately.
+dnl Sister 'lex-nodist.test' should use 'AM_PROG_LEX' instead.
+AC_PROG_LEX
+AC_OUTPUT
+EOF
+
+# The LEXER2 intermediate variable is there to make sure Automake
+# matches 'nodist_' against the right variable name...
+cat > Makefile.am << 'EOF'
+EXTRA_PROGRAMS = foo
+LEXER2 = lexer2.l
+nodist_foo_SOURCES = lexer.l $(LEXER2)
+
+distdirtest: distdir
+ test ! -f $(distdir)/lexer.c
+ test ! -f $(distdir)/lexer.l
+ test ! -f $(distdir)/lexer.h
+ test ! -f $(distdir)/lexer2.c
+ test ! -f $(distdir)/lexer2.l
+ test ! -f $(distdir)/lexer2.h
+EOF
+
+cat > lexer.l << 'END'
+%%
+"GOOD" return EOF;
+.
+%%
+int main (void)
+{
+ return yylex ();
+}
+END
+
+cp lexer.l lexer2.l
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE distdirtest
+
+# Make sure lexer.c and lexer2.c are still targets.
+$MAKE lexer.c lexer2.c
+test -f lexer.c
+test -f lexer2.c
+
+# Ensure the rebuild rule works despite AM_MAINTAINER_MODE, because
+# it's a nodist_ lexer.
+$sleep
+touch lexer.l lexer2.l
+$sleep
+$MAKE lexer.c lexer2.c
+stat lexer.c lexer.l lexer2.c lexer2.l || : # For debugging.
+test `ls -t lexer.c lexer.l | sed 1q` = lexer.c
+test `ls -t lexer2.c lexer2.l | sed 1q` = lexer2.c
+
+:
# Ensure subdirs for subdir scanners are generated when subdir-objects
# are used, even when dependency tracking is disabled.
-required=flex
+required=lex
. ./defs || Exit 1
set -e
LDADD = @LEXLIB@
END
-: > joe.l
-
$ACLOCAL
$AUTOMAKE -a
-
# Test to make sure that lex source generates correct target.
-
$FGREP '$(LEX)' Makefile.in
# Test to make sure that lex source generates correct clean rule.
# From Ralf Corsepius.
-
$FGREP joel Makefile.in && Exit 1
:
zot_SOURCES = joe.l
END
-: > joe.l
-
$ACLOCAL
-AUTOMAKE_fails
-grep AM_PROG_LEX stderr
+AUTOMAKE_fails -a
+grep 'LEX.* undefined' stderr
+grep 'add .*AM_PROG_LEX' stderr
+
+:
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# Basic semantic checks on Lex support.
# Test associated with PR 19.
# From Matthew D. Langston.
-required='gcc flex GNUmake'
+required=lex
. ./defs || Exit 1
-# Ignore user CFLAGS.
-CFLAGS=
-export CFLAGS
-
-cat > configure.in << 'END'
-AC_INIT
-dnl Prevent automake from looking in .. and ../..
-AC_CONFIG_AUX_DIR(.)
-AM_INIT_AUTOMAKE(am_lex_bug, 0.1.1)
+set -e
-dnl Checks for programs.
+cat >> configure.in << 'END'
AC_PROG_CC
AM_PROG_LEX
-AC_PROG_YACC
-AC_OUTPUT(Makefile)
+AC_OUTPUT
END
cat > Makefile.am << 'END'
cat > foo.l << 'END'
%%
-"END" return EOF;
+"GOOD" return EOF;
.
%%
int
main ()
{
- while (yylex () != EOF)
- ;
-
- return 0;
+ /* We don't use a 'while' loop here (like a real lexer would do)
+ to avoid possible hangs. */
+ if (yylex () == EOF)
+ return 0;
+ else
+ return 1;
}
/* Avoid possible link errors. */
}
END
-set -e
-
$ACLOCAL
$AUTOCONF
$AUTOMAKE -a
+
./configure
+
+# Program should build and run.
$MAKE
-echo 'This is the END' | ./foo
-$MAKE distcheck
+echo GOOD | ./foo
+echo BAD | ./foo && Exit 1
+
+# The generated file `foo.c' must be shipped.
+$MAKE distdir
+test -f $distdir/foo.c
-# foo.c must be shipped.
-gunzip am_lex_bug-0.1.1.tar.gz
-tar tf am_lex_bug-0.1.1.tar | $FGREP foo.c
+# Sanity check on distribution.
+$MAKE distcheck
# While we are at it, make sure that foo.c is erased by
# maintainer-clean, and not by distclean.
test -f foo.c
$MAKE distclean
test -f foo.c
-./configure
+./configure # we must re-create `Makefile'
$MAKE maintainer-clean
test ! -f foo.c
+
+:
#! /bin/sh
-# Copyright (C) 2002, 2003, 2004, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2004, 2010, 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
# Test for subdir lexers.
-required='gcc GNUmake flex'
+required=lex
. ./defs || Exit 1
set -e
-cat > configure.in << 'END'
-AC_INIT([lex5], [1.0])
-AC_CONFIG_AUX_DIR([.])
-AM_INIT_AUTOMAKE
-AC_CONFIG_FILES([Makefile])
+cat >> configure.in << 'END'
AC_PROG_CC
AM_PROG_CC_C_O
AM_PROG_LEX
}
END
-set -e
-
$ACLOCAL
$AUTOCONF
$AUTOMAKE -a
+# We expect ylwrap to be used and distributed even if there is
+# only one lexer.
+test -f ylwrap
+
mkdir sub
cd sub
../configure
$MAKE foo/foo.o
+ls -l # For debugging.
test -f foo/foo.c
test -f foo/foo.o
-# ylwrap is not needed
-test ! -f ./ylwrap
# Now, adds another lexer to test ylwrap.
$sleep
$AUTOMAKE -a --no-force
-test -f ./ylwrap
cd sub
+using_gnumake || $MAKE Makefile
$MAKE foo/foo2.o
+ls -l # For debugging.
test -f foo/foo2.c
test -f foo/foo2.o
-Exit 0
+:
#! /bin/sh
-# Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2010 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
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Test to make sure dependencies work with .ll files.
-# Test synthesized from PR automake/6.
+# Test to make sure Lex + C++ is supported.
+# Please keep this is sync with sister test yaccpp.test.
. ./defs || Exit 1
set -e
cat >> configure.in << 'END'
-AC_PROG_CC
AC_PROG_CXX
-AM_PROG_LEX
+AC_PROG_LEX
END
cat > Makefile.am << 'END'
-bin_PROGRAMS = zoo
-zoo_SOURCES = joe.ll
+bin_PROGRAMS = foo bar baz qux
+foo_SOURCES = foo.l++
+bar_SOURCES = bar.lpp
+baz_SOURCES = baz.ll
+qux_SOURCES = qux.lxx
END
-: > joe.ll
-
$ACLOCAL
$AUTOMAKE -a
-$FGREP joe.Po Makefile.in
+sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk
+$FGREP ' foo.c++ ' mk
+$FGREP ' bar.cpp ' mk
+$FGREP ' baz.cc ' mk
+$FGREP ' qux.cxx ' mk
+
+:
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2010, 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/>.
+
+# This test checks that dependent files are updated before including
+# in the distribution. `lexer.c' depends on `lexer.l'. The latter is
+# updated so that `lexer.c' should be rebuild. Then we are running
+# `make' and `make distdir' and check whether the version of `lexer.c'
+# to be distributed is up to date.
+
+# Please keep this in sync with sister test `yaccvapth.test'.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+cat > lexoutroot.in << 'END'
+LEX_OUTPUT_ROOT='@LEX_OUTPUT_ROOT@'
+END
+
+cat >> configure.in << 'END'
+AC_CONFIG_FILES([lexoutroot])
+AC_PROG_CC
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = lexer.l foo.c
+LDADD = $(LEXLIB)
+END
+
+# Original lexer, with a "foobar" comment
+cat > lexer.l << 'END'
+%%
+"END" return EOF;
+.
+%%
+/*foobar*/
+END
+
+cat > foo.c << 'END'
+int main () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir sub
+
+# We must run configure early, to find out why $LEX_OUTPUT_ROOT is.
+cd sub
+../configure
+. ./lexoutroot
+test -n "$LEX_OUTPUT_ROOT" # sanity check
+cd ..
+
+$LEX lexer.l
+mv "$LEX_OUTPUT_ROOT".c lexer.c
+
+cd sub
+
+# Ensure that lexer.l will be newer than lexer.c.
+$sleep
+
+# New lexer, with `fubar' comment.
+cat > ../lexer.l << 'END'
+%%
+"END" return EOF;
+.
+%%
+/*fubar*/
+END
+
+$MAKE
+$MAKE distdir
+$FGREP '/*fubar*/' $distdir/lexer.c
+
+#
+# Now check to make sure that `make dist' will rebuilt the parser.
+#
+
+# Ensure that lexer.l will be newer than lexer.c.
+$sleep
+
+# New lexer, with `maude' comment.
+cat > ../lexer.l << 'END'
+%%
+"END" return EOF;
+.
+%%
+/*maude*/
+END
+
+$MAKE distdir
+$FGREP '/*maude*/' $distdir/lexer.c
+
+:
+++ /dev/null
-#!/bin/sh
-# Copyright (C) 2010, 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 silent-rules mode for Lex, forcing gcc depmode.
-# Keep this in sync with sister test `silent-lex-generic.test'.
-
-required='flex gcc'
-. ./defs || Exit 1
-
-set -e
-
-mkdir sub
-
-cat >>configure.in <<'EOF'
-AM_SILENT_RULES
-AM_PROG_CC_C_O
-AC_PROG_LEX
-AC_CONFIG_FILES([sub/Makefile])
-AC_OUTPUT
-EOF
-
-cat > Makefile.am <<'EOF'
-# Need generic and non-generic rules.
-bin_PROGRAMS = foo1 foo2
-foo1_SOURCES = foo.l
-foo2_SOURCES = $(foo1_SOURCES)
-foo2_CFLAGS = $(AM_CFLAGS)
-SUBDIRS = sub
-LDADD = $(LEXLIB)
-EOF
-
-cat > sub/Makefile.am <<'EOF'
-AUTOMAKE_OPTIONS = subdir-objects
-# Need generic and non-generic rules.
-bin_PROGRAMS = bar1 bar2
-bar1_SOURCES = bar.l
-bar2_SOURCES = $(bar1_SOURCES)
-bar2_CFLAGS = $(AM_CFLAGS)
-LDADD = $(LEXLIB)
-EOF
-
-cat > foo.l <<'EOF'
-%%
-"END" return EOF;
-.
-%%
-/* Avoid possible link errors. */
-int yywrap (void) { return 1; }
-int main (void) { return 0; }
-EOF
-cp foo.l sub/bar.l
-
-$ACLOCAL
-$AUTOMAKE --add-missing
-$AUTOCONF
-
-# Force gcc ("fast") depmode.
-# This apparently useless "for" loop is here to simplify the syncing
-# with sister test `silent-lex-gcc.test'.
-for config_args in \
- am_cv_CC_dependencies_compiler_type=gcc
-do
- ./configure $config_args --enable-silent-rules
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- grep 'LEX .*foo\.' stdout
- grep 'LEX .*bar\.' stdout
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- # Don't look for LEX, as probably lex hasn't been re-run.
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Ensure a truly clean rebuild.
- $MAKE clean
- rm -f foo.c sub/bar.c
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- grep ' -c ' stdout
- grep ' -o ' stdout
- grep 'ylwrap ' stdout
-
- $EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- # Don't look for ylwrap, as probably lex hasn't been re-run.
- grep ' -c ' stdout
- grep ' -o ' stdout
-
- $EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
-
- # Ensure a truly clean reconfiguration/rebuild.
- $MAKE clean
- $MAKE maintainer-clean
- rm -f foo.c sub/bar.c
-
-done
-
-:
+++ /dev/null
-#!/bin/sh
-# Copyright (C) 2010, 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 silent-rules mode for Lex.
-# Keep this in sync with sister test `silent-lex-gcc.test'.
-
-required='flex'
-. ./defs || Exit 1
-
-set -e
-
-mkdir sub
-
-cat >>configure.in <<'EOF'
-AM_SILENT_RULES
-AM_PROG_CC_C_O
-AC_PROG_LEX
-AC_CONFIG_FILES([sub/Makefile])
-AC_OUTPUT
-EOF
-
-cat > Makefile.am <<'EOF'
-# Need generic and non-generic rules.
-bin_PROGRAMS = foo1 foo2
-foo1_SOURCES = foo.l
-foo2_SOURCES = $(foo1_SOURCES)
-foo2_CFLAGS = $(AM_CFLAGS)
-SUBDIRS = sub
-LDADD = $(LEXLIB)
-EOF
-
-cat > sub/Makefile.am <<'EOF'
-AUTOMAKE_OPTIONS = subdir-objects
-# Need generic and non-generic rules.
-bin_PROGRAMS = bar1 bar2
-bar1_SOURCES = bar.l
-bar2_SOURCES = $(bar1_SOURCES)
-bar2_CFLAGS = $(AM_CFLAGS)
-LDADD = $(LEXLIB)
-EOF
-
-cat > foo.l <<'EOF'
-%{
-/* avoid non-ANSI #include of unistd.h */
-#define YY_NO_UNISTD_H 1
-%}
-%%
-"END" return EOF;
-.
-%%
-/* Avoid possible link errors. */
-int yywrap (void) { return 1; }
-int main (void) { return 0; }
-EOF
-cp foo.l sub/bar.l
-
-$ACLOCAL
-$AUTOMAKE --add-missing
-$AUTOCONF
-
-# Force dependency tracking explicitly, so that slow dependency
-# extractors are not rejected. Try also with dependency tracking
-# explicitly disabled.
-for config_args in \
- --enable-dependency-tracking --disable-dependency-tracking
-do
- ./configure $config_args --enable-silent-rules
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- grep 'LEX .*foo\.' stdout
- grep 'LEX .*bar\.' stdout
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- # Don't look for LEX, as probably lex hasn't been re-run.
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Ensure a truly clean rebuild.
- $MAKE clean
- rm -f foo.c sub/bar.c
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- grep ' -c ' stdout
- grep ' -o ' stdout
- grep 'ylwrap ' stdout
-
- $EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- # Don't look for ylwrap, as probably lex hasn't been re-run.
- grep ' -c ' stdout
- grep ' -o ' stdout
-
- $EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
-
- # Ensure a truly clean reconfiguration/rebuild.
- $MAKE clean
- $MAKE maintainer-clean
- rm -f foo.c sub/bar.c
-
-done
-
-:
--- /dev/null
+#!/bin/sh
+# Copyright (C) 2010, 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 silent-rules mode for Lex.
+
+required=lex
+. ./defs || Exit 1
+
+set -e
+
+mkdir sub
+
+cat >>configure.in <<'EOF'
+AM_SILENT_RULES
+AM_PROG_CC_C_O
+AC_PROG_LEX
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo1 foo2
+foo1_SOURCES = foo.l
+foo2_SOURCES = $(foo1_SOURCES)
+foo2_LFLAGS = -n
+foo2_CFLAGS = $(AM_CFLAGS)
+SUBDIRS = sub
+LDADD = $(LEXLIB)
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = bar1 bar2
+bar1_SOURCES = bar.l
+bar2_SOURCES = $(bar1_SOURCES)
+bar2_LFLAGS = -n
+bar2_CFLAGS = $(AM_CFLAGS)
+LDADD = $(LEXLIB)
+EOF
+
+cat > foo.l <<'EOF'
+%%
+"END" return EOF;
+.
+%%
+/* Avoid possible link errors. */
+int yywrap (void) { return 1; }
+int main (void) { return 0; }
+EOF
+cp foo.l sub/bar.l
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Ensure per-target rules are used, to ensure their coverage below.
+$FGREP 'foo2-foo.c' Makefile.in || Exit 99
+$FGREP 'bar2-bar.c' sub/Makefile.in || Exit 99
+
+./configure --enable-silent-rules
+
+$MAKE >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+grep 'LEX .*foo\.' stdout
+grep 'LEX .*bar\.' stdout
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+$MAKE >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+# Don't look for LEX, as probably lex hasn't been re-run.
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Ensure a truly clean rebuild.
+$MAKE clean
+rm -f *foo.c sub/*bar.c
+
+$MAKE V=1 >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+grep 'ylwrap ' stdout
+
+$EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+$MAKE V=1 >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+# Don't look for ylwrap, as probably lex hasn't been re-run.
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
+
+:
# This test requires the GNU compilers; keep it in sync with sister test
# `silent-many-generic.test', which should work with generic compilers.
-required='gcc g++ gfortran flex bison'
+required='gcc g++ gfortran lex yacc'
. ./defs || Exit 1
set -e
# Avoids too much code duplication.
do_and_check_verbose_build ()
{
-
case $1 in
--rebuild) rebuild=true;;
*) rebuild=false;;
fo2_CPPFLAGS = $(AM_CPPFLAGS)
fo2_FFLAGS = $(AM_FFLAGS)
fo2_FCFLAGS = $(AM_FCFLAGS)
+fo2_YFLAGS = -v
+fo2_LFLAGS = -n
SUBDIRS = sub
AM_YFLAGS = -d
LDADD = $(LEXLIB)
ba2_CPPFLAGS = $(AM_CPPFLAGS)
ba2_FFLAGS = $(AM_FFLAGS)
ba2_FCFLAGS = $(AM_FCFLAGS)
+ba2_YFLAGS = -v
+ba2_LFLAGS = -n
AM_YFLAGS = -d
LDADD = $(LEXLIB)
BUILT_SOURCES = baz6.h
$AUTOMAKE --add-missing
$AUTOCONF
+# Ensure per-target rules are used, to ensure their coverage below.
+# (We do not do an exhaustive check, that wouldn't be practical).
+$FGREP 'bar-bar.o' Makefile.in
+$FGREP 'fo2-foo5.c' Makefile.in
+$FGREP 'fo2-foo6.c' Makefile.in
+
# Force gcc ("fast") depmode.
# This apparently useless "for" loop is here to simplify the syncing
# with sister test `silent-many-generic.test'.
$MAKE clean
# This is required, since these files are not removed by `make clean'
# (as dictated by the GNU Coding Standards).
- rm -f foo5.c foo6.[ch] sub/baz5.c sub/baz6.[ch]
+ rm -f *foo5.c *foo6.[ch] sub/*baz5.c sub/*baz6.[ch]
do_and_check_verbose_build
# Cleaning and then rebuilding with the same V flag (and without
# and forces the use of gcc depmode.
# FIXME: generic C++/Fortran compilers should suffice here
-required='g++ gfortran flex bison'
+required='g++ gfortran lex yacc'
. ./defs || Exit 1
set -e
# Avoids too much code duplication.
do_and_check_verbose_build ()
{
-
case $1 in
--rebuild) rebuild=true;;
*) rebuild=false;;
fo2_CPPFLAGS = $(AM_CPPFLAGS)
fo2_FFLAGS = $(AM_FFLAGS)
fo2_FCFLAGS = $(AM_FCFLAGS)
+fo2_YFLAGS = -v
+fo2_LFLAGS = -n
SUBDIRS = sub
AM_YFLAGS = -d
LDADD = $(LEXLIB)
ba2_CPPFLAGS = $(AM_CPPFLAGS)
ba2_FFLAGS = $(AM_FFLAGS)
ba2_FCFLAGS = $(AM_FCFLAGS)
+ba2_YFLAGS = -v
+ba2_LFLAGS = -n
AM_YFLAGS = -d
LDADD = $(LEXLIB)
BUILT_SOURCES = baz6.h
$AUTOMAKE --add-missing
$AUTOCONF
+# Ensure per-target rules are used, to ensure their coverage below.
+# (We do not do an exhaustive check, that wouldn't be practical).
+$FGREP 'bar-bar.o' Makefile.in
+$FGREP 'fo2-foo5.c' Makefile.in
+$FGREP 'fo2-foo6.c' Makefile.in
+
# Force dependency tracking explicitly, so that slow dependency
# extractors are not rejected. Try also with dependency tracking
# explicitly disabled.
$MAKE clean
# This is required, since these files are not removed by `make clean'
# (as dictated by the GNU Coding Standards).
- rm -f foo5.c foo6.[ch] sub/baz5.c sub/baz6.[ch]
+ rm -f *foo5.c *foo6.[ch] sub/*baz5.c sub/*baz6.[ch]
do_and_check_verbose_build
# Cleaning and then rebuilding with the same V flag (and without
+++ /dev/null
-#!/bin/sh
-# Copyright (C) 2010 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 silent-rules mode for Yacc, forcing gcc depmode.
-# Keep this in sync with sister test `silent-yacc-generic.test'.
-
-required='gcc bison'
-. ./defs || Exit 1
-
-set -e
-
-mkdir sub
-
-cat >>configure.in <<'EOF'
-AM_SILENT_RULES
-AM_PROG_CC_C_O
-AC_PROG_YACC
-AC_CONFIG_FILES([sub/Makefile])
-AC_OUTPUT
-EOF
-
-cat > Makefile.am <<'EOF'
-# Need generic and non-generic rules.
-bin_PROGRAMS = foo1 foo2
-foo1_SOURCES = foo.y
-foo2_SOURCES = $(foo1_SOURCES)
-foo2_CFLAGS = $(AM_CPPFLAGS)
-SUBDIRS = sub
-EOF
-
-cat > sub/Makefile.am <<'EOF'
-AUTOMAKE_OPTIONS = subdir-objects
-# Need generic and non-generic rules.
-bin_PROGRAMS = bar1 bar2
-bar1_SOURCES = bar.y
-bar2_SOURCES = $(bar1_SOURCES)
-bar2_CFLAGS = $(AM_CPPFLAGS)
-EOF
-
-cat > foo.y <<'EOF'
-%{
-void yyerror (char *s) {}
-int yylex (void) {return 0;}
-int main(void) {return 0;}
-%}
-%token EOF
-%%
-fubar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
-EOF
-cp foo.y sub/bar.y
-
-$ACLOCAL
-$AUTOMAKE --add-missing
-$AUTOCONF
-
-# Force gcc ("fast") depmode.
-# This apparently useless "for" loop is here to simplify the syncing
-# with sister test `silent-yacc-gcc.test'.
-for config_args in \
- am_cv_CC_dependencies_compiler_type=gcc
-do
- ./configure $config_args --enable-silent-rules
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- grep 'YACC .*foo\.' stdout
- grep 'YACC .*bar\.' stdout
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- # Don't look for YACC, as probably yacc hasn't been re-run.
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Ensure a truly clean rebuild.
- $MAKE clean
- rm -f foo.[ch] sub/bar.[ch]
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- grep ' -c ' stdout
- grep ' -o ' stdout
- grep 'ylwrap ' stdout
-
- $EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- # Don't look for ylwrap, as probably lex hasn't been re-run.
- grep ' -c ' stdout
- grep ' -o ' stdout
-
- $EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
-
- # Ensure a truly clean reconfiguration/rebuild.
- $MAKE clean
- $MAKE maintainer-clean
- rm -f foo.[ch] sub/bar.[ch]
-
-done
-
-:
+++ /dev/null
-#!/bin/sh
-# Copyright (C) 2010 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 silent-rules mode for Yacc.
-# Keep this in sync with sister test `silent-yacc-gcc.test'.
-
-required='bison'
-. ./defs || Exit 1
-
-set -e
-
-mkdir sub
-
-cat >>configure.in <<'EOF'
-AM_SILENT_RULES
-AM_PROG_CC_C_O
-AC_PROG_YACC
-AC_CONFIG_FILES([sub/Makefile])
-AC_OUTPUT
-EOF
-
-cat > Makefile.am <<'EOF'
-# Need generic and non-generic rules.
-bin_PROGRAMS = foo1 foo2
-foo1_SOURCES = foo.y
-foo2_SOURCES = $(foo1_SOURCES)
-foo2_CFLAGS = $(AM_CPPFLAGS)
-SUBDIRS = sub
-EOF
-
-cat > sub/Makefile.am <<'EOF'
-AUTOMAKE_OPTIONS = subdir-objects
-# Need generic and non-generic rules.
-bin_PROGRAMS = bar1 bar2
-bar1_SOURCES = bar.y
-bar2_SOURCES = $(bar1_SOURCES)
-bar2_CFLAGS = $(AM_CPPFLAGS)
-EOF
-
-cat > foo.y <<'EOF'
-%{
-void yyerror (char *s) {}
-int yylex (void) {return 0;}
-int main(void) {return 0;}
-%}
-%token EOF
-%%
-fubar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
-EOF
-cp foo.y sub/bar.y
-
-$ACLOCAL
-$AUTOMAKE --add-missing
-$AUTOCONF
-
-# Force dependency tracking explicitly, so that slow dependency
-# extractors are not rejected. Try also with dependency tracking
-# explicitly disabled.
-for config_args in \
- --enable-dependency-tracking --disable-dependency-tracking
-do
- ./configure $config_args --enable-silent-rules
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- grep 'YACC .*foo\.' stdout
- grep 'YACC .*bar\.' stdout
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- $EGREP ' (-c|-o)' stdout && Exit 1
- $EGREP '(mv|ylwrap) ' stdout && Exit 1
-
- # Don't look for YACC, as probably yacc hasn't been re-run.
- grep ' CC .*foo\.' stdout
- grep ' CC .*bar\.' stdout
- grep 'CCLD .*foo1' stdout
- grep 'CCLD .*bar1' stdout
- grep 'CCLD .*foo2' stdout
- grep 'CCLD .*bar2' stdout
-
- # Ensure a truly clean rebuild.
- $MAKE clean
- rm -f foo.[ch] sub/bar.[ch]
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- grep ' -c ' stdout
- grep ' -o ' stdout
- grep 'ylwrap ' stdout
-
- $EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
-
- # Cleaning and then rebuilding with the same V flag (and without
- # removing the generated sources in between) shouldn't trigger a
- # different set of rules.
- $MAKE clean
-
- $MAKE V=1 >stdout || { cat stdout; Exit 1; }
- cat stdout
-
- # Don't look for ylwrap, as probably lex hasn't been re-run.
- grep ' -c ' stdout
- grep ' -o ' stdout
-
- $EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
-
- # Ensure a truly clean reconfiguration/rebuild.
- $MAKE clean
- $MAKE maintainer-clean
- rm -f foo.[ch] sub/bar.[ch]
-
-done
-
-:
--- /dev/null
+#!/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 silent-rules mode for Yacc, when yacc-generated headers are
+# involved (i.e., the `-d' option is in *YFLAGS).
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+mkdir sub
+
+cat >>configure.in <<'EOF'
+AM_SILENT_RULES
+AC_PROG_YACC
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+AM_YFLAGS = -d
+bin_PROGRAMS = foo bar
+foo_SOURCES = parse.y
+bar_SOURCES = $(foo_SOURCES)
+bar_YFLAGS = $(AM_YFLAGS)
+EOF
+
+cat > parse.y <<'EOF'
+%{
+void yyerror (char *s) { return; }
+int yylex (void) { return 0; }
+int main (void) { return 0; }
+%}
+%token EOF
+%%
+fubar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
+EOF
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Check that the expected non-generic rules has been truly generated.
+# Otherwise, the coverage offered by this test will be weaker then
+# expected and planned.
+$FGREP 'bar-parse.c' Makefile.in
+$FGREP '$(bar_YFLAGS)' Makefile.in
+
+./configure --enable-silent-rules
+
+$MAKE >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-d|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+grep 'YACC *parse\.c' stdout
+grep 'updating *parse\.h' stdout
+grep 'YACC *bar-parse\.c' stdout
+grep 'updating *bar-parse\.h' stdout
+
+grep ' CC *parse\.' stdout
+grep ' CC *bar-parse\.' stdout
+grep 'CCLD *foo' stdout
+grep 'CCLD *bar' stdout
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+$MAKE parse.h bar-parse.h >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-d|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+grep 'YACC *parse\.c' stdout
+grep 'updating *parse\.h' stdout
+grep 'YACC *bar-parse\.c' stdout
+grep 'updating *bar-parse\.h' stdout
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+$MAKE >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-d|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+# Don't look for "YACC *.c" and "updating *.h", as yacc shouldn't
+# have been re-run.
+grep ' CC *parse\.' stdout
+grep ' CC *bar-parse\.' stdout
+grep 'CCLD *foo' stdout
+grep 'CCLD *bar' stdout
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+$MAKE parse.h bar-parse.h >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-d|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+grep 'YACC *parse\.c' stdout
+grep 'updating *parse\.h' stdout
+grep 'YACC *bar-parse\.c' stdout
+grep 'updating *bar-parse\.h' stdout
+
+# Ensure a truly clean rebuild.
+$MAKE maintainer-clean
+
+./configure --enable-silent-rules
+
+$MAKE V=1 >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+grep ' -d ' stdout
+grep 'ylwrap ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+$MAKE V=1 parse.h bar-parse.h >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+grep ' -d ' stdout
+grep 'ylwrap ' stdout
+
+grep 'YACC' stdout && Exit 1
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+$MAKE V=1 >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+# Don't look for ylwrap, as probably lex hasn't been re-run.
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+$MAKE V=1 parse.h bar-parse.h >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+grep ' -d ' stdout
+grep 'ylwrap ' stdout
+
+grep 'YACC' stdout && Exit 1
+
+:
--- /dev/null
+#!/bin/sh
+# Copyright (C) 2010, 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 silent-rules mode for Yacc.
+# Keep this in sync with sister test `silent-yacc-gcc.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+mkdir sub
+
+cat >>configure.in <<'EOF'
+AM_SILENT_RULES
+AM_PROG_CC_C_O
+AC_PROG_YACC
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo1 foo2
+foo1_SOURCES = foo.y
+foo2_SOURCES = $(foo1_SOURCES)
+foo2_YFLAGS = -v
+foo2_CFLAGS = $(AM_CPPFLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = bar1 bar2
+bar1_SOURCES = bar.y
+bar2_SOURCES = $(bar1_SOURCES)
+bar2_YFLAGS = -v
+bar2_CFLAGS = $(AM_CPPFLAGS)
+EOF
+
+cat > foo.y <<'EOF'
+%{
+void yyerror (char *s) { return; }
+int yylex (void) { return 0; }
+int main (void) { return 0; }
+%}
+%token EOF
+%%
+fubar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
+EOF
+cp foo.y sub/bar.y
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Ensure per-target rules are used, to ensure their coverage below.
+$FGREP 'foo2-foo.c' Makefile.in || Exit 99
+$FGREP 'bar2-bar.c' sub/Makefile.in || Exit 99
+
+./configure --enable-silent-rules
+
+$MAKE >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+grep 'YACC .*foo\.' stdout
+grep 'YACC .*bar\.' stdout
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+$MAKE >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+$EGREP ' (-c|-o)' stdout && Exit 1
+$EGREP '(mv|ylwrap) ' stdout && Exit 1
+
+# Don't look for YACC, as probably yacc hasn't been re-run.
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Ensure a truly clean rebuild.
+$MAKE clean
+rm -f *foo.[ch] sub/*bar.[ch]
+
+$MAKE V=1 >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+grep 'ylwrap ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+$MAKE V=1 >stdout || { cat stdout; Exit 1; }
+cat stdout
+
+# Don't look for ylwrap, as probably lex hasn't been re-run.
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && Exit 1
+
+:
#! /bin/sh
-# Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2004, 2006, 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
#! /bin/sh
-# Copyright (C) 2002, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2010, 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
# Make sure that derivations work with .lo too.
# (related to PR/37)
-required='libtoolize bison'
+required='libtoolize yacc'
. ./defs || Exit 1
set -e
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2010, 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/>.
+
+# Test to make sure ylwrap is put in right location.
+# Report from Tim Van Holder.
+
+. ./defs || Exit 1
+
+set -e
+
+mkdir aux1 sub
+
+cat > configure.in << END
+AC_INIT([$me], [1.0])
+# 'aux' is not an acceptable file/directory name on Windows systems
+AC_CONFIG_AUX_DIR([aux1])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_PROG_CC
+AC_PROG_YACC
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo
+AM_YFLAGS = -d
+foo_SOURCES = foo.y
+END
+
+cat > sub/Makefile.am << 'END'
+bin_PROGRAMS = bar
+AM_YFLAGS = -d
+bar_SOURCES = bar.y main.c
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+test -f aux1/ylwrap
+test ! -f ylwrap
+test ! -f sub/ylwrap
+grep -i 'ylwrap' Makefile.in sub/Makefile.in # For debugging.
+$FGREP '$(top_srcdir)/aux1/ylwrap' Makefile.in
+$FGREP '$(top_srcdir)/aux1/ylwrap' sub/Makefile.in
+
+:
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2010, 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/>.
+
+# Basic semantic checks on Yacc support (without yacc-generated headers).
+# Keep in sync with sister test `yacc-cxx.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = parse.y foo.c
+bar_SOURCES = $(foo_SOURCES)
+bar_YFLAGS = -v
+
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+
+cat > parse.y << 'END'
+%{
+#include <stdio.h>
+#include <stdlib.h>
+int yylex () { return getchar (); }
+void yyerror (char *s) {}
+%}
+%%
+a : 'a' { exit(0); };
+END
+
+cat > foo.c << 'END'
+int main () { yyparse (); return 1; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+ls -l
+# The Yacc-derived C sources must be created, and not removed once
+# compiled (i.e., not treated like "intermediate files" in the GNU
+# make sense).
+test -f parse.c
+test -f bar-parse.c
+# Check that per-object flags are honored.
+test -f bar-parse.output
+
+echo a | ./foo
+echo b | ./foo && Exit 1
+
+echo a | ./bar
+echo b | ./bar && Exit 1
+
+# The Yacc-derived C sources must be shipped.
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse\.c '
+$MAKE -s echo-distcom | grep '[ /]bar-parse\.c '
+$MAKE distdir
+ls -l $distdir
+test -f $distdir/parse.c
+test -f $distdir/bar-parse.c
+
+# Sanity check on distribution.
+# Note that, for this to succeed, bar-parse.output must either not
+# be distributed, or properly cleaned by automake-generated rules.
+# We don't want to set the exact semantics yet, but want to ensure
+# they are are consistent.
+$MAKE distcheck
+
+# Make sure that the Yacc-derived C sources are erased by
+# maintainer-clean, and not by distclean.
+test -f parse.c
+test -f bar-parse.c
+$MAKE distclean
+ls -l
+test -f parse.c
+test -f bar-parse.c
+./configure # we must re-create `Makefile'
+$MAKE maintainer-clean
+ls -l
+test ! -f parse.c
+test ! -f bar-parse.c
+
+:
--- /dev/null
+#! /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/>.
+
+# Test to make sure bison + bison's C++ skeleton + C++ works.
+# For Automake bug#7648 and PR automake/491.
+
+required=bison
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.yy foo.cc
+
+# This is required even with %defines in zardoz.yy.
+AM_YFLAGS = -d
+
+BUILT_SOURCES = zardoz.hh
+EXTRA_DIST = stack.hh location.hh position.hh
+END
+
+cat > zardoz.yy << 'END'
+%skeleton "lalr1.cc"
+%defines
+
+%{
+#define YYSTYPE int
+int yylex(YYSTYPE* yylval_param);
+%}
+
+%%
+start : /* empty */
+%%
+
+int
+yylex(YYSTYPE*)
+{
+ return 0;
+}
+
+void
+yy::parser::error(const yy::parser::location_type&, const std::string& m)
+{
+ return;
+}
+END
+
+cat > foo.cc << 'END'
+#include "zardoz.hh"
+
+using namespace std;
+
+int
+main(int argc, char** argv)
+{
+ yy::parser my_parser;
+ return my_parser.parse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try a VPATH build first.
+mkdir build
+cd build
+../configure YACC='bison -y'
+$MAKE
+cd ..
+
+# Now try an in-tree build.
+./configure YACC='bison -y'
+$MAKE
+
+# Check that distribution is self-contained, and do not require
+# bison to be built.
+env YACC=false DISTCHECK_CONFIGURE_FLAGS='YACC=false' $MAKE -e distcheck
+
+:
--- /dev/null
+#! /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/>.
+
+# Test to make sure bison + bison's skeleton works.
+# For Automake bug#7648 and PR automake/491.
+
+required=bison
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.y foo.c
+AM_YFLAGS = -d --skeleton glr.c
+END
+
+# Parser.
+cat > zardoz.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (const char *s) { return; }
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cat > foo.c << 'END'
+#include "zardoz.h"
+int main (void)
+{
+ return yyparse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try a VPATH build first.
+mkdir build
+cd build
+../configure YACC='bison -y'
+$MAKE
+cd ..
+
+# Now try an in-tree build.
+./configure YACC='bison -y'
+$MAKE
+
+# Check that distribution is self-contained, and do not require
+# bison to be built.
+env YACC=false DISTCHECK_CONFIGURE_FLAGS='YACC=false' $MAKE -e distcheck
+
+:
--- /dev/null
+#! /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 C++ source and header files derived from non-distributed
+# Yacc sources are cleaned by "make clean", while C++ source and
+# header files derived from distributed Yacc sources are cleaned by
+# "make maintainer-clean".
+# See also sister test `yacc-clean.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# Use two subdirectories, one to test with `-d' in YFLAGS, the
+# other one to test with empty YFLAGS.
+SUBDIRS = sub1 sub2
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = mainfoo.cc parsefoo.yxx
+
+bar_SOURCES = mainbar.cpp parsebar.yy
+bar_YFLAGS = $(AM_YFLAGS)
+
+baz_SOURCES = mainbaz.c++
+nodist_baz_SOURCES = parsebaz.y++
+
+qux_SOURCES = mainqux.cxx
+nodist_qux_SOURCES = parsequx.ypp
+qux_YFLAGS = $(AM_YFLAGS)
+
+parsebaz.y++ parsequx.ypp:
+ cp $(srcdir)/parsefoo.yxx $@
+
+CLEANFILES = parsebaz.y++ parsequx.ypp
+END
+
+cat > sub2/Makefile.am << 'END'
+include $(top_srcdir)/sub1/Makefile.am
+AM_YFLAGS = -d
+END
+
+cat > sub1/parsefoo.yxx << 'END'
+%{
+// This file should contain valid C++ but invalid C.
+#include <cstdio>
+int yylex (void) { return (getchar ()); }
+void yyerror (const char *s) { return; }
+%}
+%%
+x : 'x' { };
+END
+cp sub1/parsefoo.yxx sub1/parsebar.yy
+cp sub1/parsefoo.yxx sub2/parsefoo.yxx
+cp sub1/parsefoo.yxx sub2/parsebar.yy
+
+cat > sub1/mainfoo.cc << 'END'
+// This file should contain valid C++ but invalid C.
+using namespace std;
+int main (int argc, char **argv)
+{
+ extern int yyparse (void);
+ return yyparse ();
+}
+END
+cp sub1/mainfoo.cc sub1/mainbar.cpp
+cp sub1/mainfoo.cc sub1/mainbaz.c++
+cp sub1/mainfoo.cc sub1/mainqux.cxx
+cp sub1/main???.c* sub2
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l . sub1 sub2
+# Sanity checks.
+test -f sub1/parsefoo.cxx
+test -f sub1/bar-parsebar.cc
+test -f sub1/parsebaz.y++
+test -f sub1/parsebaz.c++
+test -f sub1/parsequx.ypp
+test -f sub1/qux-parsequx.cpp
+test -f sub2/parsefoo.cxx
+test -f sub2/parsefoo.hxx
+test -f sub2/bar-parsebar.cc
+test -f sub2/bar-parsebar.hh
+test -f sub2/parsebaz.y++
+test -f sub2/parsebaz.c++
+test -f sub2/parsebaz.h++
+test -f sub2/parsequx.ypp
+test -f sub2/qux-parsequx.cpp
+test -f sub2/qux-parsequx.hpp
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l . sub1 sub2
+ test -f sub1/parsefoo.cxx
+ test -f sub1/bar-parsebar.cc
+ test ! -r sub1/parsebaz.y++
+ test ! -r sub1/parsebaz.c++
+ test ! -r sub1/parsequx.ypp
+ test ! -r sub1/qux-parsequx.cpp
+ test -f sub2/parsefoo.cxx
+ test -f sub2/parsefoo.hxx
+ test -f sub2/bar-parsebar.cc
+ test -f sub2/bar-parsebar.hh
+ test ! -r sub2/parsebaz.y++
+ test ! -r sub2/parsebaz.c++
+ test ! -r sub2/parsebaz.h++
+ test ! -r sub2/parsequx.ypp
+ test ! -r sub2/qux-parsequx.cpp
+ test ! -r sub2/qux-parsequx.hpp
+done
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+$MAKE maintainer-clean
+ls -l . sub1 sub2
+test -f sub1/parsefoo.yxx
+test -f sub1/parsebar.yy
+test ! -r sub1/parsefoo.cxx
+test ! -r sub1/bar-parsebar.cc
+test -f sub2/parsefoo.yxx
+test -f sub2/parsebar.yy
+test ! -r sub2/parsefoo.cxx
+test ! -r sub2/parsefoo.hxx
+test ! -r sub2/bar-parsebar.cc
+test ! -r sub2/bar-parsebar.hh
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+:
--- /dev/null
+#! /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 .c and .h files derived from non-distributed .y sources
+# are cleaned by "make clean", while .c and .h files derived from
+# distributed .y sources are cleaned by "make maintainer-clean".
+# See also sister test `yacc-cxx-clean.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# Use two subdirectories, one to test with `-d' in YFLAGS, the
+# other one to test with empty YFLAGS.
+SUBDIRS = sub1 sub2
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = main.c parse.y
+
+bar_SOURCES = main.c parse.y
+bar_YFLAGS = $(AM_YFLAGS)
+
+baz_SOURCES = main.c
+nodist_baz_SOURCES = baz.y
+
+qux_SOURCES = main.c
+nodist_qux_SOURCES = baz.y
+qux_YFLAGS = $(AM_YFLAGS)
+
+baz.y:
+ cp $(srcdir)/parse.y $@
+
+CLEANFILES = baz.y
+END
+
+cat > sub2/Makefile.am << 'END'
+include $(top_srcdir)/sub1/Makefile.am
+AM_YFLAGS = -d
+END
+
+cat > sub1/parse.y << 'END'
+%{
+int yylex () { return (getchar ()); }
+void yyerror (char *s) {}
+%}
+%%
+x : 'x' { };
+END
+cp sub1/parse.y sub2/parse.y
+
+cat > sub1/main.c << 'END'
+int main ()
+{
+ return yyparse ();
+}
+END
+cp sub1/main.c sub2/main.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l . sub1 sub2
+# Sanity checks.
+test -f sub1/parse.y
+test -f sub1/parse.c
+test -f sub1/bar-parse.c
+test -f sub1/baz.y
+test -f sub1/baz.c
+test -f sub1/qux-baz.c
+test -f sub2/parse.y
+test -f sub2/parse.c
+test -f sub2/parse.h
+test -f sub2/bar-parse.c
+test -f sub2/bar-parse.h
+test -f sub2/baz.y
+test -f sub2/baz.c
+test -f sub2/baz.h
+test -f sub2/qux-baz.c
+test -f sub2/qux-baz.h
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l . sub1 sub2
+ test -f sub1/parse.y
+ test -f sub1/parse.c
+ test -f sub1/bar-parse.c
+ test ! -r sub1/baz.y
+ test ! -r sub1/baz.c
+ test ! -r sub1/qux-baz.c
+ test -f sub2/parse.y
+ test -f sub2/parse.c
+ test -f sub2/parse.h
+ test -f sub2/bar-parse.c
+ test -f sub2/bar-parse.h
+ test ! -r sub2/baz.y
+ test ! -r sub2/baz.c
+ test ! -r sub2/baz.h
+ test ! -r sub2/qux-baz.c
+ test ! -r sub2/qux-baz.h
+done
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+$MAKE maintainer-clean
+ls -l . sub1 sub2
+test -f sub1/parse.y
+test ! -r sub1/parse.c
+test ! -r sub1/bar-parse.c
+test -f sub2/parse.y
+test ! -r sub2/parse.c
+test ! -r sub2/parse.h
+test ! -r sub2/bar-parse.c
+test ! -r sub2/bar-parse.h
+
+:
--- /dev/null
+#! /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/>.
+
+# Basic semantic checks on Yacc + C++ support (when yacc-generated
+# headers are not involved).
+# Keep in sync with sister test `yacc-basic.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo1 foo2 foo3 foo4
+foo1_SOURCES = parse1.yy foo.cc
+foo2_SOURCES = parse2.y++ bar.c++
+foo3_SOURCES = parse3.yxx foo.cc
+foo4_SOURCES = parse4.ypp bar2.cxx
+foo3_YFLAGS = -v
+foo4_YFLAGS = $(foo3_YFLAGS)
+
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+
+cat > parse1.yy << 'END'
+%{
+// Valid C++, but deliberately invalid C.
+#include <cstdio>
+#include <cstdlib>
+int yylex (void) { return getchar (); }
+void yyerror (const char *s) { return; }
+%}
+%%
+a : 'a' { exit(0); };
+END
+cp parse1.yy parse2.y++
+cp parse1.yy parse3.yxx
+cp parse1.yy parse4.ypp
+
+cat > foo.cc << 'END'
+// Valid C++, but deliberately invalid C.
+using namespace std;
+int main (int argc, char **argv)
+{
+ int yyparse (void);
+ yyparse ();
+ return 1;
+}
+END
+cp foo.cc bar.c++
+cp foo.cc bar2.cxx
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE
+
+# The Yacc-derived C++ sources must be created, and not removed once
+# compiled (i.e., not treated like "intermediate files" in the GNU
+# make sense).
+test -f parse1.cc
+test -f parse2.c++
+test -f foo3-parse3.cxx
+test -f foo4-parse4.cpp
+# Check that per-object flags are honored.
+test -f foo3-parse3.output
+test -f foo4-parse4.output
+
+for i in 1 2 3 4; do
+ echo a | ./foo$i
+ echo b | ./foo$i && Exit 1
+done
+
+# The Yacc-derived C++ sources must be shipped.
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse1\.cc '
+$MAKE -s echo-distcom | grep '[ /]parse2\.c++ '
+$MAKE -s echo-distcom | grep '[ /]foo3-parse3\.cxx '
+$MAKE -s echo-distcom | grep '[ /]foo4-parse4\.cpp '
+$MAKE distdir
+ls -l $distdir
+test -f $distdir/parse1.cc
+test -f $distdir/parse2.c++
+test -f $distdir/foo3-parse3.cxx
+test -f $distdir/foo4-parse4.cpp
+
+# Sanity check on distribution.
+# Note that, for this to succeed, foo3-parse3.output and foo4-parse4.output
+# must either not be distributed, or properly cleaned by automake-generated
+# rules. We don't want to set the exact semantics yet, but want to ensure
+# they are are consistent.
+$MAKE distcheck
+
+# Make sure that the Yacc-derived C++ sources are erased by
+# maintainer-clean, and not by distclean.
+test -f parse1.cc
+test -f parse2.c++
+test -f foo3-parse3.cxx
+test -f foo4-parse4.cpp
+$MAKE distclean
+ls -l
+test -f parse1.cc
+test -f parse2.c++
+test -f foo3-parse3.cxx
+test -f foo4-parse4.cpp
+./configure # we must re-create `Makefile'
+$MAKE maintainer-clean
+ls -l
+test ! -f parse1.cc
+test ! -f parse2.c++
+test ! -f foo3-parse3.cxx
+test ! -f foo4-parse4.cpp
+
+:
--- /dev/null
+#! /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/>.
+
+# Tests Yacc support with yacc-generated headers
+# (i.e., '-d' in *YFLAGS).
+# Keep in sync with sister test `yacc-d-cxx.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_CONFIG_FILES([foo/Makefile bar/Makefile baz/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = foo bar baz
+END
+
+mkdir foo bar baz
+
+cat > foo/Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parse.y main.c
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+cp foo/Makefile.am bar/Makefile.am
+cp foo/Makefile.am baz/Makefile.am
+
+cat > foo/parse.y << 'END'
+%{
+#include "parse.h"
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+x : 'x' {};
+%%
+END
+cp foo/parse.y bar/parse.y
+
+cat > foo/main.c << 'END'
+#include "parse.h"
+int main ()
+{
+ return yyparse ();
+}
+END
+cp foo/main.c bar/main.c
+
+# Even the generated header file is renamed when target-specific YFLAGS
+# are used. This might not be the best behavior, but it has been in
+# place for quite a long time, so just go along with it for now.
+sed 's/"parse\.h"/"zardoz-parse.h"/' foo/parse.y > baz/parse.y
+sed 's/"parse\.h"/"zardoz-parse.h"/' foo/main.c > baz/main.c
+
+$ACLOCAL
+$AUTOCONF
+
+$AUTOMAKE -a
+$FGREP parse.h foo/Makefile.in bar/Makefile.in baz/Makefile.in && Exit 1
+
+cat >> foo/Makefile.am <<END
+BUILT_SOURCES = parse.h
+YFLAGS=\
+-d
+END
+$AUTOMAKE -Wno-gnu foo/Makefile
+
+sed 's/EOL$//' >> bar/Makefile.am <<END
+AM_YFLAGS${tab}= -d EOL
+BUILT_SOURCES = parse.h
+END
+$AUTOMAKE bar/Makefile
+
+cat >> baz/Makefile.am <<END
+BUILT_SOURCES = zardoz-parse.h
+zardoz_YFLAGS =-d${tab}
+END
+$AUTOMAKE baz/Makefile
+
+./configure
+
+$MAKE
+
+test -f foo/parse.c
+test -f foo/parse.h
+test -f bar/parse.c
+test -f bar/parse.h
+test -f baz/zardoz-parse.c
+test -f baz/zardoz-parse.h
+
+# The generated C source and header files must be shipped.
+for dir in foo bar; do
+ cd $dir
+ $MAKE echo-distcom
+ $MAKE -s echo-distcom | grep '[ /]parse.c '
+ $MAKE -s echo-distcom | grep '[ /]parse.h '
+ cd ..
+done
+cd baz
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]zardoz-parse.c '
+$MAKE -s echo-distcom | grep '[ /]zardoz-parse.h '
+cd ..
+
+$MAKE distdir
+ls -l $distdir
+test -f $distdir/foo/parse.c
+test -f $distdir/foo/parse.h
+test -f $distdir/bar/parse.c
+test -f $distdir/bar/parse.h
+test -f $distdir/baz/zardoz-parse.c
+test -f $distdir/baz/zardoz-parse.h
+
+# Sanity check the distribution.
+$MAKE distcheck
+
+# While we are at it, make sure that `parse.c' and `parse.h' are erased
+# by maintainer-clean, and not by distclean.
+$MAKE distclean
+test -f foo/parse.c
+test -f foo/parse.h
+test -f bar/parse.c
+test -f bar/parse.h
+test -f baz/zardoz-parse.c
+test -f baz/zardoz-parse.h
+./configure # We must re-create `Makefile'.
+$MAKE maintainer-clean
+test ! -f foo/parse.c
+test ! -f foo/parse.h
+test ! -f bar/parse.c
+test ! -f bar/parse.h
+test ! -f baz/zardoz-parse.c
+test ! -f baz/zardoz-parse.h
+
+:
--- /dev/null
+#! /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/>.
+
+# Various tests on Yacc/C++ support with yacc-generated headers
+# (i.e., '-d' in *YFLAGS).
+# Keep in sync with sister test `yacc-d-basic.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+write_parse ()
+{
+ header=$1
+ sed 's/^ *//' <<END
+ %{
+ // Valid C++, but deliberately invalid C.
+ #include <cstdlib>
+ #include "$header"
+ int yylex (void) { return 0; }
+ void yyerror (const char *s) {}
+ %}
+ %%
+ x : 'x' {};
+ %%
+END
+}
+
+write_main ()
+{
+ header=$1
+ sed 's/^ *//' <<END
+ // Valid C++, but deliberately invalid C.
+ #include <cstdio>
+ #include "$header"
+ int main (int argc, char **argv)
+ {
+ int yyparse (void);
+ return yyparse ();
+ }
+END
+}
+
+cat >> configure.in << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_CONFIG_FILES([foo/Makefile bar/Makefile baz/Makefile qux/Makefile])
+AC_OUTPUT
+END
+
+mkdir foo bar baz qux baz/sub
+
+# These makefiles will be extended later.
+cat > Makefile.am <<'END'
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+cp Makefile.am foo/Makefile.am
+cp Makefile.am bar/Makefile.am
+cp Makefile.am baz/Makefile.am
+cp Makefile.am qux/Makefile.am
+
+cat >> Makefile.am <<'END'
+SUBDIRS = foo bar baz qux
+END
+
+$ACLOCAL
+$AUTOCONF
+
+cp $testsrcdir/../lib/ylwrap .
+
+$AUTOMAKE Makefile
+
+# Try with -d in $(YFLAGS) (don't do this in real life!).
+cat >> foo/Makefile.am <<END
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parse.yy main.cc
+BUILT_SOURCES = parse.hh
+YFLAGS=\
+-d
+END
+
+$AUTOMAKE -Wno-gnu foo/Makefile
+
+write_parse parse.hh > foo/parse.yy
+write_main parse.hh > foo/main.cc
+
+# Try with -d in $(AM_YFLAGS).
+cat >> bar/Makefile.am <<END
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parse.ypp main.cpp
+BUILT_SOURCES = parse.hpp
+AM_YFLAGS${tab}= -d ${tab}
+END
+
+$AUTOMAKE bar/Makefile
+
+write_parse parse.hpp > bar/parse.ypp
+write_main parse.hpp > bar/main.cpp
+
+# Try with -d in $(AM_YFLAGS), and a subdir parser.
+cat >> baz/Makefile.am <<END
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = joe
+joe_SOURCES = sub/parse.y++ sub/main.c++
+BUILT_SOURCES = sub/parse.h++
+AM_YFLAGS = \
+${tab}-d
+END
+
+$AUTOMAKE baz/Makefile
+
+write_parse sub/parse.h++ > baz/sub/parse.y++
+write_main sub/parse.h++ > baz/sub/main.c++
+
+# Try with -d in $(xxx_YFLAGS) (per-object flag).
+cat >> qux/Makefile.am <<END
+bin_PROGRAMS = maude
+maude_SOURCES = parse.yxx main.cxx
+maude_YFLAGS=${tab} -d${tab}
+BUILT_SOURCES = maude-parse.hxx
+END
+
+$AUTOMAKE qux/Makefile
+
+write_parse maude-parse.hxx > qux/parse.yxx
+write_main maude-parse.hxx > qux/main.cxx
+
+./configure
+
+$MAKE
+ls -l . foo bar baz baz/sub qux # For debugging.
+
+test -f foo/parse.cc
+test -f foo/parse.hh
+test -f bar/parse.cpp
+test -f bar/parse.hpp
+test -f baz/sub/parse.c++
+test -f baz/sub/parse.h++
+test -f qux/maude-parse.cxx
+test -f qux/maude-parse.hxx
+
+# The ylwrap script must be shipped.
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]ylwrap '
+
+# The generated C++ source and header files must be shipped.
+cd foo
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse\.cc '
+$MAKE -s echo-distcom | grep '[ /]parse\.hh '
+cd ..
+cd bar
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse\.cpp '
+$MAKE -s echo-distcom | grep '[ /]parse\.hpp '
+cd ..
+cd baz
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]sub/parse\.c++ '
+$MAKE -s echo-distcom | grep '[ /]sub/parse\.h++ '
+cd ..
+cd qux
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]maude-parse\.cxx '
+$MAKE -s echo-distcom | grep '[ /]maude-parse\.hxx '
+cd ..
+
+$MAKE distdir
+find $distdir # For debugging.
+
+test -f $distdir/ylwrap
+test -f $distdir/foo/parse.cc
+test -f $distdir/foo/parse.hh
+test -f $distdir/bar/parse.cpp
+test -f $distdir/bar/parse.hpp
+test -f $distdir/baz/sub/parse.c++
+test -f $distdir/baz/sub/parse.h++
+test -f $distdir/qux/maude-parse.cxx
+test -f $distdir/qux/maude-parse.hxx
+
+# The Yacc-derived C++ sources must be created, and not removed once
+# compiled (i.e., not treated like "intermediate files" in the GNU
+# make sense).
+$MAKE distcheck
+
+# Check that we can recover from deleted headers.
+$MAKE clean
+rm -f foo/parse.hh bar/parse.hpp baz/sub/parse.h++ qux/maude-parse.hxx
+$MAKE
+test -f foo/parse.hh
+test -f bar/parse.hpp
+test -f baz/sub/parse.h++
+test -f qux/maude-parse.hxx
+
+# Make sure that the Yacc-derived C++ sources are erased by
+# maintainer-clean, and not by distclean.
+$MAKE distclean
+test -f foo/parse.cc
+test -f foo/parse.hh
+test -f bar/parse.cpp
+test -f bar/parse.hpp
+test -f baz/sub/parse.c++
+test -f baz/sub/parse.h++
+test -f qux/maude-parse.cxx
+test -f qux/maude-parse.hxx
+./configure # We must re-create `Makefile'.
+$MAKE maintainer-clean
+test ! -f foo/parse.cc
+test ! -f foo/parse.hh
+test ! -f bar/parse.cpp
+test ! -f bar/parse.hpp
+test ! -f baz/sub/parse.c++
+test ! -f baz/sub/parse.h++
+test ! -f qux/maude-parse.cxx
+test ! -f qux/maude-parse.hxx
+
+:
--- /dev/null
+#! /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/>.
+
+# This test checks that dependent files are updated before including
+# in the distribution. `parse.c' depends on `parse.y'. The latter is
+# updated so that `parse.c' should be rebuilt. Then we are running
+# `make' and `make distdir' and check whether the version of `parse.c'
+# to be distributed is up to date.
+
+# Please keep this in sync with sister test `yaccvpath.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = parse.y foo.c
+AM_YFLAGS = -d
+END
+
+# Original parser, with `foobar'
+cat > parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%token FOOBAR
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cat > foo.c << 'END'
+#include "parse.h"
+int main () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+$YACC -d parse.y
+mv y.tab.c parse.c
+mv y.tab.h parse.h
+# Sanity checks.
+grep foobar parse.c
+grep FOOBAR parse.h
+
+mkdir sub
+cd sub
+../configure
+
+$sleep
+
+# New parser, with `fubar'
+cat > ../parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%token FUBAR
+%%
+fubar : 'f' 'u' 'b' 'a' 'r' {};
+END
+
+$MAKE
+$MAKE distdir
+$FGREP fubar $distdir/parse.c
+$FGREP FUBAR $distdir/parse.h
+
+# Now check to make sure that `make dist' will rebuild the parser.
+
+$sleep
+
+# New parser, with `maude'
+cat > ../parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%token MAUDE
+%%
+maude : 'm' 'a' 'u' 'd' 'e' {};
+END
+
+$MAKE distdir
+$FGREP maude $distdir/parse.c
+$FGREP MAUDE $distdir/parse.h
+
+:
--- /dev/null
+#! /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/>.
+
+# Tests that we can recover from deleted headers generated by `yacc -d'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = p1 p2 p3 p4
+# The order in which files are listed in the p*_SOURCES variables
+# below is significant, since it causes make failures whenever
+# the proper definition of BUILT_SOURCES or the declaration of
+# extra dependencies for `main3.o' are removed.
+p1_SOURCES = main1.c parse1.y
+p2_SOURCES = main2.c parse2.y
+p3_SOURCES = main3.c parse3.y parse3.h
+p4_SOURCES = parse4.y
+AM_YFLAGS = -d
+p2_YFLAGS = -d
+
+BUILT_SOURCES = parse1.h p2-parse2.h
+
+# When we know which files include a yacc-generated header, we
+# should be able to just declare dependencies directly instead
+# of relying on the BUILT_SOURCES hack, and things should still
+# work correctly.
+main3.@OBJEXT@: parse3.h
+
+.PHONY: clean-p3 build-p3
+build-p3: p3$(EXEEXT)
+clean-p3:
+ rm -f p3$(EXEEXT)
+END
+
+cat > parse1.y << 'END'
+%{
+#include "parse1.h"
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%token ZARDOZ
+%%
+x : 'x' {};
+%%
+END
+
+cat > main1.c << 'END'
+#include "parse1.h"
+int main (void)
+{
+ return ZARDOZ + yyparse ();
+}
+END
+
+sed 's/"parse1\.h"/"p2-parse2.h"/' parse1.y > parse2.y
+sed 's/"parse1\.h"/"p2-parse2.h"/' main1.c > main2.c
+
+sed 's/"parse1\.h"/"parse3.h"/' parse1.y > parse3.y
+sed 's/"parse1\.h"/"parse3.h"/' main1.c > main3.c
+
+cat > parse4.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%%
+x : 'x' {};
+%%
+int main (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+headers='parse1.h p2-parse2.h parse3.h parse4.h'
+
+# Check that we remake only the necessary headers.
+
+rm -f $headers
+$MAKE parse1.h
+test -f parse1.h
+test ! -r p2-parse2.h
+test ! -r parse3.h
+test ! -r parse4.h
+
+rm -f $headers
+$MAKE p2-parse2.h
+test ! -r parse1.h
+test -f p2-parse2.h
+test ! -r parse3.h
+test ! -r parse4.h
+
+rm -f $headers
+$MAKE parse3.h
+test ! -r parse1.h
+test ! -r p2-parse2.h
+test -f parse3.h
+test ! -r parse4.h
+# Since we declared parse3.h into $(p3_SOURCES), make should be
+# able to rebuild it automatically before remaking `p3'.
+rm -f $headers
+$MAKE clean-p3
+test ! -f parse3.h # Sanity check.
+$MAKE build-p3
+test -f parse3.h
+
+$MAKE
+
+rm -f $headers
+$MAKE parse4.h
+test ! -r parse1.h
+test ! -r p2-parse2.h
+test ! -r parse3.h
+test -f parse4.h
+
+# Now remake all the headers together.
+
+rm -f $headers
+$MAKE $headers
+test -f parse1.h
+test -f p2-parse2.h
+test -f parse3.h
+test -f parse4.h
+
+# Most headers should be remade by "make all".
+
+rm -f $headers
+$MAKE all
+test -f parse1.h
+test -f p2-parse2.h
+test -f parse3.h
+# parse4.h is not declared in any *_SOURCES variable, nor #included
+# by any C source file, so it shouldn't be rebuilt by "make all".
+test ! -r parse4.h
+
+:
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2010, 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/>.
+
+# Make sure depcomp does not needlessly update headers for yacc rules.
+# Report from Paolo Bonzini.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+AM_YFLAGS = -d
+foo_SOURCES = foo.y main.c
+BUILT_SOURCES = foo.h
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%token TOKEN
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+
+cat > main.c << 'END'
+#include "foo.h"
+int main(void)
+{
+ return yyparse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+$MAKE
+ls -l # For debugging.
+
+# Make sure foo.h is not updated if not really needed.
+$sleep
+: > my-timestamp
+$sleep
+touch foo.y
+$MAKE
+stat my-timestamp foo.* || : # For debugging.
+is_newest my-timestamp foo.h
+
+# Make sure foo.h is updated if needed.
+$sleep
+sed 's/TOKEN/TEKON/g' foo.y > t
+mv -f t foo.y
+$MAKE
+stat my-timestamp foo.* || : # For debugging.
+is_newest foo.h my-timestamp
+
+:
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2010, 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/>.
+
+# Make sure depcomp does not needlessly update headers and objects
+# for yacc rules. This test still fails with FreeBSD make (but passes
+# with NetBSD make).
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+AM_YFLAGS = -d
+foo_SOURCES = foo.y main.c
+BUILT_SOURCES = foo.h
+.PHONY: debug-info test-time-unchanged test-time-changed
+debug-info:
+ ls -l
+ stat *.[ch] *.$(OBJEXT) my-timestamp || :
+test-time-unchanged: debug-info
+ test `ls -1t main.$(OBJEXT) my-timestamp | sed 1q` = my-timestamp
+test-time-changed: debug-info
+ test `ls -1t main.$(OBJEXT) my-timestamp | sed 1q` = main.$(OBJEXT)
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%token TOKEN
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+
+cat > main.c << 'END'
+#include "foo.h"
+int main(void)
+{
+ return yyparse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+$MAKE
+ls -l # For debugging.
+
+$sleep
+: > my-timestamp
+$sleep
+touch foo.y
+$MAKE
+$MAKE test-time-unchanged
+$sleep
+sed 's/TOKEN/TEKON/g' foo.y > t
+mv -f t foo.y
+$MAKE
+$MAKE test-time-changed
+
+:
set -e
-distdir=$me-1.0
-
cat >> configure.in << 'END'
AC_PROG_CC
AM_PROG_CC_C_O
--- /dev/null
+#! /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 distributed Yacc-generated parsers are not uselessly
+# remade from an unpacked distributed tarball.
+# See automake bug#7884.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foobar zardoz
+foobar_SOURCES = parse.y main.c
+zardoz_SOURCES = $(foobar_SOURCES)
+zardoz_YFLAGS = -d
+END
+
+cat > parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cat > main.c << 'END'
+int main () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+$MAKE distdir
+chmod -R a-w $distdir
+
+mkdir bin
+cat > bin/yacc <<'END'
+#!/bin/sh
+echo "$0 invoked, shouldn't happen!" >&2
+exit 1
+END
+cp bin/yacc bin/bison
+chmod a+x bin/yacc bin/bison
+PATH=`pwd`/bin$PATH_SEPARATOR$PATH
+
+YACC=yacc BISON=bison
+export YACC BISON
+
+mkdir build
+cd build
+../$distdir/configure
+$MAKE
+
+# Sanity check.
+chmod u+w ../$distdir
+rm -f ../$distdir/parse.c
+chmod a-w ../$distdir
+$MAKE >out 2>&1 && { cat out; Exit 1; }
+cat out
+$FGREP parse.c out
+
+:
--- /dev/null
+#! /bin/sh
+# Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2010, 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 automake yacc support ensures that yacc-generated C
+# files use correct "#line" directives. Try also with the
+# `subdir-object' option enabled.
+# See also sister test `lex-line.test'.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+mkdir dir sub sub/dir
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo bar
+AM_YFLAGS = -d
+bar_YFLAGS =
+foo_SOURCES = zardoz.y
+bar_SOURCES = dir/quux.y
+## Avoid spurious failures with Solaris make.
+zardoz.@OBJEXT@: zardoz.c
+bar-quux.@OBJEXT@: bar-quux.c
+END
+
+cat > sub/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_PROGRAMS = foo bar
+foo_YFLAGS = -d
+foo_SOURCES = zardoz.y
+bar_SOURCES = dir/quux.y
+## Avoid spurious failures with Solaris make.
+foo-zardoz.@OBJEXT@: foo-zardoz.c
+dir/quux.@OBJEXT@: dir/quux.c
+END
+
+cat > zardoz.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%%
+x : 'x' {};
+%%
+int main(void)
+{
+ return yyparse ();
+}
+END
+
+cp zardoz.y dir/quux.y
+cp zardoz.y sub/zardoz.y
+cp zardoz.y sub/dir/quux.y
+
+c_outputs='zardoz.c bar-quux.c sub/foo-zardoz.c sub/dir/quux.c'
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE
+
+ # For debugging,
+ ls -l . sub sub/dir
+ $FGREP '.y' $c_outputs
+
+ # Adjusted "#line" should not contain reference to the builddir.
+ $EGREP '#.*line.*(build|\.\.).*\.y' $c_outputs && Exit 1
+ # Adjusted "#line" should not contain reference to the default
+ # output file names, e.g., `y.tab.c' and `y.tab.h'.
+ $EGREP '#.*line.*y\.tab\.' $c_outputs && Exit 1
+ # Don't be excessively strict in grepping, to avoid spurious failures.
+ grep '#.*line.*zardoz\.y' zardoz.c
+ grep '#.*line.*quux\.y' bar-quux.c
+ grep '#.*line.*zardoz\.y' sub/foo-zardoz.c
+ grep '#.*line.*quux\.y' sub/dir/quux.c
+ cd $srcdir
+
+done
+
+:
--- /dev/null
+#! /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
+
+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 = p.h parse.hh parse3.hxx
+END
+
+# The content of all the .c and .y files created below is valid C but
+# deliberately invalid 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
+
+# Try a VPATH and by default serial build first, and then an in-tree
+# and by default parallel build.
+
+for try in 0 1; do
+
+ if test $try -eq 0; then
+ # VPATH serial build.
+ mkdir build
+ cd build
+ srcdir=..
+ debug_info="ls -l . $srcdir"
+ run_make=$MAKE
+ elif test $try -eq 1; then
+ # In-tree parallel build.
+ srcdir=.
+ debug_info="ls -l"
+ case $MAKE in
+ *\ -j*)
+ # Degree of parallelism already specified by the user: do
+ # not override it.
+ run_make=$MAKE;;
+ *)
+ # Some make implementations (e.g., HP-UX) don't grok `-j',
+ # some require no space between `-j' and the number of jobs
+ # (e.g., older GNU make versions), and some *do* require a
+ # space between `-j' and the number of jobs (e.g., Solaris
+ # dmake). We need a runtime test to see what works.
+ echo 'all:' > Makefile
+ for run_make in "$MAKE -j3" "$MAKE -j 3" "$MAKE"; do
+ $run_make && break
+ done
+ rm -f Makefile
+ esac
+ else
+ echo "$me: invalid value of \$try '$try'" >&2
+ Exit 99
+ fi
+
+ $srcdir/configure
+
+ $run_make
+ $debug_info
+
+ 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
+ $run_make p.h parse.hh
+ $debug_info
+ test -f p.h
+ test -f parse.hh
+ test ! -r parse3.hxx
+ $run_make
+ $debug_info
+ test -f parse3.hxx
+
+ cd $srcdir
+
+done
+
+:
--- /dev/null
+#! /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/>.
+
+# Checks for .c and .h files derived from non-distributed yacc sources.
+# The test 'yacc-pr204.test' does similar check with AM_MAINTAINER_MODE
+# enabled.
+# The tests 'lex-nodist.test' and 'lex-pr204.test' does similar checks
+# for lex-generated .c files.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub1 sub2
+.PHONY: test-build test-dist
+test-build: all
+ ls -l . sub1 sub2
+ test -f sub1/parse.y
+ test -f sub1/parse.c
+ test -f sub2/parse.y
+ test -f sub2/parse.c
+ test -f sub2/parse.h
+test-dist: distdir
+ ls -l $(distdir) $(distdir)/sub1 $(distdir)/sub2
+ test ! -r $(distdir)/sub1/parse.y
+ test ! -r $(distdir)/sub1/parse.c
+ test ! -r $(distdir)/sub1/parse.h
+ test ! -r $(distdir)/sub2/parse.y
+ test ! -r $(distdir)/sub2/parse.c
+ test ! -r $(distdir)/sub2/parse.h
+check-local: test-build test-dist
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am << 'END'
+parse.y:
+ rm -f $@ $@-t
+ :; { : \
+ && echo "%{" \
+ && echo "int yylex () { return 0; }" \
+ && echo "void yyerror (char *s) {}" \
+ && echo "%}" \
+ && echo "%%" \
+ && echo "maude : 'm' 'a' 'u' 'd' 'e' {}"; \
+ } > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+bin_PROGRAMS = prog
+prog_SOURCES = main.c
+nodist_prog_SOURCES = parse.y
+CLEANFILES = $(nodist_prog_SOURCES)
+END
+
+cat sub1/Makefile.am - > sub2/Makefile.am << 'END'
+AM_YFLAGS = -d
+BUILT_SOURCES = parse.h
+END
+
+cat > sub1/main.c << 'END'
+int main ()
+{
+ return yyparse ();
+}
+END
+cat - sub1/main.c > sub2/main.c << 'END'
+#include "parse.h"
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+$MAKE test-build
+$MAKE test-dist
+
+# But the distribution must work correctly, assuming the user has
+# the proper tools to process yacc files. Do this check only with
+# GNU make, to avoid tripping on automake bug#7884.
+if using_gmake; then $MAKE distcheck; fi
+
+:
#! /bin/sh
-# Copyright (C) 2002, 2004, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2004, 2010, 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
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# For PR 204.
-# Sources derived from nodist_ sources should not be distributed.
+# C sources derived from nodist_ yacc sources should not be distributed.
+# See also related test `yacc-nodist.test'.
+# The tests 'lex-nodist.test' and 'lex-pr204.test' does similar checks
+# for lex-generated C files.
-required='bison gcc'
+required=yacc
. ./defs || Exit 1
set -e
# Ensure the rebuild rule works despite AM_MAINTAINER_MODE, because
# it's a nodist_ parser.
$sleep
-touch parse.y
+touch parse.y parse2.y
$sleep
$MAKE parse.c parse2.c
-test `ls -1t parse.c parse.y | sed 1q` = parse.c
+stat parse.c parse.y parse2.c parse2.y || : # For debugging.
+test `ls -t parse.c parse.y | sed 1q` = parse.c
+test `ls -t parse2.c parse2.y | sed 1q` = parse2.c
:
--- /dev/null
+#! /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 yacc sources with many dots in their name are handled
+# correctly.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar foo2 bar2
+
+foo_SOURCES = parse.y.y
+bar_SOURCES = parse.s.f..y
+bar_YFLAGS = -d
+
+foo2_SOURCES = parse..5.y++
+bar2_SOURCES = parse.yxx.yy
+bar2_YFLAGS = -d
+END
+
+outputs=' parse.y.c bar-parse.s.f..c bar-parse.s.f..h
+ parse..5.c++ bar2-parse.yxx.cc bar2-parse.yxx.hh '
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$EGREP '(\.[ch]|parse)' Makefile.in # For debugging.
+
+# All expected files should be mentioned in the generated Makefile.in.
+for s in $outputs; do
+ $FGREP $s Makefile.in
+done
+
+:
#! /bin/sh
-# Copyright (C) 1996, 2001, 2002, 2006 Free Software Foundation, Inc.
+# Copyright (C) 1996, 2001, 2002, 2006, 2010 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
$ACLOCAL
$AUTOMAKE -a
-grep 'zardoz.c' Makefile.in
+$FGREP 'zardoz.c' Makefile.in
+
+:
#! /bin/sh
-# Copyright (C) 1999, 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2001, 2002, 2003, 2006, 2010, 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
# Test to make sure intermediate .h file is not generated nor removed
# if (AM_)?YFLAGS do not contain -d. Requested by Jim Meyering.
+# See also the related semantic test `yacc-d-basic.test'.
. ./defs || Exit 1
AC_PROG_YACC
END
+# Run it here once and for all, since we are not going to modify
+# configure.in anymore.
+$ACLOCAL
+
cat > Makefile.am <<'END'
bin_PROGRAMS = zardoz
zardoz_SOURCES = zardoz.y
# Don't redefine several times the same variable.
cp Makefile.am Makefile.src
-$ACLOCAL
$AUTOMAKE -a
-
# If zardoz.h IS mentioned, fail
-grep 'zardoz.h' Makefile.in > /dev/null && Exit 1
-
-
+$FGREP 'zardoz.h' Makefile.in && Exit 1
cp Makefile.src Makefile.am
echo 'AM_YFLAGS = -d' >> Makefile.am
-
$AUTOMAKE
-
# If zardoz.h is NOT mentioned, fail
-grep 'zardoz.h' Makefile.in > /dev/null
-
-
+$FGREP 'zardoz.h' Makefile.in
cp Makefile.src Makefile.am
echo 'AM_YFLAGS = ' >> Makefile.am
-
$AUTOMAKE
-
# If zardoz.h IS mentioned, fail
-grep 'zardoz.h' Makefile.in > /dev/null && Exit 1
-
-
+$FGREP 'zardoz.h' Makefile.in && Exit 1
cp Makefile.src Makefile.am
echo 'YFLAGS = -d' >> Makefile.am
-
-# YFLAGS is a use variable.
+# YFLAGS is a user variable.
AUTOMAKE_fails
-grep 'YFLAGS' stderr
+grep 'YFLAGS.* user variable' stderr
+grep 'AM_YFLAGS.* instead' stderr
$AUTOMAKE -Wno-gnu
-
# If zardoz.h is NOT mentioned, fail
-grep 'zardoz.h' Makefile.in > /dev/null
-
-
+$FGREP 'zardoz.h' Makefile.in
cp Makefile.src Makefile.am
echo 'YFLAGS = ' >> Makefile.am
-
$AUTOMAKE -Wno-gnu
-
# If zardoz.h IS mentioned, fail
-grep 'zardoz.h' Makefile.in > /dev/null && Exit 1
+$FGREP 'zardoz.h' Makefile.in && Exit 1
:
#! /bin/sh
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2010, 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
# Some simple tests of ylwrap functionality.
-required='bison gcc'
+required=yacc
. ./defs || Exit 1
-cat > configure.in << 'END'
-AC_INIT
-AC_CONFIG_AUX_DIR([.])
-AM_INIT_AUTOMAKE(foo, 0.1)
-PACKAGE=foo
-VERSION=0.1
+set -e
+
+cat >> configure.in << 'END'
AC_PROG_CC
AC_PROG_YACC
-AC_OUTPUT(Makefile)
+AC_OUTPUT
END
cat > Makefile.am << 'END'
# First parser.
cat > parse.y << 'END'
%{
-int yylex () {return 0;}
+int yylex () { return 0; }
void yyerror (char *s) {}
%}
%%
# Second parser.
cat > bar.y << 'END'
%{
-int yylex () {return 0;}
+int yylex () { return 0; }
void yyerror (char *s) {}
%}
%%
int main () { return 0; }
END
-set -e
-
$ACLOCAL
$AUTOCONF
$AUTOMAKE -a
$MAKE maintainer-clean
test ! -f bar.c
test ! -f parse.c
-:
-Exit 0
+:
#! /bin/sh
-# Copyright (C) 2001, 2002, 2003, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2010, 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
set -e
-cat > configure.in << 'END'
-AC_INIT
-AM_INIT_AUTOMAKE(nonesuch, nonesuch)
+cat >> configure.in << 'END'
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_YACC
-AC_OUTPUT(Makefile)
END
cat > Makefile.am << 'END'
maude_YFLAGS = -d
END
-$ACLOCAL || Exit 1
-$AUTOMAKE -a || Exit 1
+$ACLOCAL
+$AUTOMAKE -a
# Rule should use maude_YFLAGS.
grep 'AM_YFLAGS.*maude' Makefile.in && Exit 1
+++ /dev/null
-#! /bin/sh
-# Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 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/>.
-
-# Test to make sure ylwrap put in right location.
-# Report from Tim Van Holder.
-# Also make sure depcomp does not needlessly update headers.
-# Report from Paolo Bonzini.
-
-required='gcc bison GNUmake'
-. ./defs || Exit 1
-
-set -e
-
-cat > configure.in << 'END'
-AC_INIT([yacc6], [1.0])
-AC_CONFIG_AUX_DIR([aux1])
-AM_INIT_AUTOMAKE
-AC_CONFIG_FILES([Makefile])
-AC_PROG_CC
-AM_PROG_CC_C_O
-AC_PROG_YACC
-AC_CONFIG_FILES([sub/Makefile])
-AC_OUTPUT
-END
-
-cat > Makefile.am << 'END'
-SUBDIRS = sub
-
-test-time-unchanged:
- test `ls -1t sub/main.$(OBJEXT) z | sed 1q` = z
-test-time-changed:
- test `ls -1t sub/main.$(OBJEXT) z | sed 1q` = sub/main.$(OBJEXT)
-END
-
-mkdir aux1 sub
-
-cat > sub/Makefile.am << 'END'
-bin_PROGRAMS = foo bar
-AM_YFLAGS = -d
-foo_SOURCES = foo.y main.c
-foo_CPPFLAGS = -DFOO
-bar_SOURCES = bar.y main.c
-BUILT_SOURCES = foo.h bar.h
-END
-
-cat > sub/foo.y << 'END'
-%{
-int yylex () {return 0;}
-void yyerror (char *s) {}
-%}
-%token TOKEN
-%%
-foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
-END
-
-cp sub/foo.y sub/bar.y
-
-cat >sub/main.c <<'EOF'
-#ifdef FOO
-# include "foo.h"
-#else
-# include "bar.h"
-#endif
-
-int
-main()
-{
- return 0;
-}
-EOF
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE -a
-test -f aux1/ylwrap
-test ! -f ylwrap
-test ! -f sub/ylwrap
-$FGREP '(top_srcdir)/aux1/ylwrap' sub/Makefile.in
-./configure
-$MAKE
-grep '#.*line.*foo.y' sub/foo.c
-grep '#.*line.*bar.y' sub/bar.c
-
-$sleep
-: > z
-$sleep
-touch sub/bar.y
-$MAKE
-$MAKE test-time-unchanged
-$sleep
-sed s/TOKEN/TEKON/g sub/bar.y >sub/bar.yt
-mv -f sub/bar.yt sub/bar.y
-$MAKE
-$MAKE test-time-changed
#! /bin/sh
-# Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2004, 2010, 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
# Also check that the sources of the generated parser are distributed.
# PR/47.
-required=bison
+required=yacc
. ./defs || Exit 1
+set -e
+
cat >> configure.in << 'END'
AC_PROG_CC
AC_PROG_YACC
%%
END
-set -e
-
$ACLOCAL
$AUTOMAKE -a
$AUTOCONF
test -f foo.h
test -f foo.c
# ... but maintainer-clean should.
-./configure
+./configure # we must re-create `Makefile'
$MAKE maintainer-clean
test ! -f foo.h
test ! -f foo.c
+
:
#! /bin/sh
-# Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2004, 2006, 2010, 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
# Test for subdir parsers.
-required="gcc bison"
+required=yacc
. ./defs || Exit 1
set -e
-cat > configure.in << 'END'
-AC_INIT([yacc8], [1.0])
-AC_CONFIG_AUX_DIR([.])
-AM_INIT_AUTOMAKE
-AC_CONFIG_FILES([Makefile])
+cat >> configure.in << 'END'
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_YACC
foo_foo_SOURCES = foo/parse.y
AM_YFLAGS = -d
+.PHONY: obj
obj: foo/parse.$(OBJEXT)
-test1: obj
- test -f foo/parse.c
- test -f foo/parse.$(OBJEXT)
-
-test2: obj
+.PHONY: test1 test2
+test1: foo/parse.$(OBJEXT)
test -f foo/parse.c
test -f foo/parse.$(OBJEXT)
+test2: foo/parse2.$(OBJEXT)
+ test -f foo/parse2.c
+ test -f foo/parse2.$(OBJEXT)
END
mkdir foo
cat > foo/parse.y << 'END'
%{
-int yylex () {return 0;}
+int yylex () { return 0; }
void yyerror (char *s) {}
%}
%%
END
$AUTOMAKE -a
-test -f ./ylwrap || Exit 1
+test -f ./ylwrap
cd sub
# Regenerate Makefile (automatic in GNU Make, but not in other Makes)
./config.status
$MAKE test2
+
+:
#! /bin/sh
-# Copyright (C) 2010 Free Software Foundation, Inc.
+# Copyright (C) 2010, 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
# Removal recovery rules for headers should not remove files with `make -n'.
-required=bison
+required=yacc
. ./defs || Exit 1
set -e
cat > parse.y << 'END'
%{
-int yylex () {return 0;}
+int yylex () { return 0; }
void yyerror (char *s) {}
%}
%%
#! /bin/sh
-# Copyright (C) 1997, 2001, 2002, 2006 Free Software Foundation, Inc.
+# Copyright (C) 1997, 2001, 2002, 2006, 2010 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
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Test to make sure yacc + c++ works.
+# Test to make sure Yacc + C++ is not obviously broken.
+# See also related tests `yacc-cxx.test' and `yacc-d-cxx.test',
+# which does much more in-depth checks (but requires an actual
+# Yacc program and a working C++ compiler).
. ./defs || Exit 1
END
cat > Makefile.am << 'END'
-bin_PROGRAMS = zardoz
-zardoz_SOURCES = zardoz.yy
+bin_PROGRAMS = foo bar baz qux
+foo_SOURCES = foo.y++
+bar_SOURCES = bar.ypp
+baz_SOURCES = baz.yy
+qux_SOURCES = qux.yxx
END
$ACLOCAL
$AUTOMAKE -a
-grep zardoz.cc Makefile.in
+$EGREP '(\.[ch]|foo|bar|baz|qux)' Makefile.in # For debugging.
+
+$EGREP '(foo|bar|baz|qux)\.h' Makefile.in && Exit 1
+
+sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk
+
+$FGREP ' foo.c++ ' mk
+$FGREP ' bar.cpp ' mk
+$FGREP ' baz.cc ' mk
+$FGREP ' qux.cxx ' mk
+
+cat >> Makefile.am <<END
+AM_YFLAGS = -d
+qux_YFLAGS = foo
+END
+
+$AUTOMAKE
+
+$EGREP '(\.[ch]|foo|bar|baz|qux)' Makefile.in # For debugging.
+
+sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk
+
+$FGREP ' foo.c++ ' mk
+$FGREP ' foo.h++ ' mk
+$FGREP ' bar.cpp ' mk
+$FGREP ' bar.hpp ' mk
+$FGREP ' baz.cc ' mk
+$FGREP ' baz.hh ' mk
+
+$EGREP '(^| )foo\.h\+\+(:| .*:)' Makefile.in
+$EGREP '(^| )bar\.hpp(:| .*:)' Makefile.in
+$EGREP '(^| )baz\.hh(:| .*:)' Makefile.in
+
+grep ' foo\.h[ :]' mk && Exit 1
+grep ' bar\.h[ :]' mk && Exit 1
+grep ' baz\.h[ :]' mk && Exit 1
+
+$FGREP ' qux-qux.cxx ' mk
+$EGREP '(^| )qux-qux\.cxx(:| .*:)' Makefile.in
+grep 'qux\.h.*:' Makefile.in && Exit 1
+
+:
#! /bin/sh
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2010, 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
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This test checks that dependent files are updated before including
-# in the distribution. `parse.c' depends on `parce.y'. The later is
+# in the distribution. `parse.c' depends on `parse.y'. The later is
# updated so that `parse.c' should be rebuild. Then we are running
# `make' and `make distdir' and check whether the version of `parse.c'
# to be distributed is up to date.
-required='gcc bison'
+# Please keep this in sync with sister test `yacc-d-vpath.test'.
+
+required=yacc
. ./defs || Exit 1
-cat > configure.in << 'END'
-AC_INIT
-AC_CONFIG_AUX_DIR([.])
-AM_INIT_AUTOMAKE(foo, 0.1)
-PACKAGE=foo
-VERSION=0.1
+set -e
+
+cat >> configure.in << 'END'
AC_PROG_CC
AC_PROG_YACC
-AC_OUTPUT(Makefile)
+AC_OUTPUT
END
cat > Makefile.am << 'END'
# Original parser, with `foobar'
cat > parse.y << 'END'
%{
-int yylex () {return 0;}
+int yylex () { return 0; }
void yyerror (char *s) {}
%}
%%
int main () { return 0; }
END
-set -e
-
$ACLOCAL
$AUTOCONF
$AUTOMAKE -a
cd sub
../configure
-# A delay is needed to make sure that the new parse.y is indeed newer
-# than parse.c, i.e. the they don't have the same timestamp.
$sleep
# New parser, with `fubar'
cat > ../parse.y << 'END'
%{
-int yylex () {return 0;}
+int yylex () { return 0; }
void yyerror (char *s) {}
%}
%%
$MAKE
$MAKE distdir
-grep fubar foo-0.1/parse.c
+$FGREP fubar $distdir/parse.c
-#
# Now check to make sure that `make dist' will rebuild the parser.
-#
-# A delay is needed to make sure that the new parse.y is indeed newer
-# than parse.c, i.e. the they don't have the same timestamp.
$sleep
# New parser, with `maude'
cat > ../parse.y << 'END'
%{
-int yylex () {return 0;}
+int yylex () { return 0; }
void yyerror (char *s) {}
%}
%%
END
$MAKE distdir
-grep maude foo-0.1/parse.c
+$FGREP maude $distdir/parse.c
+
+:
--- /dev/null
+#! /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 automake can cope with user-redefinition of $(YFLAGS)
+# at configure time and/or at make time.
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+unset YFLAGS || :
+
+cat >> configure.in <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+# A minor automake wart: automake doesn't generate code to clean
+# `*.output' files generated by yacc (it's not even clear if that
+# would be useful in general, so it's probably better to be
+# conservative).
+CLEANFILES = foo.output
+# Another automake wart: `-d' flag won't be given at automake time,
+# so automake won't be able to generate code to clean `foo.h' :-(
+MAINTAINERCLEANFILES = foo.h
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+int main () { return 0; }
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure YFLAGS='-d -v'
+$MAKE
+ls -l
+test -f foo.c
+test -f foo.h
+test -f foo.output
+
+$MAKE maintainer-clean
+ls -l
+
+./configure YFLAGS='-v'
+$MAKE
+ls -l
+test -f foo.c
+test ! -r foo.h
+test -f foo.output
+
+$MAKE maintainer-clean
+ls -l
+
+./configure YFLAGS='-v'
+YFLAGS=-d $MAKE -e
+ls -l
+test -f foo.c
+test -f foo.h
+test ! -r foo.output
+
+$MAKE maintainer-clean
+ls -l
+
+:
--- /dev/null
+#! /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 automake complains about *_YFLAGS variables which have
+# conditional content.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'END'
+AC_PROG_CC
+
+# `YFLAGS' is AC_SUBST'd by AC_PROG_YACC by default, but we
+# don't want this, since it might confuse our error messages.
+# Also, AM_SUBST_NOTMAKE seems not to help about this.
+# So we simply define $(YACC) by hand.
+AC_SUBST([YACC], [yacc])
+
+AM_CONDITIONAL([COND], [:])
+END
+
+$ACLOCAL
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo zardoz
+foo_SOURCES = foo.y
+zardoz_SOURCES = zardoz.y
+if COND
+AM_YFLAGS = -v
+zardoz_YFLAGS = -v
+endif COND
+END
+
+cat > Makefile1.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+## dummy comment to keep line count right
+if COND
+YFLAGS = foo
+endif COND
+END
+
+cat > Makefile2.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+AM_YFLAGS = am_yflags
+if COND
+YFLAGS = yflags
+endif COND
+END
+
+cat > Makefile3.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+foo_YFLAGS = foo_yflags
+if COND
+YFLAGS = yflags
+endif COND
+END
+
+cat > Makefile4.am <<'END'
+bin_PROGRAMS = foo zardoz
+
+foo_SOURCES = foo.y
+zardoz_SOURCES = $(foo_SOURCES)
+
+YFLAGS =
+AM_YFLAGS = $(COND_VAR1)
+zardoz_YFLAGS = $(COND_VAR2:z=r)
+
+COND_VAR2 = foo
+if COND
+YFLAGS += -v
+COND_VAR2 += bar
+else !COND
+COND_VAR1 = -d
+endif !COND
+END
+
+cat > Makefile5.am <<'END'
+bin_PROGRAMS = foo zardoz
+foo_SOURCES = foo.y
+zardoz_SOURCES = zardoz.y
+YFLAGS = -v
+AM_YFLAGS = -v
+if COND
+zardoz_YFLAGS = -v
+endif
+END
+
+cat > Makefile6.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+foo_YFLAGS = -v
+if COND
+quux_YFLAGS = -v
+AM_YFLAGS = -v
+endif
+END
+
+: > ylwrap
+
+LC_ALL=C; export LC_ALL # For grep regexes below.
+
+AUTOMAKE_fails -Wnone -Wunsupported Makefile
+grep '^Makefile\.am:5:.*AM_YFLAGS.* conditional contents' stderr
+grep '^Makefile\.am:6:.*zardoz_YFLAGS.* conditional contents' stderr
+
+for i in 1 2 3; do
+ AUTOMAKE_fails -Wnone -Wunsupported Makefile$i
+ grep "^Makefile$i\\.am:5:.*[^a-zA-Z0-9_]YFLAGS.* conditional contents" \
+ stderr
+done
+
+AUTOMAKE_fails -Wnone -Wunsupported Makefile4
+grep '^Makefile4\.am:6:.*[^a-zA-Z0-9_]YFLAGS.* conditional contents' stderr
+grep '^Makefile4\.am:7:.*AM_YFLAGS.* conditional contents' stderr
+grep '^Makefile4\.am:8:.*zardoz_YFLAGS.* conditional contents' stderr
+
+# Now let's check we avoid false positives.
+
+# Disable `gnu' warnings because we override the user variable `YFLAGS'.
+AUTOMAKE_fails -Wno-gnu Makefile5
+grep -v '^Makefile5\.am:.*zardoz_YFLAGS' stderr | grep . && Exit 1
+
+# Disable `gnu' warnings because we override the user variable `YFLAGS'.
+$AUTOMAKE -Wno-gnu Makefile6
+
+:
#! /bin/sh
-# Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation, Inc.
+# 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
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Ensure that generated .h file is distributed iff we have -d in
-# (AM_)?YFLAGS.
+# Check for false positives in automake recognition of `-d' in YFLAGS.
. ./defs || Exit 1
set -e
-cat >> configure.in << 'END'
+cat >> configure.in <<'END'
AC_PROG_CC
AC_PROG_YACC
END
+$ACLOCAL
+
cat > Makefile.am <<'END'
-AUTOMAKE_OPTIONS = no-dependencies
-bin_PROGRAMS = zardoz
+bin_PROGRAMS = zardoz foobar
zardoz_SOURCES = zardoz.y
-magic:
- @echo $(DIST_COMMON)
+foobar_SOURCES = foobar.y
+# All the "almost -d" substrings ("- d", "-dd", etc.) are meant.
+AM_YFLAGS = -xd --d - d --output=d
+foobar_YFLAGS = - d $(foovar)-d -dd
END
-$ACLOCAL
$AUTOMAKE -a
+$EGREP '(foobar|zardoz)\.h.*:' Makefile.in && Exit 1
+$EGREP '(foobar|zardoz)\.h' Makefile.in | $FGREP -v '$(YLWRAP) ' && Exit 1
-$FGREP -v @SET_MAKE@ Makefile.in > Makefile.sed
-# It should not be disted here
-grep 'zardoz.h' Makefile.in && Exit 1
-
-cp Makefile.am Save
-# Test all available flags to make sure header is distributed with
-# `-d'.
-for flag in YFLAGS AM_YFLAGS zardoz_YFLAGS; do
- cp Save Makefile.am
- echo "$flag = -d" >> Makefile.am
-
- $AUTOMAKE -Wno-gnu
- grep 'zardoz.h' Makefile.in
-done
+:
--- /dev/null
+#! /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 the user can force automake to use *_YFLAGS variables
+# which have conditional content.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+AM_CONDITIONAL([COND], [test x"$cond" = x"yes"])
+AC_OUTPUT
+END
+
+mkdir bin
+cat > bin/fake-yacc <<'END'
+#!/bin/sh
+echo "/* $* */" > y.tab.c
+echo 'extern int dummy;' >> y.tab.c
+END
+chmod a+x bin/fake-yacc
+PATH=`pwd`/bin$PATH_SEPARATOR$PATH; export PATH
+YACC=fake-yacc; export YACC
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = foo.y main.c
+bar_SOURCES = $(foo_SOURCES)
+bar_YFLAGS = $(bar_yflags2)
+if COND
+AM_YFLAGS = __am_cond_yes__
+bar_YFLAGS += __bar_cond_yes__
+else !COND
+AM_YFLAGS = __am_cond_no__
+bar_yflags2 = __bar_cond_no__
+endif !COND
+END
+
+cat > main.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+: > foo.y
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a -Wno-unsupported
+
+$EGREP '(YFLAGS|yflags|am__append)' Makefile.in # For debugging.
+
+./configure cond=yes
+$MAKE
+
+ls -l
+cat foo.c
+cat bar-foo.c
+
+$FGREP ' __am_cond_yes__ ' foo.c
+$FGREP ' __bar_cond_yes__ ' bar-foo.c
+$FGREP 'cond_no' foo.c bar-foo.c && Exit 1
+
+$MAKE maintainer-clean
+ls -l
+
+./configure cond=no
+$MAKE
+
+ls -l
+cat foo.c
+cat bar-foo.c
+
+$FGREP ' __am_cond_no__ ' foo.c
+$FGREP ' __bar_cond_no__ ' bar-foo.c
+$FGREP 'cond_yes' foo.c bar-foo.c && Exit 1
+
+:
--- /dev/null
+#! /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 automake can cope with a definition of the $(YFLAGS) variable
+# in Makefile.am (even if that is extremely bad practice, because that
+# variable is user-reserved).
+
+required=yacc
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+# Don't do this in a real-life Makefile.am!
+YFLAGS = -d -v
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+int main () { return 0; }
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+$ACLOCAL
+$AUTOMAKE -a -Wno-gnu
+
+$EGREP '(foo|YFLAGS)' Makefile.in # for debugging
+grep '^foo.h *:' Makefile.in
+
+$AUTOCONF
+./configure
+
+$MAKE
+
+test -f foo.c
+test -f foo.h
+test -f foo.output
+
+:
--- /dev/null
+#! /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 automake expand variables when looking for `-d' in YFLAGS;
+# for example, the following is supposed to work:
+# foo_flags = -d
+# AM_YFLAGS = $(foo_flags)
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+END
+
+$ACLOCAL
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = foo.y
+bar_SOURCES = bar.y
+my_YFLAGS = -x
+AM_YFLAGS = $(my_YFLAGS:x=d)
+bar_YFLAGS = $(AM_YFLAGS)
+END
+
+$AUTOMAKE -a
+
+$EGREP '(foo|bar|YFLAGS)' Makefile.in # for debugging
+grep '^foo.h *:' Makefile.in
+grep '^bar-bar.h *:' Makefile.in
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = -Wno-gnu
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parser.y
+my_YFLAGS = $(my_YFLAGS_1)
+my_YFLAGS += $(my_YFLAGS_2)
+my_YFLAGS_2 = -d
+YFLAGS = $(my_YFLAGS)
+END
+
+$AUTOMAKE
+
+$EGREP 'parser|YFLAGS' Makefile.in # for debugging
+grep '^parser.h *:' Makefile.in
+
+: