| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Automake supports a simple type of conditionals.
These conditionals are not the same as conditionals in
GNU Make. Automake conditionals are checked at configure time by the
`configure' script, and affect the translation from
`Makefile.in' to `Makefile'. They are based on options passed
to `configure' and on results that `configure' has discovered
about the host system. GNU Make conditionals are checked at make
time, and are based on variables passed to the make program or defined
in the `Makefile'.
Automake conditionals will work with any make program.
| 20.1 Usage of Conditionals | Declaring conditional content | |
| 20.2 Limits of Conditionals | Enclosing complete statements |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Before using a conditional, you must define it by using
AM_CONDITIONAL in the `configure.ac' file (see section Autoconf macros supplied with Automake).
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 if
statement) is evaluated when configure is run. Note that you
must arrange for every AM_CONDITIONAL to be invoked every
time configure is run. If AM_CONDITIONAL is run
conditionally (e.g., in a shell if statement), 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 section Conditional compilation of 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 by an end:
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 (autoconf)M4 Quotation section `M4 Quotation' in The Autoconf Manual).
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])])
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Conditionals should enclose complete statements like variables or rules definitions. Automake cannot deal with conditionals used inside a variable definition, for instance, and is not even able to diagnose this situation. The following example would not work:
# This syntax is not understood by Automake AM_CPPFLAGS = \ -DFEATURE_A \ if WANT_DEBUG -DDEBUG \ endif -DFEATURE_B |
However the intended definition of AM_CPPFLAGS can be achieved
with
if WANT_DEBUG DEBUGFLAGS = -DDEBUG endif AM_CPPFLAGS = -DFEATURE_A $(DEBUGFLAGS) -DFEATURE_B |
or
AM_CPPFLAGS = -DFEATURE_A if WANT_DEBUG AM_CPPFLAGS += -DDEBUG endif AM_CPPFLAGS += -DFEATURE_B |
More details and examples of conditionals are described alongside various Automake features in this manual (see section Conditional Subdirectories, see section Conditional compilation of sources, see section Conditional compilation of programs, see section Building Libtool Libraries Conditionally, see section Libtool Libraries with Conditional Sources).
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on July, 20 2009 using texi2html 1.76.