Go to the previous, next section.
A few kinds of features can't be guessed automatically by running test
programs. For example, the details of the object file format, or
special options that need to be passed to the compiler or linker. You
can check for such features using ad-hoc means, such as having
configure
check the output of the uname
program, or
looking for libraries that are unique to particular systems. However,
Autoconf provides a uniform method for handling unguessable features.
Like other GNU configure
scripts, Autoconf-generated
configure
scripts can make decisions based on a canonical name
for the system type, which has the form:
cpu-company-system
configure
can usually guess the canonical name for the type of
system it's running on. To do so it runs a script called
config.guess
, which derives the name using the uname
command or symbols predefined by the C preprocessor.
Alternately, the user can specify the system type with command line
arguments to configure
. Doing so is necessary when
cross-compiling. In the most complex case of cross-compiling, three
system types are involved. The options to specify them are:
--build=build-type
--host=host-type
--target=target-type
If the user gives configure
a non-option argument, it is used as
the default for the host, target, and build system types if the user
does not specify them explicitly with options. The target and build
types default to the host type if it is given and they are not. If you
are cross-compiling, you still have to specify the names of the
cross-tools you use, in particular the C compiler, on the
configure
command line, e.g.,
CC=m68k-coff-gcc configure --target=m68k-coff
configure
recognizes short aliases for many system types; for
example, `decstation' can be given on the command line instead of
`mips-dec-ultrix4.2'. configure
runs a script called
config.sub
to canonicalize system type aliases.
The following macros make the system type available to configure
scripts. They run the shell script config.guess
to determine any
values for the host, target, and build types that they need and the user
did not specify on the command line. They run config.sub
to
canonicalize any aliases the user gave. If you use these macros, you
must distribute those two shell scripts along with your source code.
See section Creating Output Files, for information about the AC_CONFIG_AUX_DIR
macro
which you can use to control which directory configure
looks for
those scripts in. If you do not use either of these macros,
configure
ignores any `--host', `--target', and
`--build' options given to it.
@maindex CANONICAL_SYSTEM Determine the system type and set output variables to the names of the canonical system types. See section System Type Variables, for details about the variables this macro sets.
@maindex CANONICAL_HOST
Perform only the subset of AC_CANONICAL_SYSTEM
relevant to the
host type. This is all that is needed for programs that are not part of
a compiler toolchain.
After calling AC_CANONICAL_SYSTEM
, the following output variables
contain the system type information. After AC_CANONICAL_HOST
,
only the host
variables below are set.
build
, host
, target
build_alias
, host_alias
, target_alias
config.guess
was used;
build_cpu
, build_vendor
, build_os
host_cpu
, host_vendor
, host_os
target_cpu
, target_vendor
, target_os
How do you use a canonical system type? Usually, you use it in one or
more case
statements in `configure.in' to select
system-specific C files. Then link those files, which have names based
on the system name, to generic names, such as `host.h' or
`target.c'. The case
statement patterns can use shell
wildcards to group several cases together, like in this fragment:
case "$target" in i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;; i960-*-bout) obj_format=bout ;; esac
Macro: AC_LINK_FILES (source..., dest...)
@maindex LINK_FILES
Make AC_OUTPUT
link each of the existing files source to
the corresponding link name dest. Makes a symbolic link if
possible, otherwise a hard link. The dest and source names
should be relative to the top level source or build directory.
For example, this call:
AC_LINK_FILES(config/${machine}.h config/${obj_format}.h, host.h object.h)
creates in the current directory `host.h', which is a link to `srcdir/config/${machine}.h', and `object.h', which is a link to `srcdir/config/${obj_format}.h'.
You can also use the host system type to find cross-compilation tools.
See section Generic Program Checks, for information about the AC_CHECK_TOOL
macro which does that.
Go to the previous, next section.