* 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>
+ 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,
lexvpath.test \
lex-subobj-nodep.test \
lex-lib.test \
+lex-lib-external.test \
lex-libobj.test \
lex-noyywrap.test \
lflags.test \
lexvpath.test \
lex-subobj-nodep.test \
lex-lib.test \
+lex-lib-external.test \
lex-libobj.test \
lex-noyywrap.test \
lflags.test \
/* Avoid possible link errors. */
int yywrap (void)
{
- return 0;
+ return 1;
}
END
--- /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 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
+
+:
# 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
cat > mu.c << 'END'
int yywrap (void)
{
- return 0;
+ return 1;
}
END
cat > yywrap.c << 'END'
int yywrap (void)
{
- return 0;
+ return 1;
}
END
$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.
int yywrap(void)
{
- return 0;
+ return 1;
}
END
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'
/* Avoid possible link errors. */
int yywrap (void)
{
- return 0;
+ return 1;
}
END
/* Avoid possible link errors. */
int yywrap (void)
{
- return 0;
+ return 1;
}
END
/* Avoid possible link errors. */
int yywrap (void)
{
- return 0;
+ return 1;
}
int main (void)
{
/* Avoid possible link errors. */
int yywrap (void)
{
- return 0;
+ return 1;
}
int main (void)
{
/* Avoid possible link errors. */
int yywrap (void)
{
- return 0;
+ return 1;
}
EOF
cat > foo6.y <<'EOF'
/* Avoid possible link errors. */
int yywrap (void)
{
- return 0;
+ return 1;
}
EOF
cat > foo6.y <<'EOF'