summaryrefslogtreecommitdiff
path: root/lib/autoconf/functions.m4
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2016-11-03 10:28:07 -0500
committerEric Blake <eblake@redhat.com>2016-12-20 13:34:20 -0600
commit4523f7c32b052e805c4081fa6a55c7414d94d791 (patch)
tree41d30ba5b52857180df5609884d5adf07ad07d87 /lib/autoconf/functions.m4
parenteea950a012e8725da53e0444a43d508d0b645d8f (diff)
downloadautoconf-4523f7c32b052e805c4081fa6a55c7414d94d791.tar.gz
AC_CHECK_FUNCS_ONCE: honor current AC_LANG
Previously, AC_CHECK_FUNCS_ONCE collected a list of function names to check, but ran the checks using the AC_LANG that was active during the first encounter of the macro. In practice, this is usually the C language, and we haven't had actual reports of projects attempting to use AC_CHECK_FUNCS_ONCE across multiple languages, rather this was discovered by code inspection. With this patch, the code now tracks a separate per-language list of names to check. Note, however, that it is only possible to check for a given function name in one language; attempting to add a name again under AC_CHECK_FUNCS_ONCE while a different language is active is a no-op (this still makes sense because the side-effect of defining the CPP macro HAVE_FUNC does not include a language prefix). * lib/autoconf/functions.m4 (_AC_CHECK_FUNC_ONCE) (_AC_FUNCS_EXPANSION): * NEWS: Mention it. Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'lib/autoconf/functions.m4')
-rw-r--r--lib/autoconf/functions.m417
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4
index 66abe294..7b98a066 100644
--- a/lib/autoconf/functions.m4
+++ b/lib/autoconf/functions.m4
@@ -96,9 +96,9 @@ AC_DEFUN([AC_CHECK_FUNCS],
# -----------------------------
# Check for a single FUNCTION once.
m4_define([_AC_CHECK_FUNC_ONCE],
-[_AH_CHECK_FUNC([$1])AC_DEFUN([_AC_Func_$1],
- [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_func_list], [" $1"])])
-_AC_FUNCS_EXPANSION])AC_REQUIRE([_AC_Func_$1])])
+[_AH_CHECK_FUNC([$1])AC_DEFUN([_AC_Func_$1], [m4_divert_text([INIT_PREPARE],
+ [AS_VAR_APPEND([ac_func_]]_AC_LANG_ABBREV[[_list], [" $1"])])
+_AC_FUNCS_EXPANSION(_AC_LANG_ABBREV)])AC_REQUIRE([_AC_Func_$1])])
# AC_CHECK_FUNCS_ONCE(FUNCTION...)
# --------------------------------
@@ -107,12 +107,13 @@ _AC_FUNCS_EXPANSION])AC_REQUIRE([_AC_Func_$1])])
AC_DEFUN([AC_CHECK_FUNCS_ONCE],
[m4_map_args_w([$1], [_AC_CHECK_FUNC_ONCE(], [)])])
+# _AC_FUNCS_EXPANSION(LANG)
+# -------------------------
+# One-shot code per language LANG for checking all functions registered by
+# AC_CHECK_FUNCS_ONCE while that language was active.
m4_define([_AC_FUNCS_EXPANSION],
-[
- m4_divert_text([DEFAULTS], [ac_func_list=])
- AC_CHECK_FUNCS([$ac_func_list])
- m4_define([_AC_FUNCS_EXPANSION], [])
-])
+[m4_ifndef([$0($1)], [m4_define([$0($1)])m4_divert_text([DEFAULTS],
+[ac_func_$1_list=])AC_CHECK_FUNCS([$ac_func_$1_list])])])
# _AC_REPLACE_FUNC(FUNCTION)