Re: [PATCH] Revert 'Fix logic error in _AC_PROG_LEX_YYTEXT_DECL (#109320)'

Paul Eggert <[email protected]>
Newsgroups gmane.comp.sysutils.autoconf.patches
Organization UCLA Computer Science Department
Message-ID <[email protected]>
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 :-).
0001-AC_PROG_LEX-no-longer-sets-LEXLIB-for-yywrap.patch (text/x-patch, 2.9 KB)
From 29ede6b96feee29c0c477d1659081bbdb82cd8b3 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.