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
The macros described in this section cannot be used for tests in Erlang or Fortran, since those languages require no preprocessor.
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
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. If needed, action-if-true can further access the preprocessed output in the file conftest.i.
AC_INIT([Hello], [1.0], [email@example.com]) 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])])
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
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_CPPin favor of
AC_PREPROC_IFELSE, but, in the first place, are you sure you need to run the preprocessor and not the compiler?
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.