Node: Conditionals, Next: , Previous: Include, Up: Top



Conditionals

Automake supports a simple type of conditionals.

Before using a conditional, you must define it by using AM_CONDITIONAL in the configure.in file (see Macros).

AM_CONDITIONAL (conditional, condition) Macro
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 which 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 which the user provides to the configure script. Here is an example of how to write a conditional which 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 which is closed by an end:

     if DEBUG
     DBG = debug
     else !DEBUG
     DBG =
     endif !DEBUG
     

Unbalanced conditions are errors.

Note that conditionals in Automake 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.