Node:Using System Type, Previous:Canonicalizing, Up:Manual Configuration



Using the System Type

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.