From d068c0a5ac8ef095fe39b17fefe576b17fc3ab4a Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 3 Nov 2016 20:03:06 -0500 Subject: [PATCH] AC_CHECK_FUNCS_ONCE: hoist cache name computation to m4 time Rather than perform a sed script on each element of the $ac_func_c_list to compute the corresponding cache name, we can inline enough of AC_CHECK_FUNC to bypass the normal polymorphic code, and instead directly use the literal function name that we are consuming from the list. While at it, we can use echo instead of cat to append to confdefs.h, for another process shaved. The resulting configure script is roughly unchanged in size, but performs slightly faster. * lib/autoconf/functions.m4 (AC_CHECK_FUNC): Split out shell function registration... (_AC_CHECK_FUNC_FN): ...to here. (_AC_FUNCS_EXPANSION): Use it to inline enough of AC_CHECK_FUNC to operate on a literal rather than a shell variable, for fewer sed calls. Signed-off-by: Eric Blake --- lib/autoconf/functions.m4 | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4 index b937b2cc..76824a26 100644 --- a/lib/autoconf/functions.m4 +++ b/lib/autoconf/functions.m4 @@ -51,17 +51,20 @@ m4_define([_AC_CHECK_FUNC_BODY], ])# _AC_CHECK_FUNC_BODY +m4_define([_AC_CHECK_FUNC_FN], +[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_func], + [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_func], + [LINENO FUNC VAR], + [Tests whether FUNC exists, setting the cache variable VAR accordingly])], + [_AC_CHECK_FUNC_BODY])]) + # AC_CHECK_FUNC(FUNCTION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ----------------------------------------------------------------- # Check whether FUNCTION links in the current language. Set the cache # variable ac_cv_func_FUNCTION accordingly, then execute # ACTION-IF-FOUND or ACTION-IF-NOT-FOUND. AC_DEFUN([AC_CHECK_FUNC], -[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_func], - [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_func], - [LINENO FUNC VAR], - [Tests whether FUNC exists, setting the cache variable VAR accordingly])], - [_$0_BODY])]dnl +[_AC_CHECK_FUNC_FN()]dnl [AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$1])]dnl [ac_fn_[]_AC_LANG_ABBREV[]_check_func "$LINENO" "$1" "ac_var" AS_VAR_IF([ac_var], [yes], [$2], [$3]) @@ -111,14 +114,21 @@ AC_DEFUN([AC_CHECK_FUNCS_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. +# AC_CHECK_FUNCS_ONCE while that language was active. We have to inline +# portions of AC_CHECK_FUNC, because although we operate on shell +# variables, we know they represent literals at that point in time, +# where we don't want to trigger normal AS_VAR_PUSHDEF shell code. m4_define([_AC_FUNCS_EXPANSION], [m4_ifndef([$0($1)], [m4_define([$0($1)])m4_divert_text([DEFAULTS], [ac_func_$1_list=])ac_func= for ac_item in $ac_func_$1_list do if test $ac_func; then - AC_CHECK_FUNC([$ac_func], [AC_DEFINE_UNQUOTED([$ac_item])]) + _AC_CHECK_FUNC_FN()ac_fn_$1_check_func "$LINENO" ]dnl +[$ac_func ac_cv_func_$ac_func + if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then + echo "[#]define $ac_item 1" >> confdefs.h + fi ac_func= else ac_func=$ac_item -- 2.11.4.GIT