lex tests: avoid possible hang; fix and extend
authorStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 1 Jun 2011 15:43:44 +0000 (17:43 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 1 Jun 2011 16:53:52 +0000 (18:53 +0200)
* tests/lex3.test (foo.l:yywrap): Return 1, not 0, to avoid hangs.
Bug introduced in commit 'v1.11-871-geb147a1'.
(Makefile.am): Do not add `@LEXLIB@' to `$(LDADD)', as we define
our own `yywrap' function.
* tests/lex.test (tscan.l): In `yywrap', return 1, not 0, for
consistency with the default flex implementation.
* tests/lex-libobj.test (yywrap.c): Likewise.
* tests/lex-subobj-nodep.test (s1.l): Likewise.
* tests/lexvpath.test (foo.c): Likewise.
* tests/silent-lex-gcc (foo.l): Likewise.
* tests/silent-lex-generic (foo.l): Likewise.
* tests/silent-many-gcc (foo5.l): Likewise.
* tests/silent-many-generic (foo5.l): Likewise.
* tests/lex-lib.test (mu.c): Likewise.
Update heading comments, to refer to ...
* tests/lex-lib-external.test: ... this new test, which checks
that we can get use the `yywrap' function from a system-wide
library, if that's available.

14 files changed:
ChangeLog
tests/Makefile.am
tests/Makefile.in
tests/cond35.test
tests/lex-lib-external.test [new file with mode: 0755]
tests/lex-lib.test
tests/lex-libobj.test
tests/lex-subobj-nodep.test
tests/lex3.test
tests/lexvpath.test
tests/silent-lex-gcc.test
tests/silent-lex-generic.test
tests/silent-many-gcc.test
tests/silent-many-generic.test

index cc9dd2e..51567aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,27 @@
 2011-06-01  Stefano Lattarini  <stefano.lattarini@gmail.com>
 
+       lex tests: avoid possible hang; fix and extend
+       * tests/lex3.test (foo.l:yywrap): Return 1, not 0, to avoid hangs.
+       Bug introduced in commit 'v1.11-871-geb147a1'.
+       (Makefile.am): Do not add `@LEXLIB@' to `$(LDADD)', as we define
+       our own `yywrap' function.
+       * tests/lex.test (tscan.l): In `yywrap', return 1, not 0, for
+       consistency with the default flex implementation.
+       * tests/lex-libobj.test (yywrap.c): Likewise.
+       * tests/lex-subobj-nodep.test (s1.l): Likewise.
+       * tests/lexvpath.test (foo.c): Likewise.
+       * tests/silent-lex-gcc (foo.l): Likewise.
+       * tests/silent-lex-generic (foo.l): Likewise.
+       * tests/silent-many-gcc (foo5.l): Likewise.
+       * tests/silent-many-generic (foo5.l): Likewise.
+       * tests/lex-lib.test (mu.c): Likewise.
+       Update heading comments, to refer to ...
+       * tests/lex-lib-external.test: ... this new test, which checks
+       that we can get use the `yywrap' function from a system-wide
+       library, if that's available.
+
+2011-06-01  Stefano Lattarini  <stefano.lattarini@gmail.com>
+
        tests: prefer `skip_' over `echo ...; Exit 77'
        * tests/self-check-cleanup.test: When the test must be skipped,
        use `skip_ REASON' instead of `echo REASON; Exit 77'.  Also,
index 0bb993a..02a99b6 100644 (file)
@@ -558,6 +558,7 @@ lexcpp.test \
 lexvpath.test \
 lex-subobj-nodep.test \
 lex-lib.test \
+lex-lib-external.test \
 lex-libobj.test \
 lex-noyywrap.test \
 lflags.test \
index 875b06e..4e4d4a9 100644 (file)
@@ -846,6 +846,7 @@ lexcpp.test \
 lexvpath.test \
 lex-subobj-nodep.test \
 lex-lib.test \
+lex-lib-external.test \
 lex-libobj.test \
 lex-noyywrap.test \
 lflags.test \
index 143c082..f2b0ded 100755 (executable)
@@ -64,7 +64,7 @@ cat > tscan.l << 'END'
 /* Avoid possible link errors. */
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 END
 
diff --git a/tests/lex-lib-external.test b/tests/lex-lib-external.test
new file mode 100755 (executable)
index 0000000..5f04594
--- /dev/null
@@ -0,0 +1,75 @@
+#! /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 we can get use the `yywrap' function from a system-wide
+# library, if that's available.
+
+required='cc lex'
+. ./defs || Exit 1
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lexer
+lexer_SOURCES = foo.l
+lexer_LDADD = $(LEXLIB)
+
+.PHONY: have-lexlib
+have-lexlib:
+       test x'$(LEXLIB)' != x
+       echo 'int main (void) { return yywrap (); }' > x.c
+       $(CC) -c x.c
+       $(CC) x.$(OBJEXT) $(LEXLIB)
+       rm -f x.c *.$(OBJEXT) *.o *.out *.exe
+END
+
+cat > foo.l <<'END'
+%%
+"GOOD"   return EOF;
+.
+%%
+int main (void)
+{
+  /* 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;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE have-lexlib || skip_ "no system-wide lex library found"
+
+# Program should build and run and distribute.
+$MAKE all
+if cross_compiling; then :; else
+  echo GOOD | ./lexer
+  echo BAD | ./lexer && Exit 1
+fi
+$MAKE distcheck
+
+:
index 07af3ff..e5fdc00 100755 (executable)
@@ -17,6 +17,7 @@
 
 # Check that we can provide a personal `yywrap' function in a custom
 # library.
+# See also test `lex-lib-external.test'.
 
 required='cc lex'
 . ./defs || Exit 1
@@ -41,7 +42,7 @@ END
 cat > mu.c << 'END'
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 END
 
index 1ca1d4c..449bd47 100755 (executable)
@@ -41,7 +41,7 @@ END
 cat > yywrap.c << 'END'
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 END
 
@@ -64,7 +64,7 @@ grep LIBOBJS Makefile # For debugging.
 $MAKE
 $MAKE distclean
 
-# Force no "system lex library".
+# Force "no system lex library".
 ./configure LEXLIB='-L /lib'
 grep LIBOBJS Makefile # For debugging.
 grep '^LIBOBJS *=.*yywrap.*\.o' Makefile # Sanity check.
index 322ae96..5db7168 100755 (executable)
@@ -51,7 +51,7 @@ int main (void)
 
 int yywrap(void)
 {
-  return 0;
+  return 1;
 }
 END
 
index 9c2f5b4..ae79796 100755 (executable)
@@ -29,9 +29,8 @@ AC_OUTPUT
 END
 
 cat > Makefile.am << 'END'
-LDADD             = @LEXLIB@
-noinst_PROGRAMS   = foo
-foo_SOURCES       = foo.l
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.l
 END
 
 cat > foo.l << 'END'
@@ -53,7 +52,7 @@ int main (void)
 /* Avoid possible link errors. */
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 END
 
index 93902b3..2f54256 100755 (executable)
@@ -59,7 +59,7 @@ int main (void)
 /* Avoid possible link errors. */
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 END
 
index 2a691c3..e01fd72 100755 (executable)
@@ -58,7 +58,7 @@ cat > foo.l <<'EOF'
 /* Avoid possible link errors. */
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 int main (void)
 {
index bc3ffff..7d2b197 100755 (executable)
@@ -58,7 +58,7 @@ cat > foo.l <<'EOF'
 /* Avoid possible link errors. */
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 int main (void)
 {
index 8cdb35b..b2d4174 100755 (executable)
@@ -161,7 +161,7 @@ cat > foo5.l <<'EOF'
 /* Avoid possible link errors. */
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 EOF
 cat > foo6.y <<'EOF'
index 7d615ac..17dea2c 100755 (executable)
@@ -162,7 +162,7 @@ cat > foo5.l <<'EOF'
 /* Avoid possible link errors. */
 int yywrap (void)
 {
-  return 0;
+  return 1;
 }
 EOF
 cat > foo6.y <<'EOF'