Before using a conditional, you must define it by using
AM_CONDITIONAL in the configure.ac file (see Macros).
The conditional name, conditional, should be a simple string starting with a letter and containing only letters, digits, and underscores. It must be different from ‘TRUE’ and ‘FALSE’ that are reserved by Automake.
The shell condition (suitable for use in a shell
ifstatement) is evaluated when configure is run. Note that you must arrange for everyAM_CONDITIONALto be invoked every time configure is run. IfAM_CONDITIONALis run conditionally (e.g., in a shellifstatement), then the result will confuse automake.
Conditionals typically depend upon options that the user provides to the configure script. Here is an example of how to write a conditional that is true if the user uses the --enable-debug option.
AC_ARG_ENABLE([debug],
[ --enable-debug Turn on debugging],
[case "${enableval}" in
yes) debug=true ;;
no) debug=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],[debug=false])
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
Here is an example of how to use that conditional in Makefile.am:
if DEBUG
DBG = debug
else
DBG =
endif
noinst_PROGRAMS = $(DBG)
This trivial example could also be handled using EXTRA_PROGRAMS
(see Conditional Programs).
You may only test a single variable in an if statement, possibly
negated using ‘!’. The else statement may be omitted.
Conditionals may be nested to any depth. You may specify an argument to
else in which case it must be the negation of the condition used
for the current if. Similarly you may specify the condition
that is closed on the endif line:
if DEBUG
DBG = debug
else !DEBUG
DBG =
endif !DEBUG
Unbalanced conditions are errors. The if, else, and
endif statements should not be indented, i.e., start on column
one.
The else branch of the above two examples could be omitted,
since assigning the empty string to an otherwise undefined variable
makes no difference.
In order to allow access to the condition registered by
AM_CONDITIONAL inside configure.ac, and to allow
conditional AC_CONFIG_FILES, AM_COND_IF may be used:
If conditional is fulfilled, execute if-true, otherwise execute if-false. If either branch contains
AC_CONFIG_FILES, it will cause automake to output the rules for the respective files only for the given condition.
AM_COND_IF macros may be nested when m4 quotation is used
properly (see M4 Quotation).
Here is an example of how to define a conditional config file:
AM_CONDITIONAL([SHELL_WRAPPER], [test "x$with_wrapper" = xtrue])
AM_COND_IF([SHELL_WRAPPER],
[AC_CONFIG_FILES([wrapper:wrapper.in])])