On 7/16/20 10:34 AM, Ross Burton wrote:
Wouldn't that break cross-compilation where a host flex is present but
target libfl isn't?  That case worked previously and should work fine,
as libfl isn't actually that useful.

That shouldn't be a problem when building from tarballs, as flex shouldn't be needed then and the patch is a win because it prevents the build from failing unnecessarily. However, it could be a problem when building from Git repositories where you need flex but may well not need the library.

So I installed the attached patch, which implements Zack's first suggestion. I'm being somewhat bold in installing here; feel free to comment and suggest improvements (or suggest I revert :-).
>From 29ede6b96feee29c0c477d1659081bbdb82cd8b3 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Thu, 16 Jul 2020 10:39:56 -0700
Subject: [PATCH] AC_PROG_LEX no longer sets LEXLIB for yywrap

Suggested by Zack Weinberg in:
https://lists.gnu.org/r/autoconf-patches/2020-07/msg00016.html
* lib/autoconf/programs.m4 (_AC_PROG_LEX_YYTEXT_DECL):
Define yywrap too.
---
 NEWS                     |  4 ++++
 doc/autoconf.texi        | 13 +++++++++----
 lib/autoconf/programs.m4 |  5 +++++
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 3c5dfec2..dd3b2896 100644
--- a/NEWS
+++ b/NEWS
@@ -104,6 +104,10 @@ GNU Autoconf NEWS - User visible changes.
 - AC_PROG_CC_STDC, AC_PROG_CC_C89, AC_PROG_CC_C99 have been marked as obsolete.
   Applications should use AC_PROG_CC.
 
+- AC_PROG_LEX no longer sets LEXLIB to be nonempty merely to define
+  the yywrap function.  Packages should define yywrap themselves, or
+  use %noyywrap.
+
 - AC_USE_SYSTEM_EXTENSIONS now enables more extensions on HP-UX,
   macOS, and MINIX, as well as on systems conforming to recent
   ISO/IEC C technical reports and specifications.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 379e3c2f..b8f889cc 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -4177,15 +4177,20 @@ The result of the test can be overridden by setting the variable
 @cvindex YYTEXT_POINTER
 @ovindex LEX_OUTPUT_ROOT
 @caindex prog_LEX
-If @code{flex} is found, set output variable @code{LEX} to @samp{flex}
-and @code{LEXLIB} to @option{-lfl}, if that library is in a standard
-place.  Otherwise set @code{LEX} to @samp{lex} and @code{LEXLIB} to
-@option{-ll}, if found.  If neither variant is available, set @code{LEX}
+If @code{flex} is found, set output variable @code{LEX} to @samp{flex}.
+Otherwise set @code{LEX} to @samp{lex}, if found.
+If neither variant is available, set @code{LEX}
 to @samp{:}; for packages that ship the generated @file{file.yy.c}
 alongside the source @file{file.l}, this default allows users without a
 lexer generator to still build the package even if the timestamp for
 @file{file.l} is inadvertently changed.
 
+If generated lexers need a library to work, set output variable
+@code{LEXLIB} to an option for that library (e.g., @option{-ll});
+otherwise define @code{LEXLIB} to empty.  A library that merely defines
+@code{main} and @code{yywrap} placeholder functions is not considered
+to be needed.
+
 Define @code{YYTEXT_POINTER} if @code{yytext} defaults to @samp{char *} instead
 of to @samp{char []}.  Also set output variable @code{LEX_OUTPUT_ROOT} to
 the base of the file name that the lexer generates; usually
diff --git a/lib/autoconf/programs.m4 b/lib/autoconf/programs.m4
index 4f910fb0..6fd44a3b 100644
--- a/lib/autoconf/programs.m4
+++ b/lib/autoconf/programs.m4
@@ -735,6 +735,11 @@ f { unput (yytext[0]); }
 extern char *yytext;
 #endif
 int
+yywrap (void)
+{
+  return 1;
+}
+int
 main (void)
 {
   return ! yylex () + ! yywrap ();
-- 
2.17.1

Reply via email to