Previous: Particular Declarations, Up: Declaration checks [Contents][Index]
These macros are used to find declarations not covered by the “particular” test macros.
If symbol (a function, variable, or constant) is not declared in
includes and a declaration is needed, run the shell commands
action-if-not-found, otherwise action-if-found.
includes is a series of include directives, defaulting to
AC_INCLUDES_DEFAULT
(see Default Includes), which are used
prior to the declaration under test.
This macro actually tests whether symbol is defined as a macro or can be used as an r-value, not whether it is really declared, because it is much safer to avoid introducing extra declarations when they are not needed. In order to facilitate use of C++ and overloaded function declarations, it is possible to specify function argument types in parentheses for types which can be zero-initialized:
AC_CHECK_DECL([basename(char *)])
This macro caches its result in the ac_cv_have_decl_symbol
variable, with characters not suitable for a variable name mapped to
underscores.
For each of the symbols (comma-separated list with optional
function argument types for C++ overloads), define
HAVE_DECL_symbol
(in all capitals) to ‘1’ if
symbol is declared, otherwise to ‘0’. If
action-if-not-found is given, it is additional shell code to
execute when one of the function declarations is needed, otherwise
action-if-found is executed.
includes is a series of include directives, defaulting to
AC_INCLUDES_DEFAULT
(see Default Includes), which are used
prior to the declarations under test.
This macro uses an M4 list as first argument:
AC_CHECK_DECLS([strdup]) AC_CHECK_DECLS([strlen]) AC_CHECK_DECLS([malloc, realloc, calloc, free]) AC_CHECK_DECLS([j0], [], [], [[#include <math.h>]]) AC_CHECK_DECLS([[basename(char *)], [dirname(char *)]])
Unlike the other ‘AC_CHECK_*S’ macros, when a symbol is not
declared, HAVE_DECL_symbol
is defined to ‘0’ instead
of leaving HAVE_DECL_symbol
undeclared. When you are
sure that the check was performed, use
HAVE_DECL_symbol
in #if
:
#if !HAVE_DECL_SYMBOL extern char *symbol; #endif
If the test may have not been performed, however, because it is safer not to declare a symbol than to use a declaration that conflicts with the system’s one, you should use:
#if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC void *malloc (size_t *s); #endif
You fall into the second category only in extreme situations: either your files may be used without being configured, or they are used during the configuration. In most cases the traditional approach is enough.
This macro caches its results in ac_cv_have_decl_symbol
variables, with characters not suitable for a variable name mapped to
underscores.
For each of the symbols (comma-separated list), define
HAVE_DECL_symbol
(in all capitals) to ‘1’ if
symbol is declared in the default include files, otherwise to
‘0’. This is a once-only variant of AC_CHECK_DECLS
. It
generates the checking code at most once, so that configure
is
smaller and faster; but the checks cannot be conditionalized and are
always done once, early during the configure
run.
Previous: Particular Declarations, Up: Declaration checks [Contents][Index]