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