Node:Using System Type, Previous:Canonicalizing, Up:Manual Configuration
How do you use a canonical system type? Usually, you use it in one or
more case
statements in configure.ac
to select
system-specific C files. Then, using AC_CONFIG_LINKS
, link those
files which have names based on the system name, to generic names, such
as host.h
or target.c
(see Configuration Links). The
case
statement patterns can use shell wild cards 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
and later in configure.ac
, use:
AC_CONFIG_LINKS(host.h:config/$machine.h object.h:config/$obj_format.h)
Note that the above example uses $target
because it's taken from
a tool which can be built on some architecture ($build
), run on
another ($host
), but yet handle data for a third architecture
($target
). Such tools are usually part of a compiler suite, they
generate code for a specific $target
.
However $target
should be meaningless for most packages. If you
want to base a decision on the system where your program will be run,
make sure you use the $host
variable, as in the following
excerpt:
case $host in *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*) MUMBLE_INIT="mumble.ini" ;; *) MUMBLE_INIT=".mumbleinit" ;; esac AC_SUBST([MUMBLE_INIT])
You can also use the host system type to find cross-compilation tools.
See Generic Programs, for information about the AC_CHECK_TOOL
macro which does that.