Node:Examining Declarations, Next:, Up:Writing Tests



Examining Declarations

The macro AC_TRY_CPP is used to check whether particular header files exist. You can check for one at a time, or more than one if you need several header files to all exist for some purpose.

AC_TRY_CPP (input, [action-if-true], [action-if-false]) Macro
If the preprocessor produces no error messages while processing the input (typically includes), run shell commands action-if-true. Otherwise run shell commands action-if-false. Beware that input is double quoted. Shell variable, back quote, and backslash substitutions are performed on input.

This macro uses CPPFLAGS, but not CFLAGS, because -g, -O, etc. are not valid options to many C preprocessors.

Here is how to find out whether a header file contains a particular declaration, such as a typedef, a structure, a structure member, or a function. Use AC_EGREP_HEADER instead of running grep directly on the header file; on some systems the symbol might be defined in another header file that the file you are checking #includes.

AC_EGREP_HEADER (pattern, header-file, action-if-found, [action-if-not-found]) Macro
If the output of running the preprocessor on the system header file header-file matches the egrep regular expression pattern, execute shell commands action-if-found, otherwise execute action-if-not-found.

To check for C preprocessor symbols, either defined by header files or predefined by the C preprocessor, use AC_EGREP_CPP. Here is an example of the latter:

AC_EGREP_CPP(yes,
[#ifdef _AIX
  yes
#endif
], is_aix=yes, is_aix=no)

AC_EGREP_CPP (pattern, program, [action-if-found], [action-if-not-found]) Macro
program is the text of a C or C++ program, on which shell variable, back quote, and backslash substitutions are performed. If the output of running the preprocessor on program matches the egrep regular expression pattern, execute shell commands action-if-found, otherwise execute action-if-not-found.

This macro calls AC_PROG_CPP or AC_PROG_CXXCPP (depending on which language is current, see Language Choice), if it hasn't been called already.