SETUP: Fedora release 16 (Verne), in-tree build, perl 5.14.1, autoconf 2.68, testsuite run with GNU make 3.82, test scripts run by bash 4.2.10, using GCC and the GNU compilers (4.6.2) and libtool 2.4.0.
RESULTS: The following tests experienced spurious failures because we failed to provide stub `ywrap()' functions to our lexers, and apparently this Fedora release does not offer a "lex library" providing such stubs automatically: - cond35.test - lex3.test - silent-lex-gcc.test - silent-lex-generic.test - silent-many-gcc.test - silent-many-generic.test The attached patch, beckported from similar ones from master and testsuite-work, fixed this issue.
From ca0ba5df0fb8d3a62919b878ee30fa573dde6f93 Mon Sep 17 00:00:00 2001 Message-Id: <ca0ba5df0fb8d3a62919b878ee30fa573dde6f93.1323001440.git.stefano.lattar...@gmail.com> From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Mon, 24 Oct 2011 23:18:34 +0200 Subject: [PATCH] tests: fix spurious failures due to missing 'yywrap()' function The AC_PROG_LEX Autoconf macro does not diagnose a failure to find the "lex library" expected to provide a `yywrap' function (function which is required to link most lex-generated programs). On the contrary, when all the link attempts (i.e., with `-ll' and `-lfl') fail, configure declares that no lex library is needed, and simply proceeds with the configuration process -- only for the build to possibly fail later, at make time. This behaviour is intended; the Autoconf manual reads: ``You are encouraged to use Flex in your sources, since it is both more pleasant to use than plain Lex and the C source it produces is portable. In order to ensure portability, however, you must either provide a function `yywrap' or, if you don't use it (e.g., your scanner has no `#include'-like feature), simply include a `%noyywrap' statement in the scanner's source.'' This AC_PROG_LEX behaviour is causing some spurious failures of the Automake testsuite in environments which lack a proper library providing `yywrap' (this happens for example on Fedora-based systems). The proper workaround is to simply provide a fall-back implementation of `yywrap' in our lexers. * tests/cond35.test: Provide a dummy `yywrap' function. * tests/lex3.test: Likewise. * tests/silent-lex-generic.test: Likewise. * tests/silent-lex-gcc.test: Likewise. * tests/silent-many-generic.test: Likewise. * tests/silent-many-gcc.test: Likewise. Reported by Jim Meyering: <http://lists.gnu.org/archive/html/automake-patches/2011-10/msg00092.html> Cherry-picked (with some edits) from commits `v1.11-1085-gb5c3968' (master) and `v1.11-871-geb147a1' (testsuite-work). --- ChangeLog | 40 ++++++++++++++++++++++++++++++++++++++++ tests/cond35.test | 8 +++++++- tests/lex3.test | 8 +++++++- tests/silent-lex-gcc.test | 5 ++++- tests/silent-lex-generic.test | 5 ++++- tests/silent-many-gcc.test | 9 +++++++-- tests/silent-many-generic.test | 7 ++++++- 7 files changed, 75 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1c97ecd..b152022 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,43 @@ +2011-12-04 Stefano Lattarini <stefano.lattar...@gmail.com> + + tests: fix spurious failures due to missing 'yywrap()' function + + The AC_PROG_LEX Autoconf macro does not diagnose a failure to find + the "lex library" expected to provide a `yywrap' function (function + which is required to link most lex-generated programs). On the + contrary, when all the link attempts (i.e., with `-ll' and `-lfl') + fail, configure declares that no lex library is needed, and simply + proceeds with the configuration process -- only for the build to + possibly fail later, at make time. + + This behaviour is intended; the Autoconf manual reads: + ``You are encouraged to use Flex in your sources, since it is + both more pleasant to use than plain Lex and the C source it + produces is portable. In order to ensure portability, however, + you must either provide a function `yywrap' or, if you don't use + it (e.g., your scanner has no `#include'-like feature), simply + include a `%noyywrap' statement in the scanner's source.'' + + This AC_PROG_LEX behaviour is causing some spurious failures of + the Automake testsuite in environments which lack a proper library + providing `yywrap' (this happens for example on Fedora-based + systems). The proper workaround is to simply provide a fall-back + implementation of `yywrap' in our lexers. + + See also partially-overlapping commit `v1.11-871-geb147a1' (from + the 'testsuite-work' branch), which was motivated by similar + spurious failures experienced when cross-compiling. + + From a report by Jim Meyering: + <http://lists.gnu.org/archive/html/automake-patches/2011-10/msg00092.html> + + * tests/cond35.test: Provide a dummy `yywrap' function. + * tests/lex3.test: Likewise. + * tests/silent-lex-generic.test: Likewise. + * tests/silent-lex-gcc.test: Likewise. + * tests/silent-many-generic.test: Likewise. + * tests/silent-many-gcc.test: Likewise. + 2011-12-04 Paul Eggert <egg...@cs.ucla.edu> depcomp: spelling fix diff --git a/tests/cond35.test b/tests/cond35.test index 0f3b8cf..0e75c79 100755 --- a/tests/cond35.test +++ b/tests/cond35.test @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (C) 2004 Free Software Foundation, Inc. +# Copyright (C) 2004, 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 @@ -61,6 +61,12 @@ test `grep tparse.h: Makefile.in | wc -l` = 1 cat > tscan.l << 'END' %% "END" return EOF; +%% +/* Avoid possible link errors. */ +int yywrap (void) +{ + return 1; +} END cat > tparse.y << 'END' diff --git a/tests/lex3.test b/tests/lex3.test index c4120cf..c0af6b2 100755 --- a/tests/lex3.test +++ b/tests/lex3.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 1999, 2001, 2002, 2003, 2004, 2010 Free Software +# Copyright (C) 1999, 2001, 2002, 2003, 2004, 2010, 2011 Free Software # Foundation, Inc. # # This program is free software; you can redistribute it and/or modify @@ -57,6 +57,12 @@ main () return 0; } + +/* Avoid possible link errors. */ +int yywrap (void) +{ + return 1; +} END set -e diff --git a/tests/silent-lex-gcc.test b/tests/silent-lex-gcc.test index 426dc50..6545752 100755 --- a/tests/silent-lex-gcc.test +++ b/tests/silent-lex-gcc.test @@ -1,5 +1,5 @@ #!/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 @@ -57,6 +57,9 @@ 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 diff --git a/tests/silent-lex-generic.test b/tests/silent-lex-generic.test index 66535e8..2b2183e 100755 --- a/tests/silent-lex-generic.test +++ b/tests/silent-lex-generic.test @@ -1,5 +1,5 @@ #!/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 @@ -57,6 +57,9 @@ 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 diff --git a/tests/silent-many-gcc.test b/tests/silent-many-gcc.test index d770a46..9101675 100755 --- a/tests/silent-many-gcc.test +++ b/tests/silent-many-gcc.test @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# Copyright (C) 2009, 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 @@ -160,6 +160,11 @@ cat > foo5.l <<'EOF' "END" return EOF; . %% +/* Avoid possible link errors. */ +int yywrap (void) +{ + return 1; +} EOF cat > foo6.y <<'EOF' %{ @@ -184,7 +189,7 @@ $AUTOCONF # Force gcc ("fast") depmode. # This apparently useless "for" loop is here to simplify the syncing -# with sister test `silent-many-gcc.test'. +# with sister test `silent-many-generic.test'. for config_args in \ am_cv_CC_dependencies_compiler_type=gcc do diff --git a/tests/silent-many-generic.test b/tests/silent-many-generic.test index 223a97c..4a234c1 100755 --- a/tests/silent-many-generic.test +++ b/tests/silent-many-generic.test @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# Copyright (C) 2009, 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 @@ -162,6 +162,11 @@ cat > foo5.l <<'EOF' "END" return EOF; . %% +/* Avoid possible link errors. */ +int yywrap (void) +{ + return 1; +} EOF cat > foo6.y <<'EOF' %{ -- 1.7.2.3
config.log.gz
Description: GNU Zip compressed data
test-suite.log.gz
Description: GNU Zip compressed data