Info Node: (autoconf.info)Setting Output Variables
(autoconf.info)Setting Output Variables
Setting Output Variables
========================
Another way to record the results of tests is to set "output
variables", which are shell variables whose values are substituted into
files that `configure' outputs. The two macros below create new output
variables. Note:Preset Output Variables, for a list of output
variables that are always available.
- Macro: AC_SUBST (VARIABLE, [VALUE])
Create an output variable from a shell variable. Make `AC_OUTPUT'
substitute the variable VARIABLE into output files (typically one
or more `Makefile's). This means that `AC_OUTPUT' will replace
instances of `@VARIABLE@' in input files with the value that the
shell variable VARIABLE has when `AC_OUTPUT' is called. This
value of VARIABLE should not contain literal newlines.
If VALUE is given, in addition assign it to `variable'.
- Macro: AC_SUBST_FILE (VARIABLE)
Another way to create an output variable from a shell variable.
Make `AC_OUTPUT' insert (without substitutions) the contents of
the file named by shell variable VARIABLE into output files. This
means that `AC_OUTPUT' will replace instances of `@VARIABLE@' in
output files (such as `Makefile.in') with the contents of the file
that the shell variable VARIABLE names when `AC_OUTPUT' is called.
Set the variable to `/dev/null' for cases that do not have a file
to insert.
This macro is useful for inserting `Makefile' fragments containing
special dependencies or other `make' directives for particular host
or target types into `Makefile's. For example, `configure.ac'
could contain:
AC_SUBST_FILE(host_frag)
host_frag=$srcdir/conf/sun4.mh
and then a `Makefile.in' could contain:
@host_frag@
Running `configure' in different environments can be extremely
dangerous. If for instance the user runs `CC=bizarre-cc ./configure',
then the cache, `config.h' and many other output files will depend upon
`bizarre-cc' being the C compiler. If for some reason the user runs
`/configure' again, or if it is run via `./config.status --recheck',
(Note:Automatic Remaking, and *note config.status Invocation::),
then the configuration can be inconsistent, composed of results
depending upon two different compilers.
Such variables are named "precious variables", and can be declared
as such by `AC_ARG_VAR'.
- Macro: AC_ARG_VAR (VARIABLE, DESCRIPTION)
Declare VARIABLE is a precious variable, and include its
DESCRIPTION in the variable section of `./configure --help'.
Being precious means that
- VARIABLE is `AC_SUBST''d.
- VARIABLE is kept in the cache including if it was not
specified on the `./configure' command line. Indeed, while
`configure' can notice the definition of `CC' in `./configure
CC=bizarre-cc', it is impossible to notice it in
`CC=bizarre-cc ./configure', which, unfortunately, is what
most users do.
- VARIABLE is checked for consistency between two `configure'
runs. For instance:
$ ./configure --silent --config-cache
$ CC=cc ./configure --silent --config-cache
configure: error: `CC' was not set in the previous run
configure: error: changes in the environment can compromise \
the build
configure: error: run `make distclean' and/or \
`rm config.cache' and start over
and similarly if the variable is unset, or if its content is
changed.
- VARIABLE is kept during automatic reconfiguration (*note
config.status Invocation::) as if it had been passed as a
command line argument, including when no cache is used:
$ CC=/usr/bin/cc ./configure undeclared_var=raboof --silent
$ ./config.status --recheck
running /bin/sh ./configure undeclared_var=raboof --silent \
CC=/usr/bin/cc --no-create --no-recursion