Quoting Paolo Bonzini <bonzini@xxxxxxx>:
I'm adding autoconf@xxxxxxx to the destinations, since this is a pretty fundamental problem with AC_CHECK_DECL and C++
I've whipped up a patch with a modified version of AC_CHECK_DECLS - I've called it AC_CHECK_PROTOS - that can optionally have argument types for a function (without spaces). Then I've used this new macro in the libcpp configure.ac to replace AC_CHECK_DECLS. This bootstrapped and regtested fine on i686-pc-linux-gnu , and it now also bootstraps with '--enable-build-with-cxx (although the regtest results are still affected by PR testsuite/42843). As I've seen you re-wrote the AC_CHECK_DECLS from 2.63 to 2.64 to save on configure script size, one design criterion was to avoid unnecessary passing of extra arguments outside of the shell function. However, I wonder if there is a better way to do the string processing - I only do autoconf hacking sporadically, and my code looks somewhat different from the original style.
2010-02-09 Joern Rennecke <joern.rennecke@xxxxxxxxxxxx> libcpp: * aclocal (_AC_CHECK_PROTO_BODY): New shell function. (AC_CHECK_PROTO, _AC_CHECK_PROTOS, AC_CHECK_PROTOS): New macros. * configure.ac: Use AC_CHECK_PROTOS instead of AC_CHECK_DECLS. * configure: Regenerate. Index: libcpp/configure.ac =================================================================== --- libcpp/configure.ac (revision 156598) +++ libcpp/configure.ac (working copy) @@ -81,8 +81,8 @@ define(libcpp_UNLOCKED_FUNCS, clearerr_u fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl putchar_unlocked putc_unlocked) AC_CHECK_FUNCS(libcpp_UNLOCKED_FUNCS) -AC_CHECK_DECLS(m4_split(m4_normalize(abort asprintf basename errno getopt \ - libcpp_UNLOCKED_FUNCS vasprintf))) +AC_CHECK_PROTOS(m4_split(m4_normalize(abort asprintf basename(char*) errno \ + getopt libcpp_UNLOCKED_FUNCS vasprintf))) # Checks for library functions. AC_FUNC_ALLOCA Index: libcpp/aclocal.m4 =================================================================== --- libcpp/aclocal.m4 (revision 156598) +++ libcpp/aclocal.m4 (working copy) @@ -22,3 +22,75 @@ m4_include([../config/lib-link.m4]) m4_include([../config/lib-prefix.m4]) m4_include([../config/override.m4]) m4_include([../config/warnings.m4]) + +## ---------------------------------------------------------------- ## +## Checking for declared symbols. ## +## This is like *AC_CHECK_DECL*, except that for c++, we may use a ## +## prototype to check for a (possibly overloaded) function. ## +## ---------------------------------------------------------------- ## + + +# _AC_CHECK_PROTO_BODY +# ------------------- +# Shell function body for AC_CHECK_PROTO. +m4_define([_AC_CHECK_PROTO_BODY], +[ AS_LINENO_PUSH([$[]1]) + [as_decl_name=`echo $][2|sed 's/(.*//'`] + [as_decl_use=`echo $][2|sed -e 's/(/((/' -e 's/\()\|,\)/) 0&/'`] + AC_CACHE_CHECK([whether $as_decl_name is declared], [$[]3], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]4], +[@%:@ifndef $[]as_decl_name +@%:@ifdef __cplusplus + $[]as_decl_type + (void) $[]as_decl_use; +@%:@else + (void) $[]as_decl_name; +@%:@endif +@%:@endif +])], + [AS_VAR_SET([$[]3], [yes])], + [AS_VAR_SET([$[]3], [no])])]) + AS_LINENO_POP +])# _AC_CHECK_PROTO_BODY + +# AC_CHECK_PROTO(SYMBOL, +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) +# ------------------------------------------------------- +# Check whether SYMBOL (a function, variable, or constant) is declared. +AC_DEFUN([AC_CHECK_PROTO], +[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_proto], + [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_proto], + [LINENO SYMBOL VAR], + [Tests whether SYMBOL is declared, setting cache variable VAR accordingly.])], + [_$0_BODY])]dnl +[AS_VAR_PUSHDEF([ac_Symbol], [ac_cv_have_decl_$1])]dnl +[ac_fn_[]_AC_LANG_ABBREV[]_check_proto ]dnl +["$LINENO" "$1" "ac_Symbol" "AS_ESCAPE([AC_INCLUDES_DEFAULT([$4])], [""])" +AS_VAR_IF([ac_Symbol], [yes], [$2], [$3]) +AS_VAR_POPDEF([ac_Symbol])dnl +])# AC_CHECK_PROTO + + +# _AC_CHECK_PROTOS(SYMBOL, ACTION-IF_FOUND, ACTION-IF-NOT-FOUND, +# INCLUDES) +# ------------------------------------------------------------- +# Helper to AC_CHECK_PROTOS, which generates the check for a single +# SYMBOL with INCLUDES, performs the AC_DEFINE, then expands +# ACTION-IF-FOUND or ACTION-IF-NOT-FOUND. +m4_define([_AC_CHECK_PROTOS], +[AC_CHECK_PROTO([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])]dnl +[AC_DEFINE_UNQUOTED(AS_TR_CPP(patsubst(HAVE_DECL_[$1],[(.*])), [$ac_have_decl], + [Define to 1 if you have the declaration of `$1', + and to 0 if you don't.])]dnl +[m4_ifvaln([$2$3], [AS_IF([test $ac_have_decl = 1], [$2], [$3])])]) + +# AC_CHECK_PROTOS(SYMBOLS, +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) +# -------------------------------------------------------- +# Defines HAVE_DECL_SYMBOL to 1 if declared, 0 otherwise. See the +# documentation for a detailed explanation of this difference with +# other AC_CHECK_*S macros. SYMBOLS is an m4 list. +AC_DEFUN([AC_CHECK_PROTOS], +[m4_map_args_sep([_$0(], [, [$2], [$3], [$4])], [], $1)])
_______________________________________________ Autoconf mailing list Autoconf@xxxxxxx http://lists.gnu.org/mailman/listinfo/autoconf