[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A macro that you write might need to use values that have previously
been computed by other macros. For example, AC_DECL_YYTEXT
examines the output of flex
or lex
, so it depends on
AC_PROG_LEX
having been called first to set the shell variable
LEX
.
Rather than forcing the user of the macros to keep track of the
dependencies between them, you can use the AC_REQUIRE
macro to do
it automatically. AC_REQUIRE
can ensure that a macro is only
called if it is needed, and only called once.
AC_DEFUN
or else contain a call to AC_PROVIDE
to indicate
that it has been called.
AC_REQUIRE
must be used inside an AC_DEFUN
'd macro; it
must not be called from the top level.
AC_REQUIRE
is often misunderstood. It really implements
dependencies between macros in the sense that if one macro depends upon
another, the latter will be expanded before the body of the
former. In particular, `AC_REQUIRE(FOO)' is not replaced with the
body of FOO
. For instance, this definition of macros:
AC_DEFUN([TRAVOLTA], [test "$body_temperature_in_celsius" -gt "38" && dance_floor=occupied]) AC_DEFUN([NEWTON_JOHN], [test "$hair_style" = "curly" && dance_floor=occupied]) AC_DEFUN([RESERVE_DANCE_FLOOR], [if date | grep '^Sat.*pm' >/dev/null 2>&1; then AC_REQUIRE([TRAVOLTA]) AC_REQUIRE([NEWTON_JOHN]) fi]) |
with this `configure.ac'
AC_INIT RESERVE_DANCE_FLOOR if test "$dance_floor" = occupied; then AC_MSG_ERROR([cannot pick up here, let's move]) fi |
will not leave you with a better chance to meet a kindred soul at other times than Saturday night since it expands into:
test "$body_temperature_in_Celsius" -gt "38" && dance_floor=occupied test "$hair_style" = "curly" && dance_floor=occupied fi if date | grep '^Sat.*pm' >/dev/null 2>&1; then fi |
This behavior was chosen on purpose: (i) it prevents messages in required macros from interrupting the messages in the requiring macros; (ii) it avoids bad surprises when shell conditionals are used, as in:
if ...; then AC_REQUIRE([SOME_CHECK]) fi ... SOME_CHECK |
You are encouraged to put all AC_REQUIRE
s at the beginning of a
macro. You can use dnl
to avoid the empty lines they leave.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |