autoconf/lib/autoconf/c.m4 | 24 ++++++++++++++++++++++++ autoconf/lib/autoconf/functions.m4 | 4 +++- autoconf/lib/autoconf/lang.m4 | 7 +++++++ 3 files changed, 34 insertions(+), 1 deletions(-) diff --git a/autoconf/lib/autoconf/c.m4 b/autoconf/lib/autoconf/c.m4 index 2a28a3b..f4c5f81 100644 --- a/autoconf/lib/autoconf/c.m4 +++ b/autoconf/lib/autoconf/c.m4 @@ -253,6 +253,25 @@ choke me ], [return $1 ();])]) +# AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN(C)(FUNCTION) +# ---------------------------------- +# This will test if function is available as +# gcc3 builtin. +# +m4_define([AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN(C)], +[AC_LANG_PROGRAM( +[#ifndef __GNUC__ +choke me +#else +#undef $1 +/* Declare this function with same prototype as __builtin_$1. + This removes warning about conflicting type with builtin */ +__typeof__(__builtin_$1) $1; + +__typeof__(__builtin_$1) *f = $1; +#endif +], [return f != __builtin_$1;])]) + # AC_LANG_BOOL_COMPILE_TRY(C)(PROLOGUE, EXPRESSION) # ------------------------------------------------- # Return a program that is valid if EXPRESSION is nonzero. @@ -321,6 +340,11 @@ m4_copy([AC_LANG_CALL(C)], [AC_LANG_CALL(C++)]) m4_copy([AC_LANG_FUNC_LINK_TRY(C)], [AC_LANG_FUNC_LINK_TRY(C++)]) +# AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN(C++)(FUNCTION) +# ------------------------------------ +m4_copy([AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN(C)], [AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN(C++)]) + + # AC_LANG_BOOL_COMPILE_TRY(C++)(PROLOGUE, EXPRESSION) # --------------------------------------------------- m4_copy([AC_LANG_BOOL_COMPILE_TRY(C)], [AC_LANG_BOOL_COMPILE_TRY(C++)]) diff --git a/autoconf/lib/autoconf/functions.m4 b/autoconf/lib/autoconf/functions.m4 index ec22aa9..d31bd12 100644 --- a/autoconf/lib/autoconf/functions.m4 +++ b/autoconf/lib/autoconf/functions.m4 @@ -69,7 +69,9 @@ AC_DEFUN([AC_CHECK_FUNC], AC_CACHE_CHECK([for $1], [ac_var], [AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY([$1])], [AS_VAR_SET([ac_var], [yes])], - [AS_VAR_SET([ac_var], [no])])]) + [AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN([$1])], + [AS_VAR_SET([ac_var], [yes])], + [AS_VAR_SET([ac_var], [no])])])]) AS_IF([test AS_VAR_GET([ac_var]) = yes], [$2], [$3])dnl AS_VAR_POPDEF([ac_var])dnl ])# AC_CHECK_FUNC diff --git a/autoconf/lib/autoconf/lang.m4 b/autoconf/lib/autoconf/lang.m4 index 9816633..ee05287 100644 --- a/autoconf/lib/autoconf/lang.m4 +++ b/autoconf/lib/autoconf/lang.m4 @@ -254,6 +254,13 @@ AC_DEFUN([AC_LANG_FUNC_LINK_TRY], _AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) +# AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN(FUNCTION, TYPE) +# ------------------------------- +AC_DEFUN([AC_LANG_FUNC_LINK_TRY_GCC_BUILTIN], +[m4_ifval([$1], [], [m4_warn([syntax], [$0: no function given])])dnl +_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) + + # AC_LANG_BOOL_COMPILE_TRY(PROLOGUE, EXPRESSION) # ---------------------------------------------- # Produce a program that compiles with success iff the boolean EXPRESSION