summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2023-03-31 10:46:20 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2023-03-31 10:47:49 -0700
commit232cab527897bcdf4d55492d41af73d31905bda5 (patch)
tree2883a588fbf3d295aca39edf3b69cbdf1dde1a3e
parente05aa447945c0d72ad924fd89a28830cf1a0f8d3 (diff)
downloadautoconf-232cab527897bcdf4d55492d41af73d31905bda5.tar.gz
Cater to programs misusing AC_EGREP_HEADER
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
-rw-r--r--lib/autoconf/programs.m410
-rw-r--r--tests/c.at24
2 files changed, 34 insertions, 0 deletions
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). ##
## ------------------------------------ ##