[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.3 Running the Preprocessor
Sometimes one might need to run the preprocessor on some source file. Usually it is a bad idea, as you typically need to compile your project, not merely run the preprocessor on it; therefore you certainly want to run the compiler, not the preprocessor. Resist the temptation of following the easiest path.
Nevertheless, if you need to run the preprocessor, then use
AC_PREPROC_IFELSE
.
The macros described in this section cannot be used for tests in Erlang or Fortran, since those languages require no preprocessor.
- Macro: AC_PREPROC_IFELSE (input, [action-if-true]@c, [action-if-false]@c)
-
Run the preprocessor of the current language (see section Language Choice) on the input, run the shell commands action-if-true on success, action-if-false otherwise. The input can be made by
AC_LANG_PROGRAM
and friends.This macro uses
CPPFLAGS
, but notCFLAGS
, because ‘-g’, ‘-O’, etc. are not valid options to many C preprocessors.It is customary to report unexpected failures with
AC_MSG_FAILURE
.
For instance:
AC_INIT([Hello], [1.0], [bug-hello@example.org]) AC_DEFINE([HELLO_WORLD], ["Hello, World\n"], [Greetings string.]) AC_PREPROC_IFELSE( [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]], [[fputs (hw, stdout);]])], [AC_MSG_RESULT([OK])], [AC_MSG_FAILURE([unexpected preprocessor failure])]) |
results in:
checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking how to run the C preprocessor... gcc -E OK |
The macro AC_TRY_CPP
(see section Obsolete Macros) used to play the
role of AC_PREPROC_IFELSE
, but double quotes its argument, making
it impossible to use it to elaborate sources. You are encouraged to
get rid of your old use of the macro AC_TRY_CPP
in favor of
AC_PREPROC_IFELSE
, but, in the first place, are you sure you need
to run the preprocessor and not the compiler?
- Macro: AC_EGREP_HEADER (pattern, header-file, action-if-found, [action-if-not-found]@c)
-
If the output of running the preprocessor on the system header file header-file matches the extended regular expression pattern, execute shell commands action-if-found, otherwise execute action-if-not-found.
- Macro: AC_EGREP_CPP (pattern, program, [action-if-found]@c, [action-if-not-found]@c)
-
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 extended regular expression pattern, execute shell commands action-if-found, otherwise execute action-if-not-found.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |