Node:autoconf Invocation, Next:autoreconf Invocation, Previous:ifnames Invocation, Up:Making configure Scripts
autoconf
to Create configure
To create configure
from configure.ac
, run the
autoconf
program with no arguments. autoconf
processes
configure.ac
with the m4
macro processor, using the
Autoconf macros. If you give autoconf
an argument, it reads that
file instead of configure.ac
and writes the configuration script
to the standard output instead of to configure
. If you give
autoconf
the argument -
, it reads from the standard
input instead of configure.ac
and writes the configuration script
to the standard output.
The Autoconf macros are defined in several files. Some of the files are
distributed with Autoconf; autoconf
reads them first. Then it
looks for the optional file acsite.m4
in the directory that
contains the distributed Autoconf macro files, and for the optional file
aclocal.m4
in the current directory. Those files can contain
your site's or the package's own Autoconf macro definitions
(see Writing Autoconf Macros, for more information). If a macro is
defined in more than one of the files that autoconf
reads, the
last definition it reads overrides the earlier ones.
autoconf
accepts the following options:
--help
-h
--version
-V
--verbose
-v
--debug
-d
--force
-f
configure
even if newer than its input files.
--include=dir
-I dir
--output=file
-o file
-
stands
for the standard output.
--warnings=category
-W category
AC_DIAGNOSE
, for a comprehensive list of categories. Special
values include:
all
none
error
no-category
Warnings about syntax
are enabled by default, and the environment
variable WARNINGS
, a comma separated list of categories, is
honored. autoconf -W category
will actually
behave as if you had run:
autoconf --warnings=syntax,$WARNINGS,category
If you want to disable autoconf
's defaults and WARNINGS
,
but (for example) enable the warnings about obsolete constructs, you
would use -W none,obsolete
.
autoconf
displays a back trace for errors, but not for
warnings; if you want them, just pass -W error
. For instance,
on this configure.ac
:
AC_DEFUN([INNER], [AC_TRY_RUN([exit (0)])]) AC_DEFUN([OUTER], [INNER]) AC_INIT OUTER
you get:
$ autoconf -Wcross configure.ac:8: warning: AC_TRY_RUN called without default \ to allow cross compiling $ autoconf -Wcross,error configure.ac:8: error: AC_TRY_RUN called without default \ to allow cross compiling acgeneral.m4:3044: AC_TRY_RUN is expanded from... configure.ac:2: INNER is expanded from... configure.ac:5: OUTER is expanded from... configure.ac:8: the top level
--trace=macro[:format]
-t macro[:format]
configure
script, but list the calls to
macro according to the format. Multiple --trace
arguments can be used to list several macros. Multiple --trace
arguments for a single macro are not cumulative; instead, you should
just make format as long as needed.
The format is a regular string, with newlines if desired, and
several special escape codes. It defaults to $f:$l:$n:$%
; see
below for details on the format.
--initialization
-i
--trace
does not trace the initialization of the
Autoconf macros (typically the AC_DEFUN
definitions). This
results in a noticeable speedup, but can be disabled by this option.
It is often necessary to check the content of a configure.ac
file, but parsing it yourself is extremely fragile and error-prone. It
is suggested that you rely upon --trace
to scan
configure.ac
.
The format of --trace
can use the following special
escapes:
$$
$
.
$f
$l
$d
$n
$num
$@
$sep@
${separator}@
,
by default). Each
argument is quoted, i.e. enclosed in a pair of square brackets.
$*
$sep*
${separator}*
$%
$sep%
${separator}%
:
.
The escape $%
produces single-line trace outputs (unless you put
newlines in the separator
), while $@
and $*
do
not.
For instance, to find the list of variables that are substituted, use:
$ autoconf -t AC_SUBST configure.ac:2:AC_SUBST:ECHO_C configure.ac:2:AC_SUBST:ECHO_N configure.ac:2:AC_SUBST:ECHO_T More traces deleted
The example below highlights the difference between $@
,
$*
, and $%.
$ cat configure.ac AC_DEFINE(This, is, [an [example]]) $ autoconf -t 'AC_DEFINE:@: $@ *: $* $: $%' @: [This],[is],[an [example]] *: This,is,an [example] $: This:is:an [example]
The format gives you a lot of freedom:
$ autoconf -t 'AC_SUBST:$$ac_subst{"$1"} = "$f:$l";' $ac_subst{"ECHO_C"} = "configure.ac:2"; $ac_subst{"ECHO_N"} = "configure.ac:2"; $ac_subst{"ECHO_T"} = "configure.ac:2"; More traces deleted
A long separator can be used to improve the readability of complex
structures, and to ease its parsing (for instance when no single
character is suitable as a separator)):
$ autoconf -t 'AM_MISSING_PROG:${|:::::|}*' ACLOCAL|:::::|aclocal|:::::|$missing_dir AUTOCONF|:::::|autoconf|:::::|$missing_dir AUTOMAKE|:::::|automake|:::::|$missing_dir More traces deleted