From 89839f42af89bee9509b5f38190acdbeab263455 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 21 Oct 2008 08:55:05 -0600 Subject: [PATCH] Use a shell function for _AC_PREPROC_IFELSE. * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE_BODY): New macro. (_AC_PREPROC_IFELSE): Use a shell function. * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Factor for faster execution. (AS_REQUIRE_SHELL_FN): Bypass AS_REQUIRE if function has already been provided. Signed-off-by: Eric Blake --- ChangeLog | 10 ++++++++++ lib/autoconf/general.m4 | 34 ++++++++++++++++++++++++---------- lib/m4sugar/m4sh.m4 | 17 +++++++++++------ 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index e57150ef..f98b7086 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-10-21 Paolo Bonzini + and Eric Blake + + Use a shell function for _AC_PREPROC_IFELSE. + * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE_BODY): New macro. + (_AC_PREPROC_IFELSE): Use a shell function. + * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Factor for faster execution. + (AS_REQUIRE_SHELL_FN): Bypass AS_REQUIRE if function has already + been provided. + 2008-10-21 Eric Blake Add banners to generated files. diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 32c13f6f..b5c720d8 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -2377,6 +2377,23 @@ AC_DEFUN([AC_RUN_LOG], ## ------------------------ ## +# _AC_PREPROC_IFELSE_BODY +# ----------------------- +# Shell function body for _AC_PREPROC_IFELSE. +m4_define([_AC_PREPROC_IFELSE_BODY], +[ AS_LINENO_PUSH([$[]1]) + AS_IF([_AC_DO_STDERR([$ac_cpp conftest.$ac_ext]) >/dev/null && { + test -z "$ac_[]_AC_LANG_ABBREV[]_preproc_warn_flag$ac_[]_AC_LANG_ABBREV[]_werror_flag" || + test ! -s conftest.err + }], + [ac_retval=0], + [_AC_MSG_LOG_CONFTEST + ac_retval=1]) + rm -f conftest.err + AS_LINENO_POP + return $ac_retval +]) + # _AC_PREPROC_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ---------------------------------------------------------------- @@ -2385,18 +2402,15 @@ AC_DEFUN([AC_RUN_LOG], # This macro can be used during the selection of a preprocessor. # eval is necessary to expand ac_cpp. AC_DEFUN([_AC_PREPROC_IFELSE], -[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl -AS_IF([_AC_DO_STDERR([$ac_cpp conftest.$ac_ext]) >/dev/null && { - test -z "$ac_[]_AC_LANG_ABBREV[]_preproc_warn_flag$ac_[]_AC_LANG_ABBREV[]_werror_flag" || - test ! -s conftest.err - }], - [$2], - [_AC_MSG_LOG_CONFTEST - $3]) -rm -f conftest.err m4_ifval([$1], [conftest.$ac_ext])[]dnl +[AC_REQUIRE_SHELL_FN([ac_func_]_AC_LANG_ABBREV[_try_cpp], + [AS_FUNCTION_DESCRIBE([ac_func_]_AC_LANG_ABBREV[_try_cpp], [LINENO], + [Try to preprocess conftest.$ac_ext, and return whether this succeeded.])], + [$0_BODY])]dnl +[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl +[AS_IF([ac_func_[]_AC_LANG_ABBREV[]_try_cpp "$LINENO"], [$2], [$3]) +m4_ifvaln([$1], [rm -f conftest.$ac_ext])dnl ])# _AC_PREPROC_IFELSE - # AC_PREPROC_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------- # Try to preprocess PROGRAM. Requires that the preprocessor for the diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4 index 5ed52d49..9ef15f57 100644 --- a/lib/m4sugar/m4sh.m4 +++ b/lib/m4sugar/m4sh.m4 @@ -317,11 +317,14 @@ m4_divert_pop[]dnl # Note: we expand _m4_divert_desired before passing it to m4_divert_require, # otherwise we would need to use m4_pushdef and m4_popdef instead of # simply m4_define. +# +# Since $2 can be quite large, this is factored for faster execution, giving +# either m4_require([$1], [$2]) or m4_divert_require(desired, [$1], [$2]). m4_defun([AS_REQUIRE], -[m4_define([_m4_divert_desired], [m4_default_quoted([$3], [M4SH-INIT])])dnl -m4_if(m4_eval(_m4_divert(_m4_divert_dump) <= _m4_divert(_m4_divert_desired)), 1, - [m4_require([$1], [$2])], - [m4_divert_require(_m4_divert(_m4_divert_desired), [$1], [$2])])]) +[m4_define([_m4_divert_desired], [m4_default_quoted([$3], [M4SH-INIT])])]dnl +[m4_if(m4_eval(_m4_divert(_m4_divert_dump) <= _m4_divert(_m4_divert_desired)), + 1, [m4_require(], + [m4_divert_require(_m4_divert(_m4_divert_desired),]) [$1], [$2])]) # AS_REQUIRE_SHELL_FN(NAME-TO-CHECK, COMMENT, BODY-TO-EXPAND, @@ -333,12 +336,14 @@ m4_if(m4_eval(_m4_divert(_m4_divert_dump) <= _m4_divert(_m4_divert_desired)), 1, # provided (often via AS_FUNCTION_DESCRIBE), it is listed with a # newline before the function name. m4_define([AS_REQUIRE_SHELL_FN], +[m4_provide_if([AS_SHELL_FN_$1], [], [AS_REQUIRE([AS_SHELL_FN_$1], -[m4_provide([AS_SHELL_FN_$1])m4_n([$2])$1 () +[m4_provide([AS_SHELL_FN_$1]) +m4_n([$2])$1 () { $3 } [#] $1 -], m4_default_quoted([$4], [M4SH-INIT-FN]))]) +], m4_default_quoted([$4], [M4SH-INIT-FN]))])]) # _AS_RUN(TEST, [SHELL]) -- 2.47.2