Re: AC_PROG_EGREP and $EGREP_TRADITIONAL and shell conditional statements

Paul Eggert <[email protected]>
Newsgroups gmane.comp.sysutils.autoconf.general
Organization UCLA Computer Science Department
Message-ID <[email protected]>
On 2023-03-30 07:24, Zack Weinberg wrote:
> This configure.ac*is*  incorrect, but since we are trying to make
> 2.73 a smooth upgrade from 2.71 I do think we should keep it working,
>    and the obvious way to do that is to fold the "fallback check for a
>    more limited egrep" into AC_PROG_EGREP.  Any objections to that
>    change?

Not from me. I gave that a shot by installing the attached little patch. 
I hope this is the sort of thing you had in mind; if not, please feel 
free to improve it.
0001-Cater-to-programs-misusing-AC_EGREP_HEADER.patch (text/x-patch, 2.4 KB)
From 232cab527897bcdf4d55492d41af73d31905bda5 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email protected]>
Date: Fri, 31 Mar 2023 10:46:20 -0700
Subject: [PATCH] Cater to programs misusing AC_EGREP_HEADER
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Problem reported by Frederic Berat in:
https://lists.gnu.org/archive/html/autoconf/2022-11/msg00127.html
* lib/autoconf/programs.m4 (AC_PROG_EGREP): Also set
EGREP_TRADITIONAL and ac_cv_path_EGREP_TRADITIONAL.
* tests/c.at (AC_PROG_EGREP and AC_EGREP_HEADER):
New test, taken from Frederic Berat’s email in:
https://lists.gnu.org/r/autoconf/2023-03/msg00043.html
---
 lib/autoconf/programs.m4 | 10 ++++++++++
 tests/c.at               | 24 ++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/lib/autoconf/programs.m4 b/lib/autoconf/programs.m4
index 1b7460c8..62ba6b8b 100644
--- a/lib/autoconf/programs.m4
+++ b/lib/autoconf/programs.m4
@@ -371,6 +371,16 @@ AC_CACHE_CHECK([for egrep], ac_cv_path_EGREP,
    fi])
  EGREP="$ac_cv_path_EGREP"
  AC_SUBST([EGREP])
+ dnl
+ dnl Also set EGREP_TRADITIONAL even though unnecessary here,
+ dnl for wrong but too-common code with the following pattern:
+ dnl   AC_PROG_EGREP
+ dnl   if false; then
+ dnl      AC_EGREP_HEADER([printf], [stdio.h], [has_printf=yes])
+ dnl   fi
+ dnl   AC_EGREP_HEADER([malloc], [stdlib.h], [has_malloc=yes])
+ EGREP_TRADITIONAL=$EGREP
+ ac_cv_path_EGREP_TRADITIONAL=$EGREP
 ])# AC_PROG_EGREP
 
 # _AC_PROG_EGREP_TRADITIONAL
diff --git a/tests/c.at b/tests/c.at
index c37f43b1..fad54760 100644
--- a/tests/c.at
+++ b/tests/c.at
@@ -232,6 +232,30 @@ AT_CHECK_DEFINES(
 AT_CLEANUP
 
 
+## ----------------------------------- ##
+## AC_PROG_EGREP and AC_EGREP_HEADER.  ##
+## ----------------------------------- ##
+
+AT_SETUP([AC_PROG_EGREP and AC_EGREP_HEADER])
+
+_AT_CHECK_AC_MACRO(
+[[AC_PROG_CPP
+  AC_PROG_EGREP
+
+  # Although this code is incorrect (it should use AS_IF),
+  # it follows a too-common real world pattern.
+  # For now, test for it; we may remove this test later.
+  if false; then
+    AC_EGREP_HEADER([^], [limits.h])
+  fi
+
+  AC_EGREP_HEADER([$], [limits.h], [],
+    [AC_MSG_ERROR([[egrep-related macros do not tolerate misuse of 'if']])])
+]])
+
+AT_CLEANUP
+
+
 ## ------------------------------------ ##
 ## AC_NO_EXECUTABLES (working linker).  ##
 ## ------------------------------------ ##
-- 
2.37.2
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.