|
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], [action-if-false])
Run the preprocessor of the current language (see 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 not CFLAGS , 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], [[email protected]])
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 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])
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], [action-if-not-found])
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.
|
|