summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/binutils/etc/configure.info-1
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin/binutils/etc/configure.info-1')
-rw-r--r--gnu/usr.bin/binutils/etc/configure.info-11174
1 files changed, 1174 insertions, 0 deletions
diff --git a/gnu/usr.bin/binutils/etc/configure.info-1 b/gnu/usr.bin/binutils/etc/configure.info-1
new file mode 100644
index 00000000000..52e8c46aae7
--- /dev/null
+++ b/gnu/usr.bin/binutils/etc/configure.info-1
@@ -0,0 +1,1174 @@
+This is Info file configure.info, produced by Makeinfo-1.55 from the
+input file ./configure.texi.
+
+START-INFO-DIR-ENTRY
+* configure: (configure). Cygnus configure.
+END-INFO-DIR-ENTRY
+
+ This document describes the Cygnus Support version of `configure'.
+
+ Copyright (C) 1991, 1992, 1993 Cygnus Support Permission is granted
+to make and distribute verbatim copies of this manual provided the
+copyright notice and this permission notice are preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that this permission notice may be stated in a
+translation approved by Cygnus Support.
+
+
+File: configure.info, Node: Top, Next: What configure does, Prev: (DIR), Up: (DIR)
+
+Cygnus configure
+****************
+
+ This file documents the configuration system used and distributed by
+Cygnus Support.
+
+* Menu:
+
+* What configure does:: What configure does
+* Invoking configure:: Invoking configure--basic usage
+* Using configure:: More than you ever wanted to know
+* Porting:: How to use configure with new programs
+* Variables Index::
+* Concept Index::
+
+
+File: configure.info, Node: What configure does, Next: Invoking configure, Prev: Top, Up: Top
+
+What `configure' does
+*********************
+
+ This manual documents Cygnus `configure', a program which helps to
+automate much of the setup activity associated with building large
+suites of programs, such the Cygnus Support Developer's Kit. This
+manual is therefore geared toward readers who are likely to face the
+problem of configuring software in source form before compiling and
+installing it. We assume you are an experienced programmer or system
+administrator. For further background on this topic, see *Note
+Apologia Configure: (cfg-paper)Some Basic Terms, by K. Richard Pixley.
+
+ When `configure' runs, it does the following things:
+
+** creates build directories*
+ When you run `configure' with the `--srcdir' option, it uses the
+ current directory as the "build directory", creating under it a
+ directory tree that parallels the directory structure of the
+ source directory. If you don't specify a `srcdir', `configure'
+ first assumes that the source code you wish to configure is in
+ your current directory; if it finds no `configure.in' input file
+ there, it searches in the directory `configure' itself lies in.
+ (For details, see *Note Build directories: Build directories.)
+
+** generates `Makefile'*
+ A `Makefile' template from the source directory, usually called
+ `Makefile.in', is copied to an output file in the build directory
+ which is most often named `Makefile'. `configure' places
+ definitions for a number of standard `Makefile' macros at the
+ beginning of the output file. If `--prefix=DIR' or
+ `--exec_prefix=DIR' are specified on the `configure' command line,
+ corresponding `Makefile' variables are set accordingly. If host,
+ target, or site-specific `Makefile' fragments exist, these are
+ inserted into the output file. (For details, see *Note `Makefile'
+ generation: Makefile generation.)
+
+** generates `.gdbinit'*
+ If the source directory contains a `.gdbinit' file and the build
+ directory is not the same as the source directory, a `.gdbinit'
+ file is created in the build directory. This `.gdbinit' file
+ contains commands which allow the source directory to be read when
+ debugging with the GNU debugger, `gdb'. (*Note Command Files:
+ (gdb)Command Files.)
+
+** makes symbolic links*
+ Most build directories require that some symbolic links with
+ generic names are built pointing to specific files in the source
+ directory. If the system where `configure' runs cannot support
+ symbolic links, hard links are used instead. (For details, see
+ *Note The `configure.in' input file: configure.in.)
+
+** generates `config.status'*
+ `configure' creates a shell script named `config.status' in the
+ build directory. This shell script, when run from the build
+ directory (usually from within a `Makefile'), will reconfigure the
+ build directory (but not its subdirectories). This is most often
+ used to have a `Makefile' update itself automatically if a new
+ source directory is available.
+
+** calls itself recursively*
+ If the source directory has subdirectories that should also be
+ configured, `configure' is called for each.
+
+
+File: configure.info, Node: Invoking configure, Next: Using configure, Prev: What configure does, Up: Top
+
+Invoking `configure'
+********************
+
+ Cygnus `configure' is a shell script which resides in a source tree.
+The usual way to invoke `configure' is from the shell, as follows:
+
+ eg$ ./configure HOSTTYPE
+
+This prepares the source in the current directory (`.') to be compiled
+for a HOSTTYPE environment. It assumes that you wish to build programs
+and files in the default "build directory" (also the current directory,
+`.'). If you do not specify a value for HOSTTYPE, Cygnus `configure'
+will attempt to discover this information by itself (*note Determining
+system information: config.guess.). For information on HOSTTYPE
+environments, *Note Host: Host.
+
+ All GNU software is packaged with one or more `configure' script(s)
+(*note How Configuration Should Work: (standards)Configuration.). By
+using `configure' you prepare the source for your specific environment
+by selecting and using `Makefile' fragments and fragments of shell
+scripts, which are prepared in advance and stored with the source.
+
+ `configure''s command-line options also allow you to specify other
+aspects of the source configuration:
+
+ configure HOSTTYPE [--target=TARGET] [--srcdir=DIR] [--rm]
+ [--site=SITE] [--prefix=DIR] [--exec-prefix=DIR]
+ [--program-prefix=STRING] [--tmpdir=DIR]
+ [--with-PACKAGE[=YES/NO]] [--without-PACKAGE]
+ [--enable-FEATURE[=YES/NO]] [--disable-FEATURE]
+ [--norecursion] [--nfp] [-s] [-v] [-V | --version] [--help]
+
+`--target=TARGET'
+ Requests that the sources be configured to target the TARGET
+ machine. If no target is specified explicitly, the target is
+ assumed to be the same as the host (i.e., a "native"
+ configuration). *Note Host: Host, and *Note Target: Target, for
+ discussions of each.
+
+`--srcdir=DIR'
+ Direct each generated `Makefile' to use the sources located in
+ directory DIR. Use this option whenever you wish the object code
+ to reside in a different place from the source code. The "build
+ directory" is always assumed to be the directory you call
+ `configure' from. See *Note Build directories: Build directories,
+ for an example. If the source directory is not specified,
+ `configure' assumes that the source is in your current directory.
+ If `configure' finds no `configure.in' there, it searches in the
+ same directory that the `configure' script itself lies in.
+ Pathnames specified (Values for DIR) can be either absolute
+ relative to the *build* directory.
+
+`--rm'
+ *Remove* the configuration specified by HOSTTYPE and the other
+ command-line options, rather than create it.
+
+ *Note:* We recommend that you use `make distclean' rather than
+ use this option; see *Note Invoking `make': (make)Invoking
+ make, for details on `make distclean'.
+
+`--site=SITE'
+ Generate the `Makefile' using site-specific `Makefile' fragments
+ for SITE. *Note Adding information about local conventions:
+ Makefile fragments.
+
+`--prefix=DIR'
+ Configure the source to install programs and files under directory
+ DIR.
+
+ This option sets the variable `prefix'. Each generated `Makefile'
+ will have its `prefix' variables set to this value. (*Note What
+ `configure' really does: What configure really does.)
+
+`--exec-prefix=DIR'
+ Configure the source to install "host dependent" files in DIR.
+
+ This option sets the variable `exec_prefix'. Each generated
+ `Makefile' will have its `exec_prefix' variables set to this value.
+ (*Note What `configure' really does: What configure really does.)
+
+`--program-prefix=STRING'
+ Configure the source to install certain programs using STRING as a
+ prefix. This applies to programs which might be used for
+ cross-compilation, such as the compiler and the binary utilities,
+ and also to programs which have the same names as common Unix
+ programs, such as `make'.
+
+ This option sets the variable `program_prefix'. Each generated
+ `Makefile' will have its `program_prefix' variables set to this
+ value. (*Note What `configure' really does: What configure really
+ does.)
+
+`--tmpdir=TMPDIR'
+ Use the directory TMPDIR for `configure''s temporary files. The
+ default is the value of the environment variable `TMPDIR', or
+ `/tmp' if the environment variable is not set.
+
+`--with-PACKAGE[=YES/NO]'
+`--without-PACKAGE'
+ Indicate that PACKAGE is present, or not present, depending on
+ YES/NO. If YES/NO is nonexistent, its value is assumed to be
+ `yes'. `--without-PACKAGE' is equivalent to `--with-PACKAGE=no'.
+
+ For example, if you wish to configure the program `gcc' for a Sun
+ SPARCstation running SunOS 4.x, and you want `gcc' to use the GNU
+ linker `ld', you can configure `gcc' using
+
+ eg$ configure --with-gnu-ld sun4
+
+ *Note What `configure' really does: What configure really does, for
+ details. See the installation or release notes for your
+ particular package for details on which other PACKAGE options are
+ recognized.
+
+`--enable-FEATURE[=YES/NO]'
+`--disable-FEATURE'
+ Include FEATURE, or not, depending on YES/NO. If YES/NO is
+ nonexistent, its value is assumed to be `yes'.
+ `--disable-FEATURE' is equivalent to `--enable-FEATURE=no'.
+
+ *Note What `configure' really does: What configure really does, for
+ details. See the installation or release notes for your
+ particular package for details on which other FEATURE options are
+ recognized.
+
+`--norecursion'
+ Configure only this directory; ignore any subdirectories. This is
+ used by the executable shell script `config.status' to reconfigure
+ only the current directory; it is most often used
+ non-interactively, when `make' is invoked. (*Note
+ `config.status': config.status.)
+
+`--nfp'
+ Assume that the intended HOSTTYPE has no floating point unit.
+
+`-s'
+ Suppress status output. This option is used internally by
+ `configure' when calling itself recursively in subdirectories. You
+ can override this option with the `--verbose' option.
+
+`-v'
+`--verbose'
+ Print status lines for each directory configured. Normally, only
+ the status lines for the initial working directory are printed.
+
+`--version'
+`-V'
+ Print the `configure' version number.
+
+`--help'
+ Print a short summary of how to invoke `configure'.
+
+ *Note:* You may introduce options with a single dash, `-', rather
+than two dashes, `--'. However, you may not be able to truncate long
+option names when using a single dash. When using two dashes, options
+may be abbreviated as long as each option can be uniquely identified.
+For example,
+ eg$ configure --s=/u/me/src HOSTTYPE
+
+is ambiguous, as `--s' could refer to either `--site' or `--srcdir'.
+However,
+ eg$ configure --src=/u/me/src HOSTTYPE
+
+is a valid abbreviation.
+
+
+File: configure.info, Node: Using configure, Next: Porting, Prev: Invoking configure, Up: Top
+
+Using `configure'
+*****************
+
+ `configure' prepares source directories for building programs in
+them. "Configuring" is the process of preparing software to compile
+correctly on a given "host", for a given "target".
+
+ `configure' subsequently writes a configured `Makefile' from a
+pre-built template; `configure' uses variables that have been set in the
+configuring process to determine the values of some variables in the
+`Makefile'. Because of this we will refer to both `configure'
+variables and `Makefile' variables. This convention allows us to
+determine where the variable should be set initially, in either
+`configure.in' or `Makefile.in'.
+
+* Menu:
+
+* What configure really does:: What configure really does
+* configure.in:: The configure.in input file
+* Install locations:: Where to install things once they are built
+* Host:: Telling configure what will source will be built
+* Target:: Telling configure what the source will target
+* Makefile fragments:: Adding information about local conventions
+* Makefile extensions:: Extensions to the GNU coding standards
+
+
+File: configure.info, Node: What configure really does, Next: configure.in, Up: Using configure
+
+What `configure' really does
+============================
+
+ Cygnus `configure' is a shell script that sets up an environment in
+which your programs will compile correctly for your machine and
+operating system, and will install in proper places. `configure'
+accomplishes this task by doing the following:
+
+ * it generates a `Makefile' from a custom template called
+ `Makefile.in' in each relevant source directory;
+
+ * it customizes the build process to your specifications; you set
+ certain variables for `configure', either on the command line or
+ in the file `configure.in', which subsequently sets variables in
+ each generated `Makefile' to be used by `make' when actually
+ building the software;
+
+ * it creates "build directories", places for your code to be compiled
+ in before being installed;
+
+ * it generates a `.gdbinit' in the build directory, if needed, to
+ communicate to `gdb' where to find the program's source code;
+
+ * it generates a shell script called `config.status' which is used
+ most often by the `Makefile' to reconfigure itself;
+
+ * it recurses in subdirectories, setting up entire trees so that
+ they build correctly; if `configure' finds another `configure'
+ script further down in a given source tree, it knows to use this
+ script and not recur.
+
+ For the sake of safety (i.e., in order to prevent broken
+installations), the GNU coding standards call for software to be
+"configured" in such a way that an end user trying to build a given
+package will be able to do so by affecting a finite number of
+variables. All GNU software comes with an executable `configure' shell
+script which sets up an environment within a build directory which will
+correctly compile your new package for your host (or, alternatively,
+whatever host you specify to `configure'). For further background on
+this topic, see *Note Apologia Configure: (cfg-paper)Some Basic Terms,
+by K. Richard Pixley.
+
+ Use `configure' to set for the build process:
+
+ * correct values for certain variables;
+
+ * which type of host you wish to configure a given package for
+ (*note Host: Host.);
+
+ * where you want to install this package (by using `prefix',
+ `exec-prefix' and `program-prefix'; *note Full descriptions of all
+ installation directories: Install details.);
+
+ * optionally, which type of machine you wish to "target" this
+ package's output to (*note Target: Target.);
+
+ * which other GNU packages are already installed and available to
+ this particular build (by using the `--with-PACKAGE' option; *note
+ Invoking `configure': Invoking configure.);
+
+ * where to place temporary files (by using the `--tmpdir=DIR'
+ option; *note Invoking `configure': Invoking configure.);
+
+ * whether to recur in subdirectories (changeable through the
+ `--norecursion' option; *note Invoking `configure': Invoking
+ configure.).
+
+ `configure' uses a few other files to complete its tasks. These are
+discussed in detail where noted.
+
+`configure.in'
+ Input file for `configure'. Shell script fragments reside here.
+ *Note The `configure.in' input file: configure.in.
+
+`Makefile.in'
+ Template which `configure' uses to build a file called `Makefile'
+ in the "build directory". *Note `Makefile' generation: Makefile
+ generation.
+
+`config.sub'
+ Shell script used by `configure' to expand referents to the
+ HOSTTYPE argument into a single specification of the form
+ CPU-VENDOR-OS. For instance, on the command line you can specify
+
+ eg$ ./configure sun4
+
+ to configure for a Sun SPARCstation running SunOS 4.x. `configure'
+ consults `config.sub' to find that the three-part specification
+ for this is
+
+ sparc-sun-sunos4.1.1
+
+ which notes the CPU as `sparc', the MANUFACTURER as `sun' (Sun
+ Microsystems), and the OS (operating system) as `sunos4.1.1', the
+ SunOS 4.1.1 release. *Note Variables available to `configure':
+ configure variables.
+
+`config.guess'
+ If you do not put the HOSTTYPE argument on the command line,
+ `configure' uses the `config.guess' shell script to make an
+ analysis of your machine (it assumes that you wish to configure
+ your software for the type of machine on which you are running).
+ The output of `config.guess' is a three-part identifier as
+ described above.
+
+`config.status'
+ The final step in configuring a directory is to create a shell
+ script, `config.status'. The main purpose of this file is to
+ allow the `Makefile' for the current directory to rebuild itself,
+ if necessary. *Note `config.status': config.status.
+
+`config/*'
+ `configure' uses three types of `Makefile' "fragments", which
+ reside in the directory `SRCDIR/config/'. *Note Adding
+ information about local conventions: Makefile fragments.
+
+* Menu:
+
+* Build variables:: Variable-spaghetti made simple
+* Build directories:: Build directories described well
+* Makefile generation:: To build a Makefile
+* config.guess:: Be vewwy quiet, I'm hunting system information
+* config.status:: To rebuild a Makefile
+
+
+File: configure.info, Node: Build variables, Next: Build directories, Up: What configure really does
+
+Build variables
+---------------
+
+ There are several variables in the build process which you can
+control through build programs such as `make'. These include machine
+definitions, local conventions, installation locations, locations for
+temporary files, etc. This data is accessible through certain
+variables which are configurable in the build process; we refer to them
+as "build variables".
+
+ For lists of build variables which you can affect by using
+`configure', see *Note Variables available to `configure.in': configure
+variables, and *Note Full descriptions of all installation directories:
+Install details.
+
+ Generally, build variables, which are used by the `Makefile' to
+determine various aspects of the build and installation processes, are
+changeable with command-line options to `configure'. In most large
+suites of programs, like the Cygnus Support Developer's Kit, the
+individual programs reside in several subdirectories of a single source
+code "tree". All of these subdirectories need to be configured with
+information relative to the "build directory", which is not known until
+`configure' is run. Unless specified otherwise, `configure'
+recursively configures every subdirectory in the source tree.
+
+ Build variables are passed from `configure' directly into the
+`Makefile', and use the same names (except that dashes are transformed
+into underbars; for example, when you specify the option
+`--exec-prefix' on the command line, the `Makefile' variable
+`exec_prefix' is set). In other words, if you specify
+
+ eg$ ./configure --prefix=/usr/gnu/local ... HOSTTYPE
+
+on the command line, `configure' sets an variable called `prefix' to
+`/usr/gnu/local', and passes this into the `Makefile' in the same
+manner. After this command, each `Makefile' generated by `configure'
+will contain a line that reads:
+
+ prefix = /usr/gnu/local
+
+ For a list of the `Makefile' variables `configure' can change, and
+instructions on how to change them, see *Note Variables available to
+`configure.in': configure variables, and *Note Invoking `configure':
+Invoking configure.
+
+
+File: configure.info, Node: Build directories, Next: Makefile generation, Prev: Build variables, Up: What configure really does
+
+Build directories
+-----------------
+
+ By default, `configure' builds a `Makefile' and symbolic links in the
+same directory as the source files. This default works for many cases,
+but it has limitations. For instance, using this approach, you can
+only build object code for one host at a time.
+
+ We refer to each directory where `configure' builds a `Makefile' as
+a "build directory".
+
+ The build directory for any given build is always the directory from
+which you call `configure', or `.' relative to your prompt. The default
+"source directory", the place `configure' looks to find source code, is
+also `.'. For instance, if we have a directory `/gnu-stuff/src/' that
+is the top branch of a tree of GNU source code we wish to configure,
+then the program we will use to configure this code is
+`/gnu-stuff/src/configure', as follows. (Assume for the sake of
+argument that our machine is a sun4.)
+
+ eg$ cd /gnu-stuff/src
+ eg$ ./configure sun4
+ Created "Makefile" in /gnu-stuff/src
+ eg$
+
+ We just configured the code in `/gnu-stuff/src' to run on a Sun
+SPARCstation using SunOS 4.x by creating a `Makefile' in
+`/gnu-stuff/src'. By default, we also specified that when this code is
+built, the object code should reside in the same directory,
+`/gnu-stuff/src'.
+
+ However, if we wanted to build this code for more than one host, we
+would be in trouble, because the new configuration would write over the
+old one, destroying it in the process. What we can do is to make a new
+"build directory" and configure from there. Running `configure' from
+the new directory will place a correct `Makefile' and a `config.status'
+in this new file. That is all `configure' does; we must run `make' to
+generate any object code.
+
+ The new `Makefile' in `/gnu-stuff/sun4-obj', created from the
+template file `/gnu-stuff/src/Makefile.in', contains all the information
+needed to build the program.
+
+ eg$ mkdir /gnu-stuff/sun4-obj
+ eg$ cd /gnu-stuff/sun4-obj
+ eg$ ../src/configure --srcdir=../src sun4
+ Created "Makefile" in /gnu-stuff/sun4-obj
+ eg$ ls
+ Makefile config.status
+ eg$ make all info install install-info clean
+ COMPILATION MESSAGES...
+ eg$ mkdir /gnu-stuff/solaris2
+ eg$ cd /gnu-stuff/solaris2
+ eg$ ../src/configure --srcdir=../src sol2
+ Created "Makefile" in /gnu-stuff/solaris2
+ eg$ ls
+ Makefile config.status
+ eg$ make all info install install-info clean
+ COMPILATION MESSAGES...
+
+ We can repeat this for other configurations of the same software
+simply by making a new build directory and reconfiguring from inside
+it. If you do not specify the HOSTTYPE argument, `configure' will
+attempt to figure out what kind of machine and operating system you
+happen to be using. *Note Determining system information:
+config.guess. Of course, this may not always be the configuration you
+wish to build.
+
+ *Caution:* If you build more than one configuration for a single
+program, remember that you must also specify a different `--prefix' for
+each configuration at configure-time. Otherwise, both configurations
+will be installed in the same default location (`/usr/local'); the
+configuration to be installed last would overwrite previously installed
+configurations.
+
+
+File: configure.info, Node: Makefile generation, Next: config.guess, Prev: Build directories, Up: What configure really does
+
+`Makefile' generation
+---------------------
+
+ Cygnus `configure' creates a file called `Makefile' in the build
+directory which can be used with `make' to automatically build a given
+program or package. `configure' also builds a `Makefile' for each
+relevant subdirectory for a given program or package (irrelevant
+subdirectories would be those which contain no code which needs
+configuring, and which therefore have no `configure' input file
+`configure.in' and no `Makefile' template `Makefile.in'). *Note `make'
+Invocation: (make)Running, for details on using `make' to compile your
+source code.
+
+ Each `Makefile' contains variables which have been configured for a
+specific build. These build variables are determined when `configure'
+is run. All build variables have defaults. By default, `configure'
+generates a `Makefile' which specifies:
+
+ * a "native" build, which is to occur
+
+ * in the current directory, and which will be installed
+
+ * in the default installation directory (`/usr/local') when the code
+ is compiled with `make'.
+
+Variables are changeable through command-line options to `configure'
+(*note Invoking `configure': Invoking configure.).
+
+ If you are porting a new program and intend to use `configure', see
+*Note Porting with `configure': Porting, as well as *Note Writing
+Makefiles: (make)Makefiles, and *Note Makefile Conventions:
+(standards)Makefiles.
+
+
+File: configure.info, Node: config.guess, Next: config.status, Prev: Makefile generation, Up: What configure really does
+
+Determining system information
+------------------------------
+
+ The shell script `config.guess' is called when you do not specify a
+HOSTTYPE on the command line to `configure'. `config.guess' acquires
+available system information from your local machine through the shell
+command `uname'. It compares this information to a database and
+attempts to determine a usable three-part system identifier (known as a
+"triple") to use as your HOSTTYPE. *Note What `configure' really does:
+What configure really does, to see how this information is used.
+
+ *Note:* If you do not specify a HOSTTYPE on the command line,
+`configure' will attempt to configure your software to run on the
+machine you happen to be using. This may not be the configuration you
+desire.
+
+
+File: configure.info, Node: config.status, Prev: config.guess, Up: What configure really does
+
+`config.status'
+---------------
+
+ The final step in configuring a directory is to create an executable
+shell script, `config.status'. The main purpose of this file is to
+allow the `Makefile' for the current directory to rebuild itself, if
+necessary. It is usually run from within the `Makefile'. *Note
+Extensions to the GNU coding standards: Makefile extensions.
+
+ `config.status' also contains a record of the `configure' session
+which created it.
+
+
+File: configure.info, Node: configure.in, Next: Install locations, Prev: What configure really does, Up: Using configure
+
+The `configure.in' input file
+=============================
+
+ A `configure.in' file for Cygnus `configure' consists of a
+"per-invocation" section, followed by a "per-host" section, followed by
+a "per-target" section, optionally followed by a "post-target" section.
+Each section is a shell script fragment, which is executed by the
+`configure' shell script at an appropriate time. Values are passed
+among `configure' and the shell fragments through a set of shell
+variables. When each section is being interpreted by the shell, the
+shell's current directory is the build directory, and any files created
+by the section (or referred to by the section) will be relative to the
+build directory. To reference files in other places (such as the
+source directory), prepend a shell variable such as `$(srcdir)/' to the
+desired file name.
+
+ The beginning of the `configure.in' file begins the "per-invocation"
+section.
+
+ A line beginning with `# per-host:' begins the "per-host" section.
+
+ A line beginning with `# per-target:' begins the "per-target"
+section.
+
+ If it exists, the "post-target" section begins with `# post-target:'.
+
+* Menu:
+
+* configure variables:: Variables available to configure.in
+* Minimal:: A minimal configure.in
+* Declarations:: For each invocation
+* per-host:: Host-specific instructions
+* per-target:: Target-specific instructions
+* post-target:: Instructions to be executed after target info
+* Example:: An example configure.in
+
+
+File: configure.info, Node: configure variables, Next: Minimal, Up: configure.in
+
+Variables available to `configure.in'
+-------------------------------------
+
+ The following variables pass information between the standard parts
+of `configure' and the shell-script fragments in `configure.in':
+
+`srctrigger'
+ Contains the name of a source file that is expected to live in the
+ source directory. You must usually set this in the
+ "per-invocation" section of `configure.in'. `configure' tests to
+ see that this file exists. If the file does not exist,
+ `configure' prints an error message. This is used as a sanity
+ check that `configure.in' matches the source directory.
+
+`srcname'
+ Contains the name of the source collection contained in the source
+ directory. You must usually set this in the "per-invocation"
+ section of `configure.in'. If the file named in `srctrigger' does
+ not exist, `configure' uses the value of `srcname' when it prints
+ the error message.
+
+`configdirs'
+ Contains the names of any subdirectories in which `configure'
+ should recurse. You must usually set this in the "per-invocation"
+ section of `configure.in'. If `Makefile.in' contains a line
+ starting with `SUBDIRS =', then it will be replaced with an
+ assignment to `SUBDIRS' using the value of `configdirs' (if
+ `subdirs' is empty). This can be used to determine which
+ directories to configure and build depending on the host and
+ target configurations. Use `configdirs' (instead of the `subdirs'
+ variable described below) if you want to be able to partition the
+ subdirectories, or use independent `Makefile' fragments. Each
+ subdirectory can be independent, and independently reconfigured.
+
+`subdirs'
+ Contains the names of any subdirectories where `configure' should
+ create a `Makefile' (in addition to the current directory),
+ *without* recursively running `configure'. Use `subdirs' (instead
+ of the `configdirs' variable described above) if you want to
+ configure all of the directories as a unit. Since there is a
+ single invocation of `configure' that configures many directories,
+ all the directories can use the same `Makefile' fragments, and the
+ same `configure.in'.
+
+`host'
+ Contains the full configuration name for the host (generated by
+ the script `config.sub' from the name that you entered). This is
+ a three-part name (commonly referred to as a "triple") of the form
+ CPU-VENDOR-OS.
+
+ There are separate variables `host_cpu', `host_vendor', and
+ `host_os' that you can use to test each of the three parts; this
+ variable is useful, however, for error messages, and for testing
+ combinations of the three components.
+
+`host_cpu'
+ Contains the first element of the canonical triple representing
+ the host as returned by `config.sub'. This is occasionally used to
+ distinguish between minor variations of a particular vendor's
+ operating system and sometimes to determine variations in binary
+ format between the host and the target.
+
+`host_vendor'
+ Contains the second element of the canonical triple representing
+ the host as returned by `config.sub'. This is usually used to
+ distinguish among the numerous variations of *common* operating
+ systems.
+
+`host_os'
+ Contains the the third element of the canonical triple
+ representing the host as returned by `config.sub'.
+
+`target'
+ Contains the full configuration name (generated by the script
+ `config.sub' from the name that you entered) for the target. Like
+ the host, this is a three-part name of the form CPU-VENDOR-OS.
+
+ There are separate variables `target_cpu', `target_vendor', and
+ `target_os' that you can use to test each of the three parts; this
+ variable is useful, however, for error messages, and for testing
+ combinations of the three components.
+
+`target_cpu'
+ Contains the first element of the canonical triple representing
+ the target as returned by `config.sub'. This variable is used
+ heavily by programs which are involved in building other programs,
+ like the compiler, assembler, linker, etc. Most programs will not
+ need the `target' variables at all, but this one could conceivably
+ be used to build a program, for instance, that operated on binary
+ data files whose byte order or alignment differ from the system
+ where the program is running.
+
+`target_vendor'
+ Contains the second element of the canonical triple representing
+ the target as returned by `config.sub'. This is usually used to
+ distinguish among the numerous variations of *common* operating
+ systems or object file formats. It is sometimes used to switch
+ between different flavors of user interfaces.
+
+`target_os'
+ Contains the the third element of the canonical triple
+ representing the target as returned by `config.sub'. This
+ variable is used by development tools to distinguish between
+ subtle variations in object file formats that some vendors use
+ across operating system releases. It might also be use to decide
+ which libraries to build or what user interface the tool should
+ provide.
+
+`floating_point'
+ Set to `no' if you invoked `configure' with the `--nfp'
+ command-line option, otherwise it is empty. This is a request to
+ target machines with "no floating point" unit, even if the targets
+ ordinarily have floating point units available.
+
+`gas'
+ Set to `true' if you invoked `configure' with the `--with-gnu-as'
+ command line option, otherwise it is empty. This is a request to
+ assume that the specified HOSTTYPE machine has GNU `as' available
+ even if it ordinarily does not.
+
+`srcdir'
+ Set to the name of the directory containing the source for this
+ program. This will be different from `.' if you have specified the
+ `--srcdir=DIR' option. `srcdir' can indicate either an absolute
+ path or a path relative to the build directory.
+
+`package_makefile_frag'
+ If set in `configure.in', this variable should be the name a file
+ relative to `srcdir' to be included in the resulting `Makefile'.
+ If the named file does not exist, `configure' will print a warning
+ message. This variable is not set by `configure'.
+
+`host_makefile_frag'
+ If set in `configure.in', this variable should be the name a file
+ relative to `srcdir' to be included in the resulting `Makefile'.
+ If the named file does not exist, `configure' will print a warning
+ message. This variable is not set by `configure'.
+
+`target_makefile_frag'
+ If set in `configure.in', this variable should be the name of a
+ file, relative to `srcdir', to be included in the resulting
+ `Makefile'. If the named file does not exist, `configure' will
+ print a warning message. This variable is not set by `configure'.
+
+`site_makefile_frag'
+ Set to a file name representing to the default `Makefile' fragment
+ for this host. It may be set in `configure.in' to override this
+ default. Normally `site_makefile_frag' is empty, but will have a
+ value if you specify `--site=SITE' on the command line.
+
+`Makefile'
+ Set to the name of the generated `Makefile'. Normally this value
+ is precisely `Makefile', but some programs may want something else.
+
+`removing'
+ Normally empty but will be set to some non-null value if you
+ specified `--rm' on the command line. That is, if `removing' is
+ not empty, then `configure' is *removing* a configuration rather
+ than creating one.
+
+`files'
+ If this variable is not empty following the "per-target" section,
+ then each word in its value will be the target of a symbolic link
+ named in the corresponding word from the `links' variable.
+
+`links'
+ If the `files' variable is not empty following the "per-target"
+ section, then `configure' creates symbolic links with the first
+ word of `links' pointing to the first word of `files', the second
+ word of `links' pointing to the second word of `files', and so on.
+
+
+File: configure.info, Node: Minimal, Next: Declarations, Prev: configure variables, Up: configure.in
+
+A minimal `configure.in'
+------------------------
+
+ A minimal `configure.in' consists of four lines.
+
+ srctrigger=foo.c
+ srcname="source for the foo program"
+ # per-host:
+ # per-target:
+
+ The `# per-host:' and `# per-target:' lines divide the file into the
+three required sections. The `srctrigger' line names a file.
+`configure' checks to see that this file exists in the source directory
+before configuring. If the `srctrigger' file does not exist,
+`configure' uses the value of `srcname' to print an error message about
+not finding the source.
+
+ This particular example uses no links, and only the default host,
+target, and site-specific `Makefile' fragments if they exist.
+
+
+File: configure.info, Node: Declarations, Next: per-host, Prev: Minimal, Up: configure.in
+
+For each invocation
+-------------------
+
+ `configure' invokes the entire shell script fragment from the start
+of `configure.in' up to a line beginning with `# per-host:' immediately
+after parsing command line arguments. The variables `srctrigger' and
+`srcname' *must* be set here.
+
+ You might also want to set the variables `configdirs' and
+`package_makefile_frag' here.
+
+
+File: configure.info, Node: per-host, Next: per-target, Prev: Declarations, Up: configure.in
+
+Host-specific instructions
+--------------------------
+
+ The "per-host" section of `configure.in' starts with the line that
+begins with `# per-host:' and ends before a line beginning with
+`# per-target:'. `configure' invokes the commands in the "per-host"
+section when determining host-specific information.
+
+ This section usually contains a big `case' statement using the
+variable `host' to determine appropriate values for
+`host_makefile_frag' and `files', although `files' is not usually set
+here. Usually, it is set at the end of the "per-target" section after
+determining the names of the target specific configuration files.
+
+
+File: configure.info, Node: per-target, Next: post-target, Prev: per-host, Up: configure.in
+
+Target-specific instructions
+----------------------------
+
+ The "per-target" section of `configure.in' starts with the line that
+begins with `# per-target:' and ends before the line that begins with
+`# post-target:', if there is such a line. Otherwise the "per-target"
+section extends to the end of the file. `configure' invokes the
+commands in the "per-target" section when determining target-specific
+information, and before building any files, directories, or links.
+
+ This section usually contains a big `case' statement using the
+variable `target' to determine appropriate values for
+`target_makefile_frag' and `files'. The last lines in the "per-target"
+section normally set the variables `files' and `links'.
+
+
+File: configure.info, Node: post-target, Next: Example, Prev: per-target, Up: configure.in
+
+Instructions to be executed after target info
+---------------------------------------------
+
+ The "post-target" section is optional. If it exists, the
+`post-target' section starts with a line beginning with
+`# Post-target:' and extends to the end of the file. If it exists,
+`configure' invokes this section once for each target after building
+all files, directories, or links.
+
+ This section is seldom needed, but you can use it to edit the
+`Makefile' generated by `configure'.
+
+
+File: configure.info, Node: Example, Prev: post-target, Up: configure.in
+
+An example `configure.in'
+-------------------------
+
+ Here is a small example of a `configure.in' file.
+
+ # This file is a collection of shell script fragments
+ # used to tailor a template configure script as
+ # appropriate for this directory. For more information,
+ # see configure.texi.
+
+ configdirs=
+ srctrigger=warshall.c
+ srcname="bison"
+
+ # per-host:
+ case "${host}" in
+ m88k-motorola-*)
+ host_makefile_frag=config/mh-delta88
+ ;;
+ esac
+
+ # per-target:
+ files="bison_in.hairy"
+ links="bison.hairy"
+
+ # post-target:
+
+
+File: configure.info, Node: Install locations, Next: Host, Prev: configure.in, Up: Using configure
+
+Install locations
+=================
+
+ Using the default configuration, `make install' creates a single
+tree of files, some of which are programs. The location of this tree
+is determined by the value of the variable `prefix'. The default value
+of `prefix' is `/usr/local'. This is often correct for native tools
+installed on only one host.
+
+* Menu:
+
+* prefix:: Changing the default install directory
+* exec_prefix:: How to separate host independent files
+ from host dependent files when
+ installing for multiple hosts
+* Install details:: Full descriptions of all installation subdirectories
+
+
+File: configure.info, Node: prefix, Next: exec_prefix, Up: Install locations
+
+Changing the default install directory
+--------------------------------------
+
+ In the default configuration, all files are installed in
+subdirectories of `/usr/local'. The location is determined by the
+value of the `configure' variable `prefix'; in turn, this determines the
+value of the `Makefile' variable of the same name (`prefix').
+
+ You can also set the value of the `Makefile' variable `prefix'
+explicitly each time you invoke `make' if you are so inclined. However,
+because many programs have this location compiled in, you must specify
+the `prefix' value consistently on each invocation of `make', or you
+will end up with a broken installation.
+
+ To make this easier, the value of the `configure' variable `prefix'
+can be set on the command line to `configure' using the option
+`--prefix='.
+
+
+File: configure.info, Node: exec_prefix, Next: Install details, Prev: prefix, Up: Install locations
+
+Installing for multiple hosts
+-----------------------------
+
+ By default, host dependent files are installed in subdirectories of
+`$(exec_prefix)'. The location is determined by the value of the
+`configure' variable `exec_prefix', which determines the value of the
+`Makefile' variable `exec_prefix'. This makes it easier to install for
+a single host, and simplifies changing the default location for the
+install tree. The default doesn't allow for multiple hosts to
+effectively share host independent files, however.
+
+ To configure so that multiple hosts can share common files, use
+something like:
+
+ configure HOST1 -prefix=/usr/gnu -exec_prefix=/usr/gnu/H-host1
+ make all info install install-info clean
+
+ configure HOST2 -prefix=/usr/gnu -exec_prefix=/usr/gnu/H-host2
+ make all info install install-info
+
+ The first line configures the source for HOST1 to place host-specific
+programs in subdirectories of `/usr/gnu/H-HOST1'.
+
+ The second line builds and installs all programs for HOST1,
+including both host-independent and host-specific files, as well as
+removing the host-specific object files from of the build directory.
+
+ The third line reconfigures the source for HOST2 to place host
+specific programs in subdirectories of `/usr/gnu/H-HOST2'.
+
+ The fourth line builds and installs all programs for HOST2. Host
+specific files are installed in new directories, but the host
+independent files are installed *on top of* the host independent files
+installed for HOST1. This results in a single copy of the host
+independent files, suitable for use by both hosts.
+
+ *Note Extensions to the GNU coding standards: Makefile extensions,
+for more information.
+
+
+File: configure.info, Node: Install details, Prev: exec_prefix, Up: Install locations
+
+Full descriptions of all installation subdirectories
+----------------------------------------------------
+
+ During any install, a number of standard directories are created.
+Their names are determined by `Makefile' variables. Some of the
+defaults for `Makefile' variables can be changed at configuration time
+using command line options to `configure'. For more information on the
+standard directories or the `Makefile' variables, please refer to *Note
+Makefile Conventions: (standards)Makefiles. See also *Note Extensions
+to the GNU coding standards: Makefile extensions.
+
+ Note that `configure' does not create the directory indicated by the
+variable `srcdir' at any time. `$(srcdir)' is not an installation
+directory.
+
+ You can override all `Makefile' variables on the command line to
+`make'. (*Note Overriding Variables: (make)Overriding.) If you do so,
+you will need to specify the value precisely the same way for each
+invocation of `make', or you risk ending up with a broken installation.
+This is because many programs have the locations of other programs or
+files compiled into them. If you find yourself overriding any of the
+variables frequently, you should consider site dependent `Makefile'
+fragments. See also *Note Adding site info: Sites.
+
+ During `make install', a number of standard directories are created
+and populated. The following `Makefile' variables define them. Those
+whose defaults are set by corresponding `configure' variables are marked
+"`Makefile' and `configure'".
+
+`prefix (`Makefile' and `configure')'
+ The root of the installation tree. You can set its `Makefile'
+ default with the `--prefix=' command line option to `configure'
+ (*note Invoking `configure': Invoking configure.). The default
+ value for `prefix' is `/usr/local'.
+
+`bindir'
+ A directory for binary programs that users can run. The default
+ value for `bindir' depends on `prefix'; `bindir' is normally
+ changed only indirectly through `prefix'. The default value for
+ `bindir' is `$(prefix)/bin'.
+
+`exec_prefix (`Makefile' and `configure')'
+ A directory for host dependent files. You can specify the
+ `Makefile' default value by using the `--exec_prefix=' option to
+ `configure'. (*Note Invoking `configure': Invoking configure.)
+ The default value for `exec_prefix' is `$(prefix)'.
+
+`libdir'
+ A directory for libraries and support programs. The default value
+ for `libdir' depends on `prefix'; `libdir' is normally changed only
+ indirectly through `prefix'. The default value for `libdir' is
+ `$(prefix)/lib'.
+
+`mandir'
+ A directory for `man' format documentation ("man pages"). The
+ default value for `mandir' depends on `prefix'; `mandir' is
+ normally changed only indirectly through `prefix'. The default
+ value for `mandir' is `$(prefix)/man'.
+
+`manNdir'
+ These are eight variables named `man1dir', `man2dir', etc. They
+ name the specific directories for each man page section. For
+ example, `man1dir' by default holds the filename `$(mandir)/man1';
+ this directory contains `emacs.1' (the man page for GNU Emacs).
+ Similarly, `man5dir' contains the value `$(mandir)/man5',
+ indicating the directory which holds `rcsfile.5' (the man page
+ describing the `rcs' data file format). The default value for any
+ of the `manNdir' variables depends indirectly on `prefix', and is
+ normally changed only through `prefix'. The default value for
+ `manNdir' is `$(mandir)/manN'.
+
+`manNext'
+ *Not supported by Cygnus `configure'*. The `GNU Coding Standards'
+ do not call for `man1ext', `man2ext', so the intended use for
+ `manext' is apparently not parallel to `mandir'. Its use is not
+ clear. (See also *Note Extensions to the GNU coding standards:
+ Makefile extensions.)
+
+`infodir'
+ A directory for `info' format documentation. The default value for
+ `infodir' depends indirectly on `prefix'; `infodir' is normally
+ changed only through `prefix'. The default value for `infodir' is
+ `$(prefix)/info'.
+
+`docdir'
+ A directory for any documentation that is in a format other than
+ those used by `info' or `man'. The default value for `docdir'
+ depends indirectly on `prefix'; `docdir' is normally changed only
+ through `prefix'. The default value for `docdir' is
+ `$(datadir)/doc'. *This variable is an extension to the GNU
+ coding standards*. (See also *Note Extensions to the GNU coding
+ standards: Makefile extensions.)
+
+`includedir'
+ A directory for the header files accompanying the libraries
+ installed in `libdir'. The default value for `includedir' depends
+ on `prefix'; `includedir' is normally changed only indirectly
+ through `prefix'. The default value for `includedir' is
+ `$(prefix)/include'.
+
+
+File: configure.info, Node: Host, Next: Target, Prev: Install locations, Up: Using configure
+
+Host
+====
+
+ The arguments to `configure' are "hosttypes". By "hosttype" we mean
+the "environment" in which the source will be compiled. This need not
+necessarily be the same as the physical machine involved, although it
+usually is.
+
+ For example, if some obscure machine had the GNU `POSIX' emulation
+libraries available, it would be possible to configure most GNU source
+for a `POSIX' system and build it on the obscure host.
+
+ For more on this topic, see *Note On Configuring Development Tools:
+(cfg-paper)Host Environments.
+
+
+File: configure.info, Node: Target, Next: Makefile fragments, Prev: Host, Up: Using configure
+
+Target
+======
+
+ For building native development tools, or most of the other GNU
+tools, you need not worry about the target. The "target" of a
+configuration defaults to the same as the "host".
+
+ For building cross development tools, please see *Note On
+Configuring Development Tools: (cfg-paper)Building Development
+Environments.
+