manpagez: man pages & more
info autoconf
Home | html | info | man

File: autoconf.info,  Node: AC_ACT_IFELSE vs AC_TRY_ACT,  Prev: AC_LIBOBJ vs LIBOBJS,  Up: Autoconf 2.13

18.6.5 ‘AC_ACT_IFELSE’ vs. ‘AC_TRY_ACT’
---------------------------------------

Since Autoconf 2.50, internal codes uses ‘AC_PREPROC_IFELSE’,
‘AC_COMPILE_IFELSE’, ‘AC_LINK_IFELSE’, and ‘AC_RUN_IFELSE’ on one hand
and ‘AC_LANG_SOURCE’, and ‘AC_LANG_PROGRAM’ on the other hand instead of
the deprecated ‘AC_TRY_CPP’, ‘AC_TRY_COMPILE’, ‘AC_TRY_LINK’, and
‘AC_TRY_RUN’.  The motivations where:
   − a more consistent interface: ‘AC_TRY_COMPILE’ etc. were double
     quoting their arguments;

   − the combinatorial explosion is solved by decomposing on the one
     hand the generation of sources, and on the other hand executing the
     program;

   − this scheme helps supporting more languages than plain C and C++.

   In addition to the change of syntax, the philosophy has changed too:
while emphasis was put on speed at the expense of accuracy, today's
Autoconf promotes accuracy of the testing framework at, ahem..., the
expense of speed.

   As a perfect example of what is _not_ to be done, 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.

   As a (bad) example, here is how you should not check for C
preprocessor symbols, either defined by header files or predefined by
the C preprocessor: using ‘AC_EGREP_CPP’:

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

   The above example, properly written would (i) use ‘AC_LANG_PROGRAM’,
and (ii) run the compiler:

     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
     [[#ifndef _AIX
      error: This isn't AIX!
     #endif
     ]])],
                        [is_aix=yes],
                        [is_aix=no])

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.