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