Copyright (C) 2000-2012 |
GNU Info (autoconf.info)Prerequisite MacrosPrerequisite Macros ------------------- 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. - Macro: AC_REQUIRE (MACRO-NAME) If the M4 macro MACRO-NAME has not already been called, call it (without any arguments). Make sure to quote MACRO-NAME with square brackets. MACRO-NAME must have been defined using `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_temparature_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. automatically generated by info2www version 1.2.2.9 |