Hello automakers. This is a reproposal of an older patch of mine: <http://lists.gnu.org/archive/html/automake-patches/2010-09/msg00097.html>
I've rebased the patch on current maint, and thrown in a couple of fixes/improvements (in particular, I've renamed the new test `yacc1.test' to the more proper `yacc-basic.test'). Attached is what I've squashed in, and the amended patch. OK to apply to a temporary branch off of maint, and merge to master? BTW, notice that I'm planning to further extend the Lex/Yacc tests and make them more "semantic", but that should be better done in a follow-up patch IMVHO. If you think this would render the present patch a useless tinkering or a potential "oscillation", then I'll amend it again to include all the planned future improvements "right away" (that might take some days, actually). I will push the attached patch in 72 hours (Thursday evening) if there are no objections. Regards, Stefano
From 020eadb092b2ab9fce4adbe89eab784b056eb0ce Mon Sep 17 00:00:00 2001 From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Fri, 7 May 2010 15:07:37 +0200 Subject: [PATCH] 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. (Makefile.am): Remove useless definition of $(LDADD). * 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. Prefer `cp -f' over plain `cp'. Do not create 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. Prefer `cp -f' over plain `cp'. 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/defs.in ($required): Better recognition of requirement "flex". * tests/Makefile.am (TESTS): Update. --- ChangeLog | 51 +++++++++++++++++++++ tests/Makefile.am | 3 + tests/Makefile.in | 3 + tests/defs.in | 7 +++ tests/lex.test | 6 --- tests/lex2.test | 9 ++-- tests/lex3.test | 46 ++++++++++--------- tests/lex4.test | 7 ++- tests/lex5.test | 17 ++----- tests/lexcpp.test | 46 +++++++++++++++++++ tests/lexvpath.test | 117 +++++++++++++++++++++++++++++++++++++++++++++++++ tests/yacc-basic.test | 78 ++++++++++++++++++++++++++++++++ tests/yacc.test | 7 ++- tests/yacc2.test | 50 ++++++++------------- tests/yacc3.test | 17 +++---- tests/yacc4.test | 18 +++----- tests/yacc5.test | 13 +++--- tests/yacc6.test | 14 +++--- tests/yacc7.test | 10 +++-- tests/yacc8.test | 24 +++++----- tests/yaccpp.test | 21 +++++++-- tests/yaccvpath.test | 27 ++++++----- 22 files changed, 444 insertions(+), 147 deletions(-) create mode 100755 tests/lexcpp.test create mode 100755 tests/lexvpath.test create mode 100755 tests/yacc-basic.test diff --git a/ChangeLog b/ChangeLog index 5afdc53..28b99b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,54 @@ +2010-12-13 Stefano Lattarini <stefano.lattar...@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. + (Makefile.am): Remove useless definition of $(LDADD). + * 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. Prefer `cp -f' over plain `cp'. + Do not create 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. Prefer `cp -f' over plain `cp'. 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/defs.in ($required): Better recognition of requirement + "flex". + * tests/Makefile.am (TESTS): Update. + 2010-12-10 Ralf Wildenhues <ralf.wildenh...@gmx.de> Avoid running installed automake from 'libtool --help'. diff --git a/tests/Makefile.am b/tests/Makefile.am index dab04e3..52d3a58 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -413,6 +413,8 @@ lex2.test \ lex3.test \ lex4.test \ lex5.test \ +lexcpp.test \ +lexvpath.test \ lflags.test \ lflags2.test \ libexec.test \ @@ -788,6 +790,7 @@ werror3.test \ whoami.test \ xsource.test \ xz.test \ +yacc-basic.test \ yacc.test \ yacc2.test \ yacc3.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index de21f43..b4a896c 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -680,6 +680,8 @@ lex2.test \ lex3.test \ lex4.test \ lex5.test \ +lexcpp.test \ +lexvpath.test \ lflags.test \ lflags2.test \ libexec.test \ @@ -1055,6 +1057,7 @@ werror3.test \ whoami.test \ xsource.test \ xz.test \ +yacc-basic.test \ yacc.test \ yacc2.test \ yacc3.test \ diff --git a/tests/defs.in b/tests/defs.in index ee19dbe..a7af230 100644 --- a/tests/defs.in +++ b/tests/defs.in @@ -113,6 +113,13 @@ do echo "$me: running etags --version -o /dev/null" ( etags --version -o /dev/null ) || exit 77 ;; + flex) + # Since flex is required, we pick LEX for ./configure. + LEX=flex + export LEX + echo "$me: running flex --version" + ( flex --version ) || exit 77 + ;; GNUmake) # Use --version AND -v, because SGI Make doesn't fail on --version. # Also grep for GNU because newer versions of FreeBSD make do diff --git a/tests/lex.test b/tests/lex.test index c59c4e3..6f00137 100755 --- a/tests/lex.test +++ b/tests/lex.test @@ -26,22 +26,16 @@ END cat > Makefile.am << 'END' bin_PROGRAMS = zot zot_SOURCES = joe.l -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 : diff --git a/tests/lex2.test b/tests/lex2.test index d588edf..d7499e1 100755 --- a/tests/lex2.test +++ b/tests/lex2.test @@ -29,8 +29,9 @@ bin_PROGRAMS = zot 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 + +: diff --git a/tests/lex3.test b/tests/lex3.test index c4120cf..e70bbdd 100755 --- a/tests/lex3.test +++ b/tests/lex3.test @@ -15,27 +15,25 @@ # 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' . ./defs || Exit 1 +set -e + # 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) +distdir=$me-1.0 -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' @@ -46,38 +44,44 @@ END cat > foo.l << 'END' %% -"END" return EOF; +"GOOD" return EOF; . %% int main () { - while (yylex () != EOF) - ; - - return 0; + if (yylex () == EOF) + return 0; + else + return 1; } 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 + +: diff --git a/tests/lex4.test b/tests/lex4.test index fee140d..b171160 100755 --- a/tests/lex4.test +++ b/tests/lex4.test @@ -1,5 +1,6 @@ #! /bin/sh -# Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation, Inc. +# 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 @@ -32,9 +33,9 @@ bin_PROGRAMS = zoo zoo_SOURCES = joe.ll END -: > joe.ll - $ACLOCAL $AUTOMAKE -a $FGREP joe.Po Makefile.in + +: diff --git a/tests/lex5.test b/tests/lex5.test index 88924b2..d41f6eb 100755 --- a/tests/lex5.test +++ b/tests/lex5.test @@ -21,11 +21,7 @@ required='gcc GNUmake flex' 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 @@ -33,10 +29,9 @@ AC_OUTPUT END cat > Makefile.am << 'END' -AUTOMAKE_OPTIONS = subdir-objects -LDADD = @LEXLIB@ - -bin_PROGRAMS = foo/foo +AUTOMAKE_OPTIONS = subdir-objects +LDADD = @LEXLIB@ +bin_PROGRAMS = foo/foo foo_foo_SOURCES = foo/foo.l END @@ -57,8 +52,6 @@ main () } END -set -e - $ACLOCAL $AUTOCONF $AUTOMAKE -a @@ -96,4 +89,4 @@ $MAKE foo/foo2.o test -f foo/foo2.c test -f foo/foo2.o -Exit 0 +: diff --git a/tests/lexcpp.test b/tests/lexcpp.test new file mode 100755 index 0000000..b95b5f1 --- /dev/null +++ b/tests/lexcpp.test @@ -0,0 +1,46 @@ +#! /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/>. + +# 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_CXX +AC_PROG_LEX +END + +cat > Makefile.am << 'END' +bin_PROGRAMS = foo bar baz qux +foo_SOURCES = foo.l++ +bar_SOURCES = bar.lpp +baz_SOURCES = baz.ll +qux_SOURCES = qux.lxx +END + +$ACLOCAL +$AUTOMAKE -a + +sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk +$FGREP ' foo.c++ ' mk +$FGREP ' bar.cpp ' mk +$FGREP ' baz.cc ' mk +$FGREP ' qux.cxx ' mk + +: diff --git a/tests/lexvpath.test b/tests/lexvpath.test new file mode 100755 index 0000000..0132a22 --- /dev/null +++ b/tests/lexvpath.test @@ -0,0 +1,117 @@ +#! /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/>. + +# This test checks that dependent files are updated before including +# in the distribution. `lexer.c' depends on `lexer.l'. The later 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='gcc flex' +. ./defs || Exit 1 + +set -e + +distdir=$me-1.0 + +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 whay $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 + +# A delay is needed to make sure that the new lexer.l is indeed newer +# than lexer.c, i.e. the they don't have the same timestamp. +$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 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 lexer, with `maude' comment. +cat > ../lexer.l << 'END' +%% +"END" return EOF; +. +%% +/*maude*/ +END + +$MAKE distdir +$FGREP '/*maude*/' $distdir/lexer.c + +: diff --git a/tests/yacc-basic.test b/tests/yacc-basic.test new file mode 100755 index 0000000..ea5f4ad --- /dev/null +++ b/tests/yacc-basic.test @@ -0,0 +1,78 @@ +#! /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/>. + +# Basic semantic checks on Yacc support. + +required=bison +. ./defs || Exit 1 + +set -e + +distdir=$me-1.0 + +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 +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 + +echo a | ./foo +echo b | ./foo && Exit 1 + +# The generated file `parse.c' must be shipped. +$MAKE distdir +test -f $distdir/parse.c + +# Sanity check on distribution. +$MAKE distcheck + +# While we are at it, make sure that parse.c is erased by +# maintainer-clean, and not by distclean. +test -f parse.c +$MAKE distclean +test -f parse.c +./configure # we must re-create `Makefile' +$MAKE maintainer-clean +test ! -f parse.c + +: diff --git a/tests/yacc.test b/tests/yacc.test index bf6782f..13b7fe3 100755 --- a/tests/yacc.test +++ b/tests/yacc.test @@ -1,5 +1,6 @@ #! /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 @@ -34,4 +35,6 @@ END $ACLOCAL $AUTOMAKE -a -grep 'zardoz.c' Makefile.in +$FGREP 'zardoz.c' Makefile.in + +: diff --git a/tests/yacc2.test b/tests/yacc2.test index a095edc..2235efd 100755 --- a/tests/yacc2.test +++ b/tests/yacc2.test @@ -1,5 +1,6 @@ #! /bin/sh -# Copyright (C) 1999, 2001, 2002, 2003, 2006 Free Software Foundation, Inc. +# Copyright (C) 1999, 2001, 2002, 2003, 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 @@ -26,61 +27,48 @@ AC_PROG_CC 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 END # Don't redefine several times the same variable. -cp Makefile.am Makefile.src +cp -f 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 +cp -f 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 +cp -f 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 +cp -f 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 +cp -f 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 : diff --git a/tests/yacc3.test b/tests/yacc3.test index 86d897c..62147f5 100755 --- a/tests/yacc3.test +++ b/tests/yacc3.test @@ -1,5 +1,6 @@ #! /bin/sh -# Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation, Inc. +# 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 @@ -30,24 +31,22 @@ cat > Makefile.am <<'END' AUTOMAKE_OPTIONS = no-dependencies bin_PROGRAMS = zardoz zardoz_SOURCES = zardoz.y -magic: - @echo $(DIST_COMMON) END $ACLOCAL $AUTOMAKE -a -$FGREP -v @SET_MAKE@ Makefile.in > Makefile.sed # It should not be disted here -grep 'zardoz.h' Makefile.in && Exit 1 +$FGREP 'zardoz.h' Makefile.in && Exit 1 -cp Makefile.am Save +cp -f Makefile.am Makefile.sav # 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 + cp -f Makefile.sav Makefile.am echo "$flag = -d" >> Makefile.am - $AUTOMAKE -Wno-gnu - grep 'zardoz.h' Makefile.in + $FGREP 'zardoz.h' Makefile.in done + +: diff --git a/tests/yacc4.test b/tests/yacc4.test index 0435ec0..bb25290 100755 --- a/tests/yacc4.test +++ b/tests/yacc4.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 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 @@ -19,15 +19,12 @@ required='bison gcc' . ./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' @@ -60,8 +57,6 @@ cat > foo.c << 'END' int main () { return 0; } END -set -e - $ACLOCAL $AUTOCONF $AUTOMAKE -a @@ -86,6 +81,5 @@ test -f parse.c $MAKE maintainer-clean test ! -f bar.c test ! -f parse.c -: -Exit 0 +: diff --git a/tests/yacc5.test b/tests/yacc5.test index 8b00ed8..77de2e9 100755 --- a/tests/yacc5.test +++ b/tests/yacc5.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 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 @@ -21,13 +21,10 @@ 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' @@ -69,8 +66,8 @@ maude_SOURCES = sub/maude.y 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 @@ -80,3 +77,5 @@ grep 'maudec' Makefile.in && Exit 1 # Make sure the .o file is required. grep '^am_maude_OBJECTS.*maude' Makefile.in + +: diff --git a/tests/yacc6.test b/tests/yacc6.test index f10effd..b9b259b 100755 --- a/tests/yacc6.test +++ b/tests/yacc6.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 Free Software +# Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2010 Free Software # Foundation, Inc. # # This program is free software; you can redistribute it and/or modify @@ -27,13 +27,13 @@ set -e cat > configure.in << 'END' AC_INIT([yacc6], [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]) +AC_CONFIG_FILES([Makefile sub/Makefile]) AC_PROG_CC AM_PROG_CC_C_O AC_PROG_YACC -AC_CONFIG_FILES([sub/Makefile]) AC_OUTPUT END @@ -89,11 +89,11 @@ $AUTOMAKE -a test -f aux1/ylwrap test ! -f ylwrap test ! -f sub/ylwrap -$FGREP '(top_srcdir)/aux1/ylwrap' sub/Makefile.in +$FGREP '$(top_srcdir)/aux1/ylwrap' sub/Makefile.in ./configure $MAKE -grep '#.*line.*foo.y' sub/foo.c -grep '#.*line.*bar.y' sub/bar.c +grep '#.*line.*foo\.y' sub/foo.c +grep '#.*line.*bar\.y' sub/bar.c $sleep : > z @@ -106,3 +106,5 @@ sed s/TOKEN/TEKON/g sub/bar.y >sub/bar.yt mv -f sub/bar.yt sub/bar.y $MAKE $MAKE test-time-changed + +: diff --git a/tests/yacc7.test b/tests/yacc7.test index 2edd15c..2b866bc 100755 --- a/tests/yacc7.test +++ b/tests/yacc7.test @@ -1,5 +1,6 @@ #! /bin/sh -# Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2004, 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 @@ -23,6 +24,8 @@ required=bison . ./defs || Exit 1 +set -e + cat >> configure.in << 'END' AC_PROG_CC AC_PROG_YACC @@ -52,8 +55,6 @@ WORD: "up"; %% END -set -e - $ACLOCAL $AUTOMAKE -a $AUTOCONF @@ -83,8 +84,9 @@ $MAKE distclean 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 + : diff --git a/tests/yacc8.test b/tests/yacc8.test index 979415c..797f4e7 100755 --- a/tests/yacc8.test +++ b/tests/yacc8.test @@ -1,5 +1,6 @@ #! /bin/sh -# Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2004, 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 @@ -22,11 +23,7 @@ required="gcc bison" 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 @@ -39,15 +36,16 @@ bin_PROGRAMS = foo/foo 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 @@ -104,9 +102,11 @@ EXTRA_foo_foo_SOURCES = foo/parse2.y 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 + +: diff --git a/tests/yaccpp.test b/tests/yaccpp.test index 9013f40..9c4ae24 100755 --- a/tests/yaccpp.test +++ b/tests/yaccpp.test @@ -1,5 +1,6 @@ #! /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 @@ -14,7 +15,8 @@ # 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 supported. +# Please keep this is sync with sister test lexcpp.test. . ./defs || Exit 1 @@ -26,11 +28,20 @@ AC_PROG_YACC 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 +sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk +$FGREP ' foo.c++ ' mk +$FGREP ' bar.cpp ' mk +$FGREP ' baz.cc ' mk +$FGREP ' qux.cxx ' mk + +: diff --git a/tests/yaccvpath.test b/tests/yaccvpath.test index 6db5fd7..7f44671 100755 --- a/tests/yaccvpath.test +++ b/tests/yaccvpath.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 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 @@ -15,23 +15,24 @@ # 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. +# Please keep this in sync with sister test `lexvapth.test'. + required='gcc bison' . ./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 + +distdir=$me-1.0 + +cat >> configure.in << 'END' AC_PROG_CC AC_PROG_YACC -AC_OUTPUT(Makefile) +AC_OUTPUT END cat > Makefile.am << 'END' @@ -53,8 +54,6 @@ cat > foo.c << 'END' int main () { return 0; } END -set -e - $ACLOCAL $AUTOCONF $AUTOMAKE -a @@ -82,7 +81,7 @@ END $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. @@ -103,4 +102,6 @@ maude : 'm' 'a' 'u' 'd' 'e' {}; END $MAKE distdir -grep maude foo-0.1/parse.c +$FGREP maude $distdir/parse.c + +: -- 1.7.1
diff --git a/ChangeLog b/ChangeLog index 9589b8b..28b99b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,10 @@ -2010-09-09 Stefano Lattarini <stefano.lattar...@gmail.com> +2010-12-13 Stefano Lattarini <stefano.lattar...@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/yacc1.test: New test scripte, run simple "semantic" + * 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. @@ -37,7 +37,8 @@ * tests/yacc2.test: Make grepping of generated `Makefile.in' and of automake error messages stricter. Do not redirect output of grep to /dev/null. Prefer `cp -f' over plain `cp'. Move call to - aclocal earlier. Reduce the number of empty blank lines. + 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, diff --git a/tests/Makefile.am b/tests/Makefile.am index c1e7ca3..52d3a58 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -790,8 +790,8 @@ werror3.test \ whoami.test \ xsource.test \ xz.test \ +yacc-basic.test \ yacc.test \ -yacc1.test \ yacc2.test \ yacc3.test \ yacc4.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 3703458..b4a896c 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -1057,8 +1057,8 @@ werror3.test \ whoami.test \ xsource.test \ xz.test \ +yacc-basic.test \ yacc.test \ -yacc1.test \ yacc2.test \ yacc3.test \ yacc4.test \ diff --git a/tests/lexvpath.test b/tests/lexvpath.test index a509f2c..0132a22 100755 --- a/tests/lexvpath.test +++ b/tests/lexvpath.test @@ -69,7 +69,7 @@ mkdir sub cd sub ../configure . ./lexoutroot -test -n "$LEX_OUTPUT_ROOT" +test -n "$LEX_OUTPUT_ROOT" # sanity check cd .. $LEX lexer.l diff --git a/tests/yacc1.test b/tests/yacc-basic.test similarity index 94% rename from tests/yacc1.test rename to tests/yacc-basic.test index 743bc51..ea5f4ad 100755 --- a/tests/yacc1.test +++ b/tests/yacc-basic.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2001, 2002, 2010 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 @@ -16,7 +16,7 @@ # Basic semantic checks on Yacc support. -required='bison gcc' +required=bison . ./defs || Exit 1 set -e diff --git a/tests/yacc2.test b/tests/yacc2.test index d04255c..2235efd 100755 --- a/tests/yacc2.test +++ b/tests/yacc2.test @@ -57,7 +57,7 @@ $FGREP 'zardoz.h' Makefile.in && Exit 1 cp -f Makefile.src Makefile.am echo 'YFLAGS = -d' >> Makefile.am -# YFLAGS is a use variable. +# YFLAGS is a user variable. AUTOMAKE_fails grep 'YFLAGS.* user variable' stderr grep 'AM_YFLAGS.* instead' stderr