automake-patches
[Top][All Lists]
Advanced

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

branch-11.1 testsuite on Fedora ppc-64 [1] [few spurious failures; FIXED


From: Stefano Lattarini
Subject: branch-11.1 testsuite on Fedora ppc-64 [1] [few spurious failures; FIXED now]
Date: Sun, 4 Dec 2011 13:32:55 +0100
User-agent: KMail/1.13.7 (Linux/2.6.30-2-686; KDE/4.6.5; i686; ; )

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: <address@hidden>
From: Stefano Lattarini <address@hidden>
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  <address@hidden>
+
+       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  <address@hidden>
 
        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

Attachment: config.log.gz
Description: GNU Zip compressed data

Attachment: test-suite.log.gz
Description: GNU Zip compressed data


reply via email to

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