automake-patches
[Top][All Lists]
Advanced

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

[PATCH] {master} Extend, fix and improve tests on Lex and Yacc support.


From: Stefano Lattarini
Subject: [PATCH] {master} Extend, fix and improve tests on Lex and Yacc support.
Date: Mon, 13 Dec 2010 19:54:05 +0100
User-agent: KMail/1.13.3 (Linux/2.6.30-2-686; KDE/4.4.4; i686; ; )

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 <address@hidden>
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  <address@hidden>
+
+       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  <address@hidden>
 
        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  <address@hidden>
+2010-12-13  Stefano Lattarini  <address@hidden>
 
        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

reply via email to

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