Annotation of GNUtools/libg++/etc/configure.texi, revision 1.1

1.1     ! root        1: \input texinfo    @c -*-texinfo-*-
        !             2: @setfilename configure.info
        !             3: @settitle Cygnus configure
        !             4: 
        !             5: @synindex ky cp
        !             6: 
        !             7: @setchapternewpage odd
        !             8: 
        !             9: @ifinfo
        !            10: @format
        !            11: START-INFO-DIR-ENTRY
        !            12: * configure::                   Cygnus configure.
        !            13: END-INFO-DIR-ENTRY
        !            14: @end format
        !            15: @end ifinfo
        !            16: 
        !            17: @ifinfo
        !            18: This document describes the Cygnus Support version of @code{configure}.
        !            19: 
        !            20: Copyright (C) 1991, 1992, 1993 Cygnus Support
        !            21: Permission is granted to make and distribute verbatim copies of
        !            22: this manual provided the copyright notice and this permission notice
        !            23: are preserved on all copies.
        !            24: 
        !            25: @ignore
        !            26: Permission is granted to process this file through TeX and print the
        !            27: results, provided the printed document carries copying permission
        !            28: notice identical to this one except for the removal of this paragraph
        !            29: (this paragraph not being relevant to the printed manual).
        !            30: @end ignore
        !            31: 
        !            32: Permission is granted to copy and distribute modified versions of this
        !            33: manual under the conditions for verbatim copying, provided that the entire
        !            34: resulting derived work is distributed under the terms of a permission
        !            35: notice identical to this one.
        !            36: 
        !            37: Permission is granted to copy and distribute translations of this manual
        !            38: into another language, under the above conditions for modified versions,
        !            39: except that this permission notice may be stated in a translation approved
        !            40: by Cygnus Support.
        !            41: @end ifinfo
        !            42: 
        !            43: @smallbook
        !            44: @finalout
        !            45: @titlepage
        !            46: @title Cygnus configure
        !            47: @author K. Richard Pixley
        !            48: @author Cygnus Support
        !            49: @page
        !            50: @cindex copyleft
        !            51: 
        !            52: @vskip 0pt plus 1filll
        !            53: Edited January, 1993, by Jeffrey Osier, Cygnus Support.
        !            54: 
        !            55: Copyright @copyright{} 1991, 1992, 1993 Cygnus Support
        !            56: 
        !            57: Permission is granted to make and distribute verbatim copies of
        !            58: this manual provided the copyright notice and this permission notice
        !            59: are preserved on all copies.
        !            60: 
        !            61: Permission is granted to copy and distribute modified versions of this
        !            62: manual under the conditions for verbatim copying, provided that the entire
        !            63: resulting derived work is distributed under the terms of a permission
        !            64: notice identical to this one.
        !            65: 
        !            66: Permission is granted to copy and distribute translations of this manual
        !            67: into another language, under the above conditions for modified versions,
        !            68: except that this permission notice may be stated in a translation approved
        !            69: by Cygnus Support.
        !            70: @end titlepage
        !            71: 
        !            72: @c ---------------------------------------------------------------------
        !            73: @ifinfo
        !            74: @node Top
        !            75: @top Cygnus configure
        !            76: 
        !            77: This file documents the configuration system used and distributed by
        !            78: Cygnus Support.
        !            79: 
        !            80: @menu
        !            81: * What configure does::    What configure does
        !            82: * Invoking configure::     Invoking configure---basic usage
        !            83: * Using configure::        More than you ever wanted to know
        !            84: * Porting::                How to use configure with new programs
        !            85: * Variables Index::
        !            86: * Concept Index::
        !            87: @end menu
        !            88: @end ifinfo
        !            89: 
        !            90: @c ---------------------------------------------------------------------
        !            91: @node What configure does
        !            92: @chapter What @code{configure} does
        !            93: @cindex Introduction
        !            94: @cindex Overview
        !            95: @cindex What @code{configure} does
        !            96: @kindex Cygnus Support Developer's Kit
        !            97: 
        !            98: This manual documents Cygnus @code{configure}, a program which helps to
        !            99: automate much of the setup activity associated with building large suites of
        !           100: programs, such the Cygnus Support Developer's Kit.  This manual is therefore
        !           101: geared toward readers who are likely to face the problem of configuring
        !           102: software in source form before compiling and installing it.  We assume you are
        !           103: an experienced programmer or system administrator.
        !           104: @ifinfo
        !           105: For further background on this topic, see @ref{Some Basic Terms, , Apologia
        !           106: Configure, cfg-paper, On Configuring Development Tools}, by K. Richard
        !           107: Pixley.
        !           108: @end ifinfo
        !           109: @iftex
        !           110: For further background on this topic, see @cite{On Configuring Development
        !           111: Tools} by K. Richard Pixley.
        !           112: @end iftex
        !           113: 
        !           114: When @code{configure} runs, it does the following things:
        !           115: 
        !           116: @table @emph
        !           117: @item @bullet{} creates build directories
        !           118: @vindex srcdir
        !           119: @cindex @code{srcdir}
        !           120: @cindex Build directories
        !           121: When you run @code{configure} with the @samp{--srcdir} option, it uses the
        !           122: current directory as the @dfn{build directory}, creating under it a directory
        !           123: tree that parallels the directory structure of the source directory.  If you
        !           124: don't specify a @samp{srcdir}, @code{configure} first assumes that the source
        !           125: code you wish to configure is in your current directory; if it finds no
        !           126: @file{configure.in} input file there, it searches in the directory
        !           127: @code{configure} itself lies in.  (For details, see @ref{Build directories, ,
        !           128: Build directories}.)
        !           129: 
        !           130: @item @bullet{} generates @file{Makefile}
        !           131: @cindex @code{Makefile} generation
        !           132: A @file{Makefile} template from the source directory, usually called
        !           133: @file{Makefile.in}, is copied to an output file in the build directory which is
        !           134: most often named @file{Makefile}.  @code{configure} places definitions for a
        !           135: number of standard @file{Makefile} macros at the beginning of the output file.
        !           136: If @w{@samp{--prefix=@var{dir}}} or @w{@samp{--exec_prefix=@var{dir}}} are
        !           137: specified on the @code{configure} command line, corresponding @file{Makefile}
        !           138: variables are set accordingly.  If host, target, or site-specific
        !           139: @file{Makefile} fragments exist, these are inserted into the output file.  (For
        !           140: details, see @ref{Makefile generation, , @code{Makefile} generation}.)
        !           141: 
        !           142: @item @bullet{} generates @file{.gdbinit}
        !           143: @cindex @code{.gdbinit}
        !           144: If the source directory contains a @file{.gdbinit} file and the build directory
        !           145: is not the same as the source directory, a @file{.gdbinit} file is created in
        !           146: the build directory.  This @file{.gdbinit} file contains commands which allow
        !           147: the source directory to be read when debugging with the @sc{gnu} debugger,
        !           148: @code{gdb}.  (@xref{Command Files, , Command Files, gdb, Debugging With GDB}.)
        !           149: 
        !           150: @item @bullet{} makes symbolic links
        !           151: @cindex Symbolic links
        !           152: Most build directories require that some symbolic links with generic names are
        !           153: built pointing to specific files in the source directory.  If the system where
        !           154: @code{configure} runs cannot support symbolic links, hard links are used
        !           155: instead.  (For details, see @ref{configure.in, , The @code{configure.in} input
        !           156: file}.)
        !           157: 
        !           158: @item @bullet{} generates @file{config.status}
        !           159: @cindex @code{config.status}
        !           160: @code{configure} creates a shell script named @file{config.status} in the build
        !           161: directory.  This shell script, when run from the build directory (usually from
        !           162: within a @file{Makefile}), will reconfigure the build directory (but not its
        !           163: subdirectories).  This is most often used to have a @file{Makefile} update
        !           164: itself automatically if a new source directory is available.
        !           165: 
        !           166: @item @bullet{} calls itself recursively
        !           167: @cindex Recursion
        !           168: If the source directory has subdirectories that should also be configured,
        !           169: @code{configure} is called for each.  
        !           170: @end table
        !           171: 
        !           172: @c ---------------------------------------------------------------------
        !           173: @node Invoking configure
        !           174: @chapter Invoking @code{configure}
        !           175: @cindex Invoking @code{configure}
        !           176: @cindex Usage
        !           177: 
        !           178: Cygnus @code{configure} is a shell script which resides in a source tree.  The
        !           179: usual way to invoke @code{configure} is from the shell, as follows:
        !           180: 
        !           181: @cindex Example session
        !           182: @example
        !           183: eg$ ./configure @var{hosttype}
        !           184: @end example
        !           185: 
        !           186: @noindent
        !           187: This prepares the source in the current directory (@file{.}) to be
        !           188: compiled for a @var{hosttype} environment.  It assumes that you wish to
        !           189: build programs and files in the default @dfn{build directory} (also the
        !           190: current directory, @file{.}).  If you do not specify a value for
        !           191: @var{hosttype}, Cygnus @code{configure} will attempt to discover this
        !           192: information by itself (@pxref{config.guess, , Determining system
        !           193: information}).  For information on @var{hosttype} environments,
        !           194: @xref{Host, , Host}.
        !           195: 
        !           196: All @sc{gnu} software is packaged with one or more @code{configure} script(s)
        !           197: (@pxref{Configuration, , How Configuration Should Work, standards, GNU Coding
        !           198: Standards}).  By using @code{configure} you prepare the source for your
        !           199: specific environment by selecting and using @file{Makefile} fragments and
        !           200: fragments of shell scripts, which are prepared in advance and stored with the
        !           201: source.
        !           202: 
        !           203: @code{configure}'s command-line options also allow you to specify other aspects
        !           204: of the source configuration:
        !           205: 
        !           206: @smallexample
        !           207:   configure @var{hosttype}  [--target=@var{target}] [--srcdir=@var{dir}] [--rm]
        !           208:             [--site=@var{site}] [--prefix=@var{dir}] [--exec-prefix=@var{dir}]
        !           209:             [--program-prefix=@var{string}] [--tmpdir=@var{dir}]
        !           210:             [--with-@var{package}[=@var{yes/no}]] [--norecursion]
        !           211:             [--nfp] [-s] [-v] [-V | --version] [--help]
        !           212: @end smallexample
        !           213: 
        !           214: @table @code
        !           215: @item --target=@var{target}
        !           216: @cindex @code{--target}
        !           217: @cindex @code{target} option
        !           218: @vindex target
        !           219: Requests that the sources be configured to target the @var{target} machine.  If
        !           220: no target is specified explicitly, the target is assumed to be the same as the
        !           221: host (i.e., a @dfn{native} configuration).  @xref{Host, , Host}, and
        !           222: @ref{Target, , Target}, for
        !           223: discussions of each.
        !           224: 
        !           225: @item --srcdir=@var{dir}
        !           226: @cindex @code{--srcdir}
        !           227: @cindex @code{srcdir} option
        !           228: @vindex srcdir
        !           229: Direct each generated @file{Makefile} to use the sources located in directory
        !           230: @var{dir}.  Use this option whenever you wish the object code to reside in a
        !           231: different place from the source code.  The @dfn{build directory} is always
        !           232: assumed to be the directory you call @code{configure} from.  See @ref{Build
        !           233: directories, , Build directories}, for an example.  If the source directory is
        !           234: not specified, @code{configure} assumes that the source is in your current
        !           235: directory.  If @code{configure} finds no @file{configure.in} there, it searches
        !           236: in the same directory that the @code{configure} script itself lies in.
        !           237: Pathnames specified (Values for @var{dir}) can be either absolute relative to
        !           238: the @emph{build} directory.
        !           239: 
        !           240: @item --rm
        !           241: @cindex @code{--rm}
        !           242: @cindex @code{rm} option
        !           243: @vindex rm
        !           244: @emph{Remove} the configuration specified by @var{hosttype} and the other
        !           245: command-line options, rather than create it.
        !           246: 
        !           247: @c FIXME: check @ref
        !           248: @quotation
        !           249: @emph{Note:} We recommend that you use @samp{make distclean} rather than
        !           250: use this option; see @ref{Invoking make,,Invoking @code{make},make,GNU
        !           251: Make}, for details on @samp{make distclean}.
        !           252: @end quotation
        !           253: 
        !           254: @item --site=@var{site}
        !           255: @cindex @code{--site}
        !           256: @cindex @code{site} option
        !           257: @vindex site
        !           258: Generate the @file{Makefile} using site-specific @file{Makefile} fragments for
        !           259: @var{site}.  @xref{Makefile fragments, , Adding information about local
        !           260: conventions}.
        !           261: 
        !           262: @item --prefix=@var{dir}
        !           263: @cindex @code{--prefix}
        !           264: @cindex @code{prefix} option
        !           265: @vindex prefix
        !           266: Configure the source to install programs and files under directory @var{dir}.
        !           267: 
        !           268: This option sets the variable @samp{prefix}.  Each generated @file{Makefile}
        !           269: will have its @samp{prefix} variables set to this value.  (@xref{What configure
        !           270: really does, , What @code{configure} really does}.)
        !           271: 
        !           272: @item --exec-prefix=@var{dir}
        !           273: @cindex @code{--exec-prefix}
        !           274: @cindex @code{exec-prefix} option
        !           275: @vindex exec-prefix
        !           276: Configure the source to install @dfn{host dependent} files in @var{dir}.
        !           277: 
        !           278: This option sets the variable @samp{exec_prefix}.  Each generated
        !           279: @file{Makefile} will have its @samp{exec_prefix} variables set to this value.
        !           280: (@xref{What configure really does, , What @code{configure} really does}.)
        !           281: 
        !           282: @item --program-prefix=@var{string}
        !           283: @cindex @code{--program-prefix}
        !           284: @cindex @code{program-prefix} option
        !           285: @vindex program-prefix
        !           286: Configure the source to install certain programs using @var{string} as a
        !           287: prefix.  This applies to programs which might be used for cross-compilation,
        !           288: such as the compiler and the binary utilities, and also to programs which have
        !           289: the same names as common Unix programs, such as @code{make}.
        !           290: 
        !           291: This option sets the variable @samp{program_prefix}.  Each generated
        !           292: @file{Makefile} will have its @samp{program_prefix} variables set to this
        !           293: value.  (@xref{What configure really does, , What @code{configure} really
        !           294: does}.)
        !           295: 
        !           296: @item --tmpdir=@var{tmpdir}
        !           297: @cindex @code{--tmpdir}
        !           298: @cindex @code{tmpdir} option
        !           299: @vindex tmpdir
        !           300: Use the directory @var{tmpdir} for @code{configure}'s temporary files.  The
        !           301: default is the value of the environment variable @w{@code{TMPDIR}}, or
        !           302: @file{/tmp} if the environment variable is not set.
        !           303: 
        !           304: @item --with-@var{package}[=@var{yes/no}]
        !           305: @cindex @code{--with-@var{package}}
        !           306: @cindex @code{with-@var{package}} option
        !           307: @vindex with-@var{package}
        !           308: Indicate that @var{package} is present, or not present, depending on
        !           309: @var{yes/no}.  If @var{yes/no} is nonexistent, its value is assumed to
        !           310: be @code{yes}.
        !           311: 
        !           312: For example, if you wish to configure the program @code{gcc} for a Sun
        !           313: SPARCstation running SunOS 4.x, and you want @code{gcc} to use the
        !           314: @sc{gnu} linker @code{ld}, you can configure @code{gcc} using
        !           315: 
        !           316: @cindex Example session
        !           317: @smallexample
        !           318: eg$ configure --with-gnu-ld sun4
        !           319: @end smallexample
        !           320: 
        !           321: @noindent
        !           322: @xref{What configure really does, , What @code{configure} really does}, for
        !           323: details.  See the installation or release notes for your particular package for
        !           324: details on which other @var{package} options are recognized.
        !           325: @c FIXME - need to include info about --with-* in other dox!
        !           326: 
        !           327: @item --norecursion
        !           328: @cindex @code{--norecursion}
        !           329: @cindex @code{norecursion} option
        !           330: @vindex norecursion
        !           331: Configure only this directory; ignore any subdirectories.  This is used by the
        !           332: executable shell script @file{config.status} to reconfigure only the current
        !           333: directory; it is most often used non-interactively, when @code{make} is
        !           334: invoked.  (@xref{config.status, , @code{config.status}}.)
        !           335: 
        !           336: @item --nfp
        !           337: @cindex @code{--nfp}
        !           338: @cindex @code{nfp} option
        !           339: @vindex nfp
        !           340: Assume that the intended @var{hosttype} has no floating point unit.
        !           341: 
        !           342: @item -s
        !           343: @cindex @code{-s}
        !           344: @cindex @code{s} option
        !           345: Suppress status output.  This option is used internally by
        !           346: @code{configure} when calling itself recursively in subdirectories.  You
        !           347: can override this option with the @code{--verbose} option.
        !           348: 
        !           349: @item -v
        !           350: @itemx --verbose
        !           351: @cindex @code{-v}
        !           352: @cindex @code{--verbose}
        !           353: @cindex @code{v} option
        !           354: @cindex @code{verbose} option
        !           355: @cindex Verbose Output
        !           356: @vindex verbose
        !           357: Print status lines for each directory configured.  Normally, only the
        !           358: status lines for the initial working directory are printed.
        !           359: 
        !           360: @item --version
        !           361: @itemx -V
        !           362: @cindex version
        !           363: @cindex @code{--version}
        !           364: @cindex version
        !           365: Print the @code{configure} version number.
        !           366: 
        !           367: @item --help
        !           368: @cindex Usage
        !           369: @cindex @code{--help}
        !           370: @cindex @code{help} option
        !           371: Print a short summary of how to invoke @code{configure}.
        !           372: @end table
        !           373: 
        !           374: @cindex Abbreviating option names
        !           375: @cindex Truncating option names
        !           376: @cartouche
        !           377: @emph{Note:} You may introduce options with a single dash, @samp{-}, rather
        !           378: than two dashes, @samp{--}.  However, you may not be able to truncate long
        !           379: option names when using a single dash.  When using two dashes, options may be
        !           380: abbreviated as long as each option can be uniquely identified.  For example,
        !           381: @smallexample
        !           382: eg$ configure --s=/u/me/src @var{hosttype}
        !           383: @end smallexample
        !           384: @noindent
        !           385: is ambiguous, as @w{@samp{--s}} could refer to either @w{@samp{--site}} or
        !           386: @w{@samp{--srcdir}}.  However,
        !           387: @smallexample
        !           388: eg$ configure --src=/u/me/src @var{hosttype}
        !           389: @end smallexample
        !           390: @noindent
        !           391: is a valid abbreviation.
        !           392: @end cartouche
        !           393: 
        !           394: 
        !           395: @c ========================================================================
        !           396: @node Using configure
        !           397: @chapter Using @code{configure}
        !           398: @cindex Using @code{configure}
        !           399: @cindex Detailed usage
        !           400: @cindex Usage: detailed
        !           401: 
        !           402: @code{configure} prepares source directories for building programs in
        !           403: them.  ``Configuring'' is the process of preparing software to compile
        !           404: correctly on a given @dfn{host}, for a given @dfn{target}.
        !           405: 
        !           406: @code{configure} subsequently writes a configured @file{Makefile} from a
        !           407: pre-built template; @code{configure} uses variables that have been set in the
        !           408: configuring process to determine the values of some variables in the
        !           409: @file{Makefile}.  Because of this we will refer to both @code{configure}
        !           410: variables and @file{Makefile} variables.  This convention allows us to
        !           411: determine where the variable should be set initially, in either
        !           412: @file{configure.in} or @file{Makefile.in}.
        !           413: 
        !           414: @menu
        !           415: * What configure really does:: What configure really does
        !           416: * configure.in::               The configure.in input file
        !           417: * Install locations::          Where to install things once they are built
        !           418: * Host::                       Telling configure what will source will be built
        !           419: * Target::                     Telling configure what the source will target
        !           420: * Makefile fragments::         Adding information about local conventions
        !           421: * Makefile extensions::        Extensions to the GNU coding standards
        !           422: @end menu
        !           423: 
        !           424: @c ---------------------------------------------------------------------
        !           425: @node What configure really does
        !           426: @section What @code{configure} really does
        !           427: @cindex What @code{configure} really does
        !           428: @cindex Behind the scenes
        !           429: @cindex @code{configure} back end
        !           430: @cindex @code{configure} details
        !           431: 
        !           432: Cygnus @code{configure} is a shell script that sets up an environment in
        !           433: which your programs will compile correctly for your machine and
        !           434: operating system, and will install in proper places.  @code{configure}
        !           435: accomplishes this task by doing the following:
        !           436: 
        !           437: @itemize @bullet
        !           438: @item 
        !           439: it generates a @file{Makefile} from a custom template called
        !           440: @file{Makefile.in} in each relevant source directory;
        !           441: 
        !           442: @item 
        !           443: it customizes the build process to your specifications; you set certain
        !           444: variables for @code{configure}, either on the command line or in the
        !           445: file @file{configure.in}, which subsequently sets variables in each
        !           446: generated @file{Makefile} to be used by @code{make} when actually
        !           447: building the software;
        !           448: 
        !           449: @item 
        !           450: it creates @dfn{build directories}, places for your code to be compiled
        !           451: in before being installed;
        !           452: 
        !           453: @item 
        !           454: it generates a @file{.gdbinit} in the build directory, if needed, to
        !           455: communicate to @code{gdb} where to find the program's source code;
        !           456: 
        !           457: @item 
        !           458: it generates a shell script called @file{config.status}
        !           459: which is used most often by the @file{Makefile} to reconfigure itself;
        !           460: 
        !           461: @item 
        !           462: it recurses in subdirectories, setting up entire trees so that they build
        !           463: correctly; if @code{configure} finds another @code{configure} script
        !           464: further down in a given source tree, it knows to use this script and not
        !           465: recur.
        !           466: @end itemize
        !           467: 
        !           468: For the sake of safety (i.e., in order to prevent broken installations), the
        !           469: @sc{gnu} coding standards call for software to be @dfn{configured} in such a
        !           470: way that an end user trying to build a given package will be able to do so by
        !           471: affecting a finite number of variables.  All @sc{gnu} software comes with an
        !           472: executable @code{configure} shell script which sets up an environment within a
        !           473: build directory which will correctly compile your new package for your host
        !           474: (or, alternatively, whatever host you specify to @code{configure}).
        !           475: @ifinfo
        !           476: For further background on this topic, see @ref{Some Basic Terms, , Apologia
        !           477: Configure, cfg-paper, On Configuring Development Tools}, by K. Richard
        !           478: Pixley.
        !           479: @end ifinfo
        !           480: @iftex
        !           481: For further background on this topic, see @cite{On Configuring Development
        !           482: Tools} by K. Richard Pixley.
        !           483: @end iftex
        !           484: 
        !           485: Use @code{configure} to set for the build process:
        !           486: 
        !           487: @itemize @bullet
        !           488: @item 
        !           489: correct values for certain variables;
        !           490: 
        !           491: @item 
        !           492: which type of host you wish to configure a given package for
        !           493: (@pxref{Host, , Host});
        !           494: 
        !           495: @item 
        !           496: where you want to install this package (by using @samp{prefix},
        !           497: @samp{exec-prefix} and @samp{program-prefix}; @pxref{Install details, ,
        !           498: Full descriptions of all installation directories});
        !           499: 
        !           500: @item 
        !           501: optionally, which type of machine you wish to @dfn{target} this
        !           502: package's output to (@pxref{Target, , Target});
        !           503: 
        !           504: @item 
        !           505: which other @sc{gnu} packages are already installed and available to
        !           506: this particular build (by using the @samp{--with-@var{package}} option;
        !           507: @pxref{Invoking configure, , Invoking @code{configure}});
        !           508: 
        !           509: @item 
        !           510: where to place temporary files (by using the @samp{--tmpdir=@var{dir}}
        !           511: option; @pxref{Invoking configure, , Invoking @code{configure}});
        !           512: 
        !           513: @item whether to recur in subdirectories (changeable through the
        !           514: @w{@samp{--norecursion}} option; @pxref{Invoking configure, , Invoking
        !           515: @code{configure}}).
        !           516: @end itemize
        !           517: 
        !           518: @code{configure} uses a few other files to complete its tasks.  These are
        !           519: discussed in detail where noted.
        !           520: 
        !           521: @table @code
        !           522: @cindex Other files
        !           523: @item configure.in
        !           524: @cindex @code{configure.in} definition
        !           525: Input file for @code{configure}.  Shell script fragments reside here.
        !           526: @xref{configure.in, , The @code{configure.in} input file}.
        !           527: 
        !           528: @item Makefile.in
        !           529: @cindex @code{Makefile.in} definition
        !           530: Template which @code{configure} uses to build a file called @file{Makefile} in
        !           531: the @dfn{build directory}.  @xref{Makefile generation, , @code{Makefile}
        !           532: generation}.
        !           533: 
        !           534: @item config.sub
        !           535: @cindex @code{config.sub} definition
        !           536: Shell script used by @code{configure} to expand referents to the
        !           537: @var{hosttype} argument into a single specification of the form
        !           538: @w{@var{cpu-vendor-os}}.  For instance, on the command line you can
        !           539: specify
        !           540: 
        !           541: @cindex Example session
        !           542: @example
        !           543: eg$ ./configure sun4
        !           544: @end example
        !           545: 
        !           546: @noindent
        !           547: to configure for a Sun SPARCstation running SunOS 4.x.  @code{configure}
        !           548: consults @code{config.sub} to find that the three-part specification for this
        !           549: is
        !           550: 
        !           551: @example
        !           552: sparc-sun-sunos4.1.1
        !           553: @end example
        !           554: 
        !           555: @noindent
        !           556: which notes the @var{cpu} as @samp{sparc}, the @var{manufacturer} as @samp{sun}
        !           557: (Sun Microsystems), and the @var{os} (operating system) as @samp{sunos4.1.1},
        !           558: the SunOS 4.1.1 release.  @xref{configure variables, , Variables available to @code{configure}}.
        !           559: 
        !           560: @item config.guess
        !           561: @cindex @code{config.guess} definition
        !           562: If you do not put the @var{hosttype} argument on the command line,
        !           563: @code{configure} uses the @code{config.guess} shell script to make an
        !           564: analysis of your machine (it assumes that you wish to configure your
        !           565: software for the type of machine on which you are running).  The output
        !           566: of @code{config.guess} is a three-part identifier as described above.
        !           567: 
        !           568: @item config.status
        !           569: @cindex @code{config.status} definition
        !           570: The final step in configuring a directory is to create a shell script,
        !           571: @code{config.status}.  The main purpose of this file is to allow the
        !           572: @file{Makefile} for the current directory to rebuild itself, if
        !           573: necessary.  @xref{config.status, , @code{config.status}}.
        !           574: 
        !           575: @item config/*
        !           576: @cindex @code{config/} subdirectory
        !           577: @code{configure} uses three types of @file{Makefile} @dfn{fragments}, which
        !           578: reside in the directory @file{@var{srcdir}/config/}.  @xref{Makefile fragments,
        !           579: , Adding information about local conventions}.
        !           580: @end table
        !           581: 
        !           582: @menu
        !           583: * Build variables::         Variable-spaghetti made simple 
        !           584: * Build directories::       Build directories described well
        !           585: * Makefile generation::     To build a Makefile
        !           586: * config.guess::            Be vewwy quiet, I'm hunting system information
        !           587: * config.status::           To rebuild a Makefile
        !           588: @end menu
        !           589: 
        !           590: @c ---------------------------------------------------------------------
        !           591: @node Build variables
        !           592: @subsection Build variables
        !           593: @cindex Build variables
        !           594: @cindex Cygnus Support Developer's Kit
        !           595: @cindex Variables
        !           596: 
        !           597: There are several variables in the build process which you can control through
        !           598: build programs such as @code{make}.  These include machine definitions, local
        !           599: conventions, installation locations, locations for temporary files, etc.  This
        !           600: data is accessible through certain variables which are configurable in the
        !           601: build process; we refer to them as @dfn{build variables}.
        !           602: 
        !           603: For lists of build variables which you can affect by using @code{configure},
        !           604: see @ref{configure variables, , Variables available to @code{configure.in}},
        !           605: and @ref{Install details, , Full descriptions of all installation directories}.
        !           606: 
        !           607: Generally, build variables, which are used by the @file{Makefile} to
        !           608: determine various aspects of the build and installation processes, are
        !           609: changeable with command-line options to @code{configure}.  In most large
        !           610: suites of programs, like the Cygnus Support Developer's Kit, the
        !           611: individual programs reside in several subdirectories of a single source
        !           612: code ``tree''.  All of these subdirectories need to be configured with
        !           613: information relative to the @dfn{build directory}, which is not known
        !           614: until @code{configure} is run.  Unless specified otherwise,
        !           615: @code{configure} recursively configures every subdirectory in the source
        !           616: tree.
        !           617: 
        !           618: Build variables are passed from @code{configure} directly into the
        !           619: @file{Makefile}, and use the same names (except that dashes are
        !           620: transformed into underbars; for example, when you specify the option
        !           621: @samp{--exec-prefix} on the command line, the @file{Makefile} variable
        !           622: @samp{exec_prefix} is set).  In other words, if you specify
        !           623: 
        !           624: @cindex Example session
        !           625: @example
        !           626: eg$ ./configure --prefix=/usr/gnu/local @dots{} @var{hosttype}
        !           627: @end example
        !           628: 
        !           629: @noindent
        !           630: on the command line, @code{configure} sets an variable called @samp{prefix} to
        !           631: @samp{/usr/gnu/local}, and passes this into the @file{Makefile} in the same
        !           632: manner.  After this command, each @file{Makefile} generated by @code{configure}
        !           633: will contain a line that reads:
        !           634: 
        !           635: @example
        !           636: prefix = /usr/gnu/local
        !           637: @end example
        !           638: 
        !           639: For a list of the @file{Makefile} variables @code{configure} can change, and
        !           640: instructions on how to change them, see @ref{configure variables, , Variables
        !           641: available to @code{configure.in}}, and @ref{Invoking configure, , Invoking
        !           642: @code{configure}}.
        !           643: 
        !           644: @c ---------------------------------------------------------------------
        !           645: @node Build directories
        !           646: @subsection Build directories
        !           647: @cindex Build directories
        !           648: @cindex Object directories
        !           649: @cindex Building for multiple hosts
        !           650: @cindex Building for multiple targets
        !           651: 
        !           652: By default, @code{configure} builds a @file{Makefile} and symbolic links in the
        !           653: same directory as the source files.  This default works for many cases, but it
        !           654: has limitations.  For instance, using this approach, you can only build object
        !           655: code for one host at a time.
        !           656: 
        !           657: We refer to each directory where @code{configure} builds a @file{Makefile} as
        !           658: a @dfn{build directory}.
        !           659: 
        !           660: The build directory for any given build is always the directory from which you
        !           661: call @code{configure}, or @file{.} relative to your prompt.  The default
        !           662: @dfn{source directory}, the place @code{configure} looks to find source code,
        !           663: is also @file{.}.  For instance, if we have a directory @file{/gnu-stuff/src/}
        !           664: that is the top branch of a tree of @sc{gnu} source code we wish to configure,
        !           665: then the program we will use to configure this code is
        !           666: @file{/gnu-stuff/src/configure}, as follows.  (Assume for the sake of argument
        !           667: that our machine is a sun4.)
        !           668: 
        !           669: @cindex Example session
        !           670: @smallexample
        !           671: @group
        !           672: eg$ cd /gnu-stuff/src
        !           673: eg$ ./configure sun4
        !           674: Created "Makefile" in /gnu-stuff/src
        !           675: eg$
        !           676: @end group
        !           677: @end smallexample
        !           678: 
        !           679: We just configured the code in @file{/gnu-stuff/src} to run on a Sun
        !           680: SPARCstation using SunOS 4.x by creating a @file{Makefile} in
        !           681: @file{/gnu-stuff/src}.  By default, we also specified that when this code is
        !           682: built, the object code should reside in the same directory,
        !           683: @file{/gnu-stuff/src}.
        !           684: 
        !           685: However, if we wanted to build this code for more than one host, we would be in
        !           686: trouble, because the new configuration would write over the old one, destroying
        !           687: it in the process.  What we can do is to make a new @dfn{build directory} and
        !           688: configure from there.  Running @code{configure} from the new directory will
        !           689: place a correct @file{Makefile} and a @file{config.status} in this new file.
        !           690: That is all @code{configure} does; we must run @code{make} to generate any
        !           691: object code.  
        !           692: 
        !           693: The new @file{Makefile} in @file{/gnu-stuff/sun4-obj}, created from the
        !           694: template file @file{/gnu-stuff/src/Makefile.in}, contains all the information
        !           695: needed to build the program.
        !           696: 
        !           697: @cindex Example session
        !           698: @smallexample
        !           699: @group
        !           700: eg$ mkdir /gnu-stuff/sun4-obj
        !           701: eg$ cd /gnu-stuff/sun4-obj
        !           702: eg$ ../src/configure --srcdir=../src sun4
        !           703: Created "Makefile" in /gnu-stuff/sun4-obj
        !           704: eg$ ls
        !           705: Makefile       config.status
        !           706: eg$ make all info install install-info clean
        !           707: @var{compilation messages@dots{}}
        !           708: eg$ mkdir /gnu-stuff/solaris2
        !           709: eg$ cd /gnu-stuff/solaris2
        !           710: eg$ ../src/configure --srcdir=../src sol2
        !           711: Created "Makefile" in /gnu-stuff/solaris2
        !           712: eg$ ls
        !           713: Makefile       config.status
        !           714: eg$ make all info install install-info clean
        !           715: @var{compilation messages@dots{}}
        !           716: @end group
        !           717: @end smallexample
        !           718: 
        !           719: We can repeat this for other configurations of the same software simply
        !           720: by making a new build directory and reconfiguring from inside it.  If
        !           721: you do not specify the @var{hosttype} argument, @code{configure}
        !           722: will attempt to figure out what kind of machine and operating system you
        !           723: happen to be using.  @xref{config.guess, , Determining system
        !           724: information}.  Of course, this may not always be the configuration you
        !           725: wish to build.
        !           726: 
        !           727: @emph{Caution:} If you build more than one configuration for a single program,
        !           728: remember that you must also specify a different @samp{--prefix} for each
        !           729: configuration at configure-time.  Otherwise, both configurations will be
        !           730: installed in the same default location (@file{/usr/local}); the configuration
        !           731: to be installed last would overwrite previously installed configurations.
        !           732: 
        !           733: @c ---------------------------------------------------------------------
        !           734: @node Makefile generation
        !           735: @subsection @code{Makefile} generation
        !           736: @cindex @code{Makefile} generation
        !           737: 
        !           738: Cygnus @code{configure} creates a file called @file{Makefile} in the build
        !           739: directory which can be used with @code{make} to automatically build a given
        !           740: program or package.  @code{configure} also builds a @file{Makefile} for each
        !           741: relevant subdirectory for a given program or package (irrelevant subdirectories
        !           742: would be those which contain no code which needs configuring, and which
        !           743: therefore have no @code{configure} input file @file{configure.in} and no
        !           744: @file{Makefile} template @file{Makefile.in}).  @xref{Running, @code{make}
        !           745: Invocation, How to Run @code{make}, make, GNU Make}, for details on using
        !           746: @code{make} to compile your source code.
        !           747: 
        !           748: Each @file{Makefile} contains variables which have been configured for a
        !           749: specific build.  These build variables are determined when @code{configure} is
        !           750: run.  All build variables have defaults.  By default, @code{configure}
        !           751: generates a @file{Makefile} which specifies: 
        !           752: 
        !           753: @cindex Default configuration
        !           754: @itemize @bullet
        !           755: @item a @dfn{native} build, which is to occur 
        !           756: 
        !           757: @item in the current directory, and which will be installed 
        !           758: 
        !           759: @item in the default installation directory (@file{/usr/local}) when the code
        !           760: is compiled with @code{make}.  
        !           761: @end itemize
        !           762: 
        !           763: @noindent
        !           764: Variables are changeable through command-line options to @code{configure}
        !           765: (@pxref{Invoking configure, , Invoking @code{configure}}).
        !           766: 
        !           767: If you are porting a new program and intend to use @code{configure}, see
        !           768: @ref{Porting, , Porting with @code{configure}}, as well as @ref{Makefiles, ,
        !           769: Writing Makefiles, make, GNU Make}, and @ref{Makefiles, , Makefile Conventions,
        !           770: standards, GNU Coding Standards}.
        !           771: 
        !           772: @c ---------------------------------------------------------------------
        !           773: @node config.guess
        !           774: @subsection Determining system information
        !           775: @cindex @code{config.guess}
        !           776: 
        !           777: The shell script @code{config.guess} is called when you do not specify a
        !           778: @var{hosttype} on the command line to @code{configure}.  @code{config.guess}
        !           779: acquires available system information from your local machine through the shell
        !           780: command @code{uname}.  It compares this information to a database and attempts
        !           781: to determine a usable three-part system identifier (known as a @dfn{triple}) to
        !           782: use as your @var{hosttype}.  @xref{What configure really does, , What
        !           783: @code{configure} really does}, to see how this information is used.
        !           784: 
        !           785: @emph{Note:}  If you do not specify a @var{hosttype} on the command line,
        !           786: @code{configure} will attempt to configure your software to run on the machine
        !           787: you happen to be using.  This may not be the configuration you desire.
        !           788: 
        !           789: @c ---------------------------------------------------------------------
        !           790: @node config.status
        !           791: @subsection @code{config.status}
        !           792: @cindex @code{config.status}
        !           793: 
        !           794: The final step in configuring a directory is to create an executable shell
        !           795: script, @file{config.status}.  The main purpose of this file is to allow the
        !           796: @file{Makefile} for the current directory to rebuild itself, if necessary.  It
        !           797: is usually run from within the @file{Makefile}.  @xref{Makefile extensions, ,
        !           798: Extensions to the @sc{gnu} coding standards}.
        !           799: 
        !           800: @file{config.status} also contains a record of the @code{configure} session
        !           801: which created it.  
        !           802: 
        !           803: @c ---------------------------------------------------------------------
        !           804: @node configure.in
        !           805: @section The @code{configure.in} input file
        !           806: @cindex @code{configure.in}
        !           807: 
        !           808: A @file{configure.in} file for Cygnus @code{configure} consists of a
        !           809: @dfn{per-invocation} section, followed by a @dfn{per-host} section, followed by
        !           810: a @dfn{per-target} section, optionally followed by a @dfn{post-target} section.
        !           811: Each section is a shell script fragment, which is executed by the
        !           812: @code{configure} shell script at an appropriate time.  Values are passed among
        !           813: @code{configure} and the shell fragments through a set of shell variables.
        !           814: When each section is being interpreted by the shell, the shell's current
        !           815: directory is the build directory, and any files created by the section (or
        !           816: referred to by the section) will be relative to the build directory.  To
        !           817: reference files in other places (such as the source directory), prepend a shell
        !           818: variable such as @samp{$(srcdir)/} to the desired file name.
        !           819: 
        !           820: @cindex @i{per-invocation} section
        !           821: The beginning of the @file{configure.in} file begins the @dfn{per-invocation}
        !           822: section.
        !           823: 
        !           824: @cindex @i{per-host} section
        !           825: A line beginning with @samp{# per-host:} begins the @dfn{per-host} section.
        !           826: 
        !           827: @cindex @i{per-target} section
        !           828: A line beginning with @samp{# per-target:} begins the @dfn{per-target} section.
        !           829: 
        !           830: @cindex @i{post-target} section
        !           831: If it exists, the @dfn{post-target} section begins with @samp{# post-target:}.
        !           832: 
        !           833: @menu
        !           834: * configure variables::    Variables available to configure.in
        !           835: * Minimal::                A minimal configure.in
        !           836: * Declarations::           For each invocation
        !           837: * per-host::               Host-specific instructions
        !           838: * per-target::             Target-specific instructions
        !           839: * post-target::            Instructions to be executed after target info
        !           840: * Example::                An example configure.in
        !           841: @end menu
        !           842: 
        !           843: @c ---------------------------------------------------------------------
        !           844: @node configure variables
        !           845: @subsection Variables available to @code{configure.in}
        !           846: @cindex @file{configure.in} interface
        !           847: @cindex configure variables
        !           848: 
        !           849: The following variables pass information between the standard parts of
        !           850: @code{configure} and the shell-script fragments in @file{configure.in}:
        !           851: 
        !           852: @table @code
        !           853: @item srctrigger
        !           854: @cindex @code{srctrigger}
        !           855: @vindex srctrigger
        !           856: Contains the name of a source file that is expected to live in the source
        !           857: directory.  You must usually set this in the @dfn{per-invocation} section of
        !           858: @file{configure.in}.  @code{configure} tests to see that this file exists.  If
        !           859: the file does not exist, @code{configure} prints an error message.  This is
        !           860: used as a sanity check that @file{configure.in} matches the source directory.
        !           861: 
        !           862: @item srcname
        !           863: @cindex @code{srcname}
        !           864: @vindex srcname
        !           865: Contains the name of the source collection contained in the source directory.
        !           866: You must usually set this in the @dfn{per-invocation} section of
        !           867: @file{configure.in}.  If the file named in @samp{srctrigger} does not exist,
        !           868: @code{configure} uses the value of @samp{srcname} when it prints the error
        !           869: message.
        !           870: 
        !           871: @item configdirs
        !           872: @cindex @code{configdirs}
        !           873: @vindex configdirs
        !           874: Contains the names of any subdirectories in which @code{configure} should
        !           875: recurse.  You must usually set this in the @dfn{per-invocation} section of
        !           876: @file{configure.in}.
        !           877: If @file{Makefile.in} contains a line starting with @samp{SUBDIRS =},
        !           878: then it will be replaced with an assignment to @samp{SUBDIRS} using
        !           879: the value of @samp{configdirs} (if @samp{subdirs} is empty).  This can
        !           880: be used to determine which directories to configure and build depending
        !           881: on the host and target configurations.
        !           882: @c Most other matching makefile/config vars use the same name.  Why not
        !           883: @c this? (FIXME).
        !           884: @c Can we get rid of SUBDIRS-substitution?  It doesn't work well with subdirs.
        !           885: Use @samp{configdirs} (instead of the @samp{subdirs} variable
        !           886: described below) if you want to be able to partition the
        !           887: subdirectories, or use independent @file{Makefile} fragments.
        !           888: Each subdirectory can be independent, and independently reconfigured.
        !           889: 
        !           890: @item subdirs
        !           891: @cindex @code{subdirs}
        !           892: @vindex subdirs
        !           893: Contains the names of any subdirectories where @code{configure} should create a
        !           894: @file{Makefile} (in addition to the current directory), @emph{without}
        !           895: recursively running @code{configure}.  Use @samp{subdirs} (instead of the
        !           896: @samp{configdirs} variable described above) if you want to configure all of the
        !           897: directories as a unit.  Since there is a single invocation of @code{configure}
        !           898: that configures many directories, all the directories can use the same
        !           899: @file{Makefile} fragments, and the same @code{configure.in}.
        !           900: 
        !           901: @item host
        !           902: @cindex @code{host}
        !           903: @cindex Canonical ``triple''
        !           904: @vindex host
        !           905: Contains the full configuration name for the host (generated by the script
        !           906: @file{config.sub} from the name that you entered).  This is a three-part
        !           907: name (commonly referred to as a @dfn{triple}) of the form
        !           908: @var{cpu}-@var{vendor}-@var{os}.
        !           909: 
        !           910: There are separate variables @samp{host_cpu}, @samp{host_vendor}, and
        !           911: @samp{host_os} that you can use to test each of the three parts; this variable
        !           912: is useful, however, for error messages, and for testing combinations of the
        !           913: three components.
        !           914: 
        !           915: @item host_cpu
        !           916: @vindex host_cpu
        !           917: Contains the first element of the canonical triple representing the host
        !           918: as returned by @file{config.sub}.  This is occasionally used to
        !           919: distinguish between minor variations of a particular vendor's operating
        !           920: system and sometimes to determine variations in binary format between
        !           921: the host and the target.
        !           922: 
        !           923: @item host_vendor
        !           924: @vindex host_vendor
        !           925: Contains the second element of the canonical triple representing the host as
        !           926: returned by @file{config.sub}.  This is usually used to distinguish among the
        !           927: numerous variations of @emph{common} operating systems.
        !           928: @c "@emph{common} OS" doesn't convey much to me.  Is this meant to cover 
        !           929: @c cases like Unix, widespread but with many variations?
        !           930: 
        !           931: @item host_os
        !           932: @vindex host_os
        !           933: Contains the the third element of the canonical triple representing the
        !           934: host as returned by @file{config.sub}.
        !           935: 
        !           936: @item target
        !           937: @cindex @code{target}
        !           938: @cindex Canonical ``triple''
        !           939: @vindex target
        !           940: Contains the full configuration name (generated by the script @file{config.sub}
        !           941: from the name that you entered) for the target.  Like the host, this is a
        !           942: three-part name of the form @var{cpu}-@var{vendor}-@var{os}.
        !           943: 
        !           944: There are separate variables @samp{target_cpu}, @samp{target_vendor}, and
        !           945: @samp{target_os} that you can use to test each of the three parts; this
        !           946: variable is useful, however, for error messages, and for testing combinations
        !           947: of the three components.
        !           948: 
        !           949: @item target_cpu
        !           950: @vindex target_cpu
        !           951: Contains the first element of the canonical triple representing the target as
        !           952: returned by @file{config.sub}.  This variable is used heavily by programs which
        !           953: are involved in building other programs, like the compiler, assembler, linker,
        !           954: etc.  Most programs will not need the @samp{target} variables at all, but this
        !           955: one could conceivably be used to build a program, for instance, that operated
        !           956: on binary data files whose byte order or alignment differ from the system where
        !           957: the program is running.
        !           958: 
        !           959: @item target_vendor
        !           960: @vindex target_vendor
        !           961: Contains the second element of the canonical triple representing the target as
        !           962: returned by @file{config.sub}.  This is usually used to distinguish among the
        !           963: numerous variations of @emph{common} operating systems or object file
        !           964: formats.  It is sometimes used to switch between different flavors of user
        !           965: interfaces.
        !           966: @c above query re "@emph{common} OS" applies here too
        !           967: 
        !           968: @item target_os
        !           969: @vindex target_os
        !           970: Contains the the third element of the canonical triple representing the
        !           971: target as returned by @file{config.sub}.  This variable is used by
        !           972: development tools to distinguish between subtle variations in object
        !           973: file formats that some vendors use across operating system releases.  It
        !           974: might also be use to decide which libraries to build or what user
        !           975: interface the tool should provide.
        !           976: 
        !           977: @item floating_point
        !           978: @cindex @code{floating_point}
        !           979: @cindex @code{nfp} option
        !           980: @vindex floating_point
        !           981: Set to @samp{no} if you invoked @code{configure} with the @samp{--nfp}
        !           982: command-line option, otherwise it is empty.  This is a request to target
        !           983: machines with @dfn{no floating point} unit, even if the targets ordinarily have
        !           984: floating point units available.
        !           985: 
        !           986: @item gas
        !           987: @cindex @code{with-gnu-as} option
        !           988: @vindex gas
        !           989: Set to @samp{true} if you invoked @code{configure} with the
        !           990: @w{@samp{--with-gnu-as}} command line option, otherwise it is empty.  This is a
        !           991: request to assume that the specified @var{hosttype} machine has @sc{gnu} @code{as}
        !           992: available even if it ordinarily does not.
        !           993: 
        !           994: @item srcdir
        !           995: @cindex @code{srcdir}
        !           996: @vindex srcdir
        !           997: Set to the name of the directory containing the source for this program.
        !           998: This will be different from @file{.} if you have specified the
        !           999: @samp{--srcdir=@var{dir}} option.  @samp{srcdir} can indicate either an
        !          1000: absolute path or a path relative to the build directory.
        !          1001: 
        !          1002: @item package_makefile_frag
        !          1003: @vindex package_makefile_frag
        !          1004: If set in @file{configure.in}, this variable should be the name a file relative
        !          1005: to @samp{srcdir} to be included in the resulting @file{Makefile}.  If the named
        !          1006: file does not exist, @code{configure} will print a warning message.  This
        !          1007: variable is not set by @code{configure}.
        !          1008: 
        !          1009: @item host_makefile_frag
        !          1010: @vindex host_makefile_frag
        !          1011: If set in @file{configure.in}, this variable should be the name a file relative
        !          1012: to @samp{srcdir} to be included in the resulting @file{Makefile}.  If the named
        !          1013: file does not exist, @code{configure} will print a warning message.  This
        !          1014: variable is not set by @code{configure}.
        !          1015: 
        !          1016: @item target_makefile_frag
        !          1017: @vindex target_makefile_frag
        !          1018: If set in @file{configure.in}, this variable should be the name of a file,
        !          1019: relative to @samp{srcdir}, to be included in the resulting @file{Makefile}.  If
        !          1020: the named file does not exist, @code{configure} will print a warning message.
        !          1021: This variable is not set by @code{configure}.
        !          1022: 
        !          1023: @item site_makefile_frag
        !          1024: @vindex site_makefile_frag
        !          1025: Set to a file name representing to the default @file{Makefile} fragment for
        !          1026: this host.  It may be set in @file{configure.in} to override this default.
        !          1027: Normally @samp{site_makefile_frag} is empty, but will have a value if you
        !          1028: specify @samp{--site=@var{site}} on the command line.
        !          1029: @ignore -- this doesn't fit
        !          1030: It is probably not a good idea to override this variable from
        !          1031: @file{configure.in}, since that may defeat the @code{configure} user's
        !          1032: intentions.
        !          1033: @end ignore
        !          1034: 
        !          1035: @item Makefile
        !          1036: @vindex Makefile
        !          1037: Set to the name of the generated @file{Makefile}.  Normally this value is
        !          1038: precisely @file{Makefile}, but some programs may want something else.
        !          1039: 
        !          1040: @item removing
        !          1041: @cindex @code{rm} option
        !          1042: @vindex removing
        !          1043: Normally empty but will be set to some non-null value if you specified
        !          1044: @samp{--rm} on the command line.  That is, if @samp{removing} is not empty,
        !          1045: then @code{configure} is @emph{removing} a configuration rather than creating
        !          1046: one.
        !          1047: 
        !          1048: @item files
        !          1049: @cindex Symbolic links
        !          1050: @vindex files
        !          1051: If this variable is not empty following the @dfn{per-target} section,
        !          1052: then each word in its value will be the target of a symbolic link named
        !          1053: in the corresponding word from the @samp{links} variable.
        !          1054: 
        !          1055: @item links
        !          1056: @cindex Symbolic links
        !          1057: @vindex links
        !          1058: If the @samp{files} variable is not empty following the @dfn{per-target}
        !          1059: section, then @code{configure} creates symbolic links with the first word of
        !          1060: @samp{links} pointing to the first word of @samp{files}, the second word of
        !          1061: @samp{links} pointing to the second word of @samp{files}, and so on.
        !          1062: @end table
        !          1063: 
        !          1064: @c ---------------------------------------------------------------------
        !          1065: @node Minimal
        !          1066: @subsection A minimal @code{configure.in}
        !          1067: @cindex Minimal @file{configure.in} example
        !          1068: 
        !          1069: A minimal @file{configure.in} consists of four lines.
        !          1070: 
        !          1071: @example
        !          1072: srctrigger=foo.c
        !          1073: srcname="source for the foo program"
        !          1074: # per-host:
        !          1075: # per-target:
        !          1076: @end example
        !          1077: 
        !          1078: The @samp{# per-host:} and @samp{# per-target:} lines divide the file into the
        !          1079: three required sections.  The @samp{srctrigger} line names a file.
        !          1080: @code{configure} checks to see that this file exists in the source directory
        !          1081: before configuring.  If the @samp{srctrigger} file does not exist,
        !          1082: @code{configure} uses the value of @samp{srcname} to print an error message
        !          1083: about not finding the source.
        !          1084: 
        !          1085: This particular example uses no links, and only the default host,
        !          1086: target, and site-specific @file{Makefile} fragments if they exist.
        !          1087: 
        !          1088: @c ---------------------------------------------------------------------
        !          1089: @node Declarations
        !          1090: @subsection For each invocation
        !          1091: @cindex For each invocation
        !          1092: @cindex Declarations section
        !          1093: @cindex @i{per-invocation} section
        !          1094: 
        !          1095: @code{configure} invokes the entire shell script fragment from the start of
        !          1096: @file{configure.in} up to a line beginning with @w{@samp{# per-host:}}
        !          1097: immediately after parsing command line arguments.  The variables
        !          1098: @samp{srctrigger} and @samp{srcname} @emph{must} be set here.
        !          1099: 
        !          1100: You might also want to set the variables @samp{configdirs} and
        !          1101: @samp{package_makefile_frag} here.
        !          1102: 
        !          1103: @c ---------------------------------------------------------------------
        !          1104: @node per-host
        !          1105: @subsection Host-specific instructions
        !          1106: @cindex Host-specific instructions
        !          1107: @cindex @i{host} shell-script fragment
        !          1108: @cindex @i{per-host} section
        !          1109: 
        !          1110: The @dfn{per-host} section of @file{configure.in} starts with the line that
        !          1111: begins with @w{@samp{# per-host:}} and ends before a line beginning with
        !          1112: @w{@samp{# per-target:}}.  @code{configure} invokes the commands in the
        !          1113: @dfn{per-host} section when determining host-specific information.
        !          1114: 
        !          1115: This section usually contains a big @code{case} statement using the variable
        !          1116: @samp{host} to determine appropriate values for @samp{host_makefile_frag} and
        !          1117: @samp{files}, although @samp{files} is not usually set here.  Usually, it is
        !          1118: set at the end of the @dfn{per-target} section after determining the names of
        !          1119: the target specific configuration files.
        !          1120: 
        !          1121: @c ---------------------------------------------------------------------
        !          1122: @node per-target
        !          1123: @subsection Target-specific instructions
        !          1124: @cindex Target-specific instructions
        !          1125: @cindex target shell-script fragment
        !          1126: @cindex @i{per-target} section
        !          1127: 
        !          1128: The @dfn{per-target} section of @file{configure.in} starts with the line that
        !          1129: begins with @w{@samp{# per-target:}} and ends before the line that begins with
        !          1130: @w{@samp{# post-target:}}, if there is such a line.  Otherwise the
        !          1131: @dfn{per-target} section extends to the end of the file.  @code{configure}
        !          1132: invokes the commands in the @dfn{per-target} section when determining
        !          1133: target-specific information, and before building any files, directories, or
        !          1134: links.
        !          1135: 
        !          1136: This section usually contains a big @code{case} statement using the variable
        !          1137: @samp{target} to determine appropriate values for @samp{target_makefile_frag}
        !          1138: and @samp{files}.  The last lines in the @dfn{per-target} section normally set
        !          1139: the variables @samp{files} and @samp{links}.
        !          1140: 
        !          1141: @c ---------------------------------------------------------------------
        !          1142: @node post-target
        !          1143: @subsection Instructions to be executed after target info
        !          1144: @cindex Post-target shell-script fragment
        !          1145: @cindex @i{post-target} section
        !          1146: 
        !          1147: The @dfn{post-target} section is optional.  If it exists, the
        !          1148: @samp{post-target} section starts with a line beginning with @w{@samp{#
        !          1149: Post-target:}} and extends to the end of the file.  If it exists,
        !          1150: @code{configure} invokes this section once for each target after
        !          1151: building all files, directories, or links.
        !          1152: 
        !          1153: This section is seldom needed, but you can use it to edit the @file{Makefile}
        !          1154: generated by @code{configure}.
        !          1155: 
        !          1156: @c ---------------------------------------------------------------------
        !          1157: @node Example
        !          1158: @subsection An example @code{configure.in}
        !          1159: @cindex Example @file{configure.in}
        !          1160: @cindex Sample @file{configure.in}
        !          1161: @c @cindex @code{bison} @file{configure.in}
        !          1162: @c this won't be the bison configure.in for long.. need better example
        !          1163: 
        !          1164: Here is a small example of a @file{configure.in} file.
        !          1165: 
        !          1166: @cartouche
        !          1167: @example
        !          1168: @group
        !          1169: # This file is a collection of shell script fragments
        !          1170: # used to tailor a template configure script as
        !          1171: # appropriate for this directory.  For more information,
        !          1172: # see configure.texi.
        !          1173: 
        !          1174: configdirs=
        !          1175: srctrigger=warshall.c
        !          1176: srcname="bison"
        !          1177: 
        !          1178: # per-host:
        !          1179: case "$@{host@}" in
        !          1180: m88k-motorola-*)
        !          1181:         host_makefile_frag=config/mh-delta88
        !          1182:         ;;
        !          1183: esac
        !          1184: 
        !          1185: # per-target:
        !          1186: files="bison_in.hairy"
        !          1187: links="bison.hairy"
        !          1188: 
        !          1189: # post-target:
        !          1190: @end group
        !          1191: @end example
        !          1192: @end cartouche
        !          1193: 
        !          1194: @c ---------------------------------------------------------------------
        !          1195: @node Install locations
        !          1196: @section Install locations
        !          1197: @cindex Where to install
        !          1198: @cindex Install locations
        !          1199: 
        !          1200: Using the default configuration, @samp{make install} creates a single tree of
        !          1201: files, some of which are programs.  The location of this tree is determined by
        !          1202: the value of the variable @samp{prefix}.  The default value of @samp{prefix} is
        !          1203: @samp{/usr/local}.  This is often correct for native tools installed on only
        !          1204: one host.
        !          1205: 
        !          1206: @menu
        !          1207: * prefix::            Changing the default install directory
        !          1208: * exec_prefix::       How to separate host independent files
        !          1209:                                          from host dependent files when
        !          1210:                                          installing for multiple hosts
        !          1211: * Install details::   Full descriptions of all installation subdirectories
        !          1212: @end menu
        !          1213: 
        !          1214: @c ---------------------------------------------------------------------
        !          1215: @node prefix
        !          1216: @subsection Changing the default install directory
        !          1217: @cindex Changing the install directory
        !          1218: @cindex @code{prefix} option
        !          1219: @vindex prefix
        !          1220: 
        !          1221: In the default configuration, all files are installed in subdirectories
        !          1222: of @file{/usr/local}.  The location is determined by the value of
        !          1223: the @code{configure} variable @samp{prefix}; in turn, this determines the
        !          1224: value of the @file{Makefile} variable of the same name (@samp{prefix}).
        !          1225: 
        !          1226: You can also set the value of the @file{Makefile} variable @samp{prefix}
        !          1227: explicitly each time you invoke @code{make} if you are so inclined.  However,
        !          1228: because many programs have this location compiled in, you must specify the
        !          1229: @samp{prefix} value consistently on each invocation of @code{make}, or you will
        !          1230: end up with a broken installation.
        !          1231: 
        !          1232: To make this easier, the value of the @code{configure} variable
        !          1233: @samp{prefix} can be set on the command line to @code{configure}
        !          1234: using the option @samp{--prefix=}.  
        !          1235: 
        !          1236: @c ---------------------------------------------------------------------
        !          1237: @node exec_prefix
        !          1238: @subsection Installing for multiple hosts
        !          1239: @cindex Configuring for multiple hosts
        !          1240: @cindex Sharing host-independent files
        !          1241: @cindex Installing host-independent files
        !          1242: @cindex The @code{exec_prefix} directory
        !          1243: @vindex exec_prefix
        !          1244: 
        !          1245: By default, host dependent files are installed in subdirectories of
        !          1246: @file{$(exec_prefix)}.  The location is determined by the value of the
        !          1247: @code{configure} variable @samp{exec_prefix}, which determines the value of the
        !          1248: @file{Makefile} variable @samp{exec_prefix}.  This makes it easier to install
        !          1249: for a single host, and simplifies changing the default location for the install
        !          1250: tree.  The default doesn't allow for multiple hosts to effectively share
        !          1251: host independent files, however.
        !          1252: 
        !          1253: To configure so that multiple hosts can share common files, use something like:
        !          1254: 
        !          1255: @cindex Example session
        !          1256: @smallexample
        !          1257: configure @var{host1} -prefix=/usr/gnu -exec_prefix=/usr/gnu/H-host1
        !          1258: make all info install install-info clean
        !          1259: 
        !          1260: configure @var{host2} -prefix=/usr/gnu -exec_prefix=/usr/gnu/H-host2
        !          1261: make all info install install-info
        !          1262: @end smallexample
        !          1263: 
        !          1264: The first line configures the source for @var{host1} to place host-specific
        !          1265: programs in subdirectories of @file{/usr/gnu/H-@var{host1}}.
        !          1266: 
        !          1267: The second line builds and installs all programs for @var{host1},
        !          1268: including both host-independent and host-specific files, as well as removing
        !          1269: the host-specific object files from of the build directory.
        !          1270: 
        !          1271: The third line reconfigures the source for @var{host2} to place host
        !          1272: specific programs in subdirectories of @file{/usr/gnu/H-@var{host2}}.
        !          1273: 
        !          1274: The fourth line builds and installs all programs for @var{host2}.  Host
        !          1275: specific files are installed in new directories, but the host
        !          1276: independent files are installed @emph{on top of} the host
        !          1277: independent files installed for @var{host1}.  This results in a single
        !          1278: copy of the host independent files, suitable for use by both hosts.
        !          1279: 
        !          1280: @xref{Makefile extensions, , Extensions to the @sc{gnu} coding standards}, for
        !          1281: more information.
        !          1282: 
        !          1283: @c ---------------------------------------------------------------------
        !          1284: @node Install details
        !          1285: @subsection Full descriptions of all installation subdirectories
        !          1286: @cindex Install details
        !          1287: @cindex Installation subdirectories
        !          1288: @cindex Subdirectories
        !          1289: 
        !          1290: During any install, a number of standard directories are created.  Their names
        !          1291: are determined by @file{Makefile} variables.  Some of the defaults for
        !          1292: @file{Makefile} variables can be changed at configuration time using command
        !          1293: line options to @code{configure}.  For more information on the standard
        !          1294: directories or the @file{Makefile} variables, please refer to @ref{Makefiles, ,
        !          1295: Makefile Conventions, standards, GNU Coding Standards}.  See also @ref{Makefile
        !          1296: extensions, , Extensions to the @sc{gnu} coding standards}.
        !          1297: 
        !          1298: Note that @code{configure} does not create the directory indicated by the
        !          1299: variable @samp{srcdir} at any time.  @code{$(srcdir)} is not an installation
        !          1300: directory.
        !          1301: 
        !          1302: You can override all @file{Makefile} variables on the command line to
        !          1303: @code{make}.  (@xref{Overriding, , Overriding Variables, make, GNU Make}.)  If
        !          1304: you do so, you will need to specify the value precisely the same way for each
        !          1305: invocation of @code{make}, or you risk ending up with a broken installation.
        !          1306: This is because many programs have the locations of other programs or files
        !          1307: compiled into them.  If you find yourself overriding any of the variables
        !          1308: frequently, you should consider site dependent @file{Makefile} fragments.  See
        !          1309: also @ref{Sites, , Adding site info}.
        !          1310: 
        !          1311: During @samp{make install}, a number of standard directories are created and
        !          1312: populated.  The following @file{Makefile} variables define them.  Those whose
        !          1313: defaults are set by corresponding @code{configure} variables are marked
        !          1314: ``@code{Makefile} and @code{configure}''.
        !          1315: 
        !          1316: @table @code
        !          1317: @item prefix (@code{Makefile} and @code{configure})
        !          1318: @cindex @code{prefix}
        !          1319: @vindex prefix
        !          1320: The root of the installation tree.  You can set its @file{Makefile} default
        !          1321: with the @samp{--prefix=} command line option to @code{configure}
        !          1322: (@pxref{Invoking configure, , Invoking @code{configure}}).  The default value
        !          1323: for @samp{prefix} is @samp{/usr/local}.
        !          1324: 
        !          1325: @item bindir
        !          1326: @cindex @code{bindir}
        !          1327: @vindex bindir
        !          1328: A directory for binary programs that users can run.  The default value for
        !          1329: @samp{bindir} depends on @samp{prefix}; @samp{bindir} is normally changed only
        !          1330: indirectly through @samp{prefix}.  The default value for @samp{bindir} is
        !          1331: @samp{$(prefix)/bin}.
        !          1332: 
        !          1333: @item exec_prefix (@code{Makefile} and @code{configure})
        !          1334: @cindex @code{exec_prefix}
        !          1335: @vindex exec_prefix
        !          1336: A directory for host dependent files.  You can specify the @file{Makefile}
        !          1337: default value by using the @samp{--exec_prefix=} option to @code{configure}.
        !          1338: (@xref{Invoking configure, , Invoking @code{configure}}.)  The default value
        !          1339: for @samp{exec_prefix} is @samp{$(prefix)}.
        !          1340: 
        !          1341: @item libdir
        !          1342: @cindex @code{libdir}
        !          1343: @vindex libdir
        !          1344: A directory for libraries and support programs.  The default value for
        !          1345: @samp{libdir} depends on @samp{prefix}; @samp{libdir} is normally changed only
        !          1346: indirectly through @samp{prefix}.  The default value for @samp{libdir} is
        !          1347: @samp{$(prefix)/lib}.
        !          1348: 
        !          1349: @item mandir
        !          1350: @cindex @code{mandir}
        !          1351: @vindex mandir
        !          1352: A directory for @code{man} format documentation (``man pages'').  The default
        !          1353: value for @samp{mandir} depends on @samp{prefix}; @samp{mandir} is normally
        !          1354: changed only indirectly through @samp{prefix}.  The default value for
        !          1355: @samp{mandir} is @samp{$(prefix)/man}.
        !          1356: 
        !          1357: @item man@var{N}dir
        !          1358: @cindex @code{man@var{N}dir}
        !          1359: @vindex man@var{N}dir
        !          1360: These are eight variables named @samp{man1dir}, @samp{man2dir}, etc.  They name
        !          1361: the specific directories for each man page section.  For example,
        !          1362: @samp{man1dir} by default holds the filename @file{$(mandir)/man1}; this
        !          1363: directory contains @file{emacs.1} (the man page for @sc{gnu} Emacs).
        !          1364: Similarly, @samp{man5dir} contains the value @file{$(mandir)/man5}, indicating
        !          1365: the directory which holds @file{rcsfile.5} (the man page describing the
        !          1366: @code{rcs} data file format).  The default value for any of the
        !          1367: @samp{man@var{N}dir} variables depends indirectly on @samp{prefix}, and is
        !          1368: normally changed only through @samp{prefix}.  The default value for
        !          1369: @samp{man@var{N}dir} is @samp{$(mandir)/man@var{N}}.
        !          1370: 
        !          1371: @item man@var{N}ext
        !          1372: @cindex @code{man@var{N}ext}
        !          1373: @vindex man@var{N}ext
        !          1374: @emph{Not supported by Cygnus @code{configure}}.  The @cite{@sc{gnu} Coding
        !          1375: Standards} do not call for @samp{man1ext}, @samp{man2ext}, so the intended use
        !          1376: for @code{manext} is apparently not parallel to @samp{mandir}.  Its use is not
        !          1377: clear.  (See also @ref{Makefile extensions, , Extensions to the @sc{gnu} coding
        !          1378: standards}.)
        !          1379: 
        !          1380: @item infodir
        !          1381: @cindex @code{infodir}
        !          1382: @vindex infodir
        !          1383: A directory for @code{info} format documentation.  The default value for
        !          1384: @samp{infodir} depends indirectly on @samp{prefix}; @samp{infodir} is
        !          1385: normally changed only through @samp{prefix}.  The default value for
        !          1386: @samp{infodir} is @samp{$(prefix)/info}.
        !          1387: 
        !          1388: @item docdir
        !          1389: @cindex @code{docdir}
        !          1390: @vindex docdir
        !          1391: A directory for any documentation that is in a format other than those used by
        !          1392: @code{info} or @code{man}.  The default value for @samp{docdir} depends
        !          1393: indirectly on @samp{prefix}; @samp{docdir} is normally changed only through
        !          1394: @samp{prefix}.  The default value for @samp{docdir} is @samp{$(datadir)/doc}.
        !          1395: @emph{This variable is an extension to the @sc{gnu} coding standards}.  (See
        !          1396: also @ref{Makefile extensions, , Extensions to the @sc{gnu} coding standards}.)
        !          1397: 
        !          1398: @item includedir
        !          1399: @cindex @code{includedir}
        !          1400: @vindex includedir
        !          1401: A directory for the header files accompanying the libraries installed in
        !          1402: @samp{libdir}.  The default value for @samp{includedir} depends on
        !          1403: @samp{prefix}; @samp{includedir} is normally changed only indirectly
        !          1404: through @samp{prefix}.  The default value for @samp{includedir} is
        !          1405: @samp{$(prefix)/include}.
        !          1406: @end table
        !          1407: 
        !          1408: @c ---------------------------------------------------------------------
        !          1409: @node Host
        !          1410: @section Host
        !          1411: @cindex Host
        !          1412: 
        !          1413: The arguments to @code{configure} are @dfn{hosttypes}.  By
        !          1414: @dfn{hosttype} we mean the @dfn{environment} in which the source will be
        !          1415: compiled.  This need not necessarily be the same as the physical machine
        !          1416: involved, although it usually is.
        !          1417: 
        !          1418: For example, if some obscure machine had the @sc{gnu} @code{POSIX} emulation
        !          1419: libraries available, it would be possible to configure most @sc{gnu} source for
        !          1420: a @code{POSIX} system and build it on the obscure host.
        !          1421: 
        !          1422: For more on this topic, see @ref{Host Environments, On Configuring Development
        !          1423: Tools, Host Environments, cfg-paper, On Configuring Development Tools}.
        !          1424: 
        !          1425: @c ---------------------------------------------------------------------
        !          1426: @node Target
        !          1427: @section Target
        !          1428: @cindex Target
        !          1429: 
        !          1430: For building native development tools, or most of the other @sc{gnu}
        !          1431: tools, you need not worry about the target.  The @dfn{target} of a
        !          1432: configuration defaults to the same as the @dfn{host}.
        !          1433: 
        !          1434: For building cross development tools, please see @ref{Building Development
        !          1435: Environments, On Configuring Development Tools, Building Development
        !          1436: Environments, cfg-paper, On Configuring Development Tools}.
        !          1437: 
        !          1438: @c ---------------------------------------------------------------------
        !          1439: @node Makefile fragments
        !          1440: @section Adding information about local conventions
        !          1441: @cindex @code{Makefile} fragments
        !          1442: @cindex Local conventions
        !          1443: @cindex Adding local info
        !          1444: @cindex Adding site info
        !          1445: 
        !          1446: If you find that a tool does not get configured to your liking, or if
        !          1447: @code{configure}'s conventions differ from your local conventions, you should
        !          1448: probably consider @dfn{site-specific @file{Makefile} fragments}.  See also
        !          1449: @ref{Sites, , Adding site info}.
        !          1450: 
        !          1451: These are probably not the right choice for options that can be set from
        !          1452: the @code{configure} command line or for differences that are host or
        !          1453: target dependent.
        !          1454: 
        !          1455: Cygnus @code{configure} uses three types of @file{Makefile} fragments.  In a
        !          1456: generated @file{Makefile} they appear in the order: @dfn{target fragment},
        !          1457: @dfn{host fragment}, and @dfn{site fragment}.  This allows host fragments to
        !          1458: override target fragments, and site fragments to override both.
        !          1459: 
        !          1460: Host-specific @file{Makefile} fragments conventionally reside in the
        !          1461: @file{./config/} subdirectory with names of the form @file{mh-@var{hosttype}}.
        !          1462: They are used for hosts that require odd options to the standard compiler and
        !          1463: for compile time options based on the host configuration.
        !          1464: 
        !          1465: Target-specific @file{Makefile} fragments conventionally reside in the
        !          1466: @file{./config/} subdirectory with names of the form @file{mt-@var{target}}.
        !          1467: They are used for target dependent compile time options.
        !          1468: 
        !          1469: Site specific @file{Makefile} fragments conventionally reside in the
        !          1470: @file{./config/} subdirectory with names of the form @file{ms-@var{site}}.
        !          1471: They are used to override host- and target-independent compile time options.
        !          1472: Note that you can also override these options on the @code{make} invocation
        !          1473: line.
        !          1474: 
        !          1475: @c ---------------------------------------------------------------------
        !          1476: @node Makefile extensions
        !          1477: @section Extensions to the @sc{gnu} coding standards
        !          1478: @cindex @code{Makefile} extensions
        !          1479: @cindex Cygnus extensions
        !          1480: @cindex Coding standards extensions
        !          1481: 
        !          1482: The following additions to the @sc{gnu} coding standards are required for
        !          1483: Cygnus @code{configure} to work properly.
        !          1484: 
        !          1485: @itemize @bullet
        !          1486: @item
        !          1487: The @file{Makefile} must contain exactly one line starting with @samp{####}.
        !          1488: This line should follow any default macro definitions but precede any rules.
        !          1489: Host, target, and site-specific @file{Makefile} fragments will be inserted
        !          1490: immediately after this line.  If the line is missing, the fragments will not be
        !          1491: inserted.
        !          1492: 
        !          1493: @item
        !          1494: Cygnus adds the following targets to each @file{Makefile}.  Their existence is
        !          1495: not required for Cygnus @code{configure}, but they are documented here for
        !          1496: completeness.
        !          1497: 
        !          1498: @table @code
        !          1499: @kindex info
        !          1500: @item info
        !          1501: Build all info files from texinfo source.
        !          1502: 
        !          1503: @kindex install-info
        !          1504: @item install-info
        !          1505: Install all info files.
        !          1506: 
        !          1507: @kindex clean-info
        !          1508: @item clean-info
        !          1509: Remove all info files and any intermediate files that can be generated
        !          1510: from texinfo source.
        !          1511: 
        !          1512: @kindex Makefile
        !          1513: @item Makefile
        !          1514: Calls @code{./config.status} to rebuild the @file{Makefile} in this directory.
        !          1515: @end table
        !          1516: 
        !          1517: @item
        !          1518: The following @file{Makefile} targets have revised semantics:
        !          1519: 
        !          1520: @table @code
        !          1521: @kindex install
        !          1522: @item install
        !          1523: Should @emph{not} depend on the target @samp{all}.  If the program is not
        !          1524: already built, @samp{make install} should fail.  This allows you to install
        !          1525: programs even when @code{make} would otherwise determine them to be out of
        !          1526: date.  This can happen, for example, when the result of a @samp{make all} is
        !          1527: transported via tape to another machine for installation.
        !          1528: 
        !          1529: @kindex clean
        !          1530: @item clean
        !          1531: Should remove any file that can be regenerated by the @file{Makefile},
        !          1532: excepting only the @file{Makefile} itself, and any links created by
        !          1533: @code{configure}.  That is, @code{make all clean} should return all directories
        !          1534: to their original condition.  If this is not done, then the command sequence
        !          1535: 
        !          1536: @cindex Example session
        !          1537: @example
        !          1538: configure @var{host1} ; make all install clean ; 
        !          1539: configure @var{host2} ; make all install
        !          1540: @end example
        !          1541: 
        !          1542: @noindent
        !          1543: will fail because of intermediate files intended for @var{host1}.
        !          1544: @end table
        !          1545: 
        !          1546: @item
        !          1547: Cygnus adds the following macros to all @file{Makefile.in} files, but
        !          1548: you are not required to use them to run Cygnus @code{configure}.
        !          1549: 
        !          1550: @table @code
        !          1551: @kindex docdir
        !          1552: @item docdir
        !          1553: The directory in which to install any documentation that is not either a
        !          1554: @code{man} page or an @code{info} file.  For @code{man} pages, see
        !          1555: @samp{mandir}; for @code{info}, see @samp{infodir}.
        !          1556: 
        !          1557: @kindex includedir
        !          1558: @item includedir
        !          1559: The directory in which to install any header files that should be made
        !          1560: available to users.  This is distinct from the @code{gcc} include directory,
        !          1561: which is intended for @code{gcc} only.  Files in @samp{includedir} may be used
        !          1562: by @code{cc} as well.
        !          1563: @end table
        !          1564: 
        !          1565: @item
        !          1566: The following macros have revised semantics.  Most of them describe
        !          1567: installation directories; see also @ref{Install details, , Full description of
        !          1568: all installation subdirectories}.
        !          1569: 
        !          1570: @table @code
        !          1571: @kindex datadir
        !          1572: @item datadir
        !          1573: is used for host independent data files.
        !          1574: 
        !          1575: @kindex mandir
        !          1576: @item mandir
        !          1577: The default path for @samp{mandir} depends on @samp{prefix}.
        !          1578: 
        !          1579: @kindex infodir
        !          1580: @item infodir
        !          1581: The default path for @samp{infodir} depends on @samp{prefix}.
        !          1582: 
        !          1583: @kindex BISON
        !          1584: @item BISON
        !          1585: is assumed to have a @code{yacc} calling convention.  To use @sc{gnu}
        !          1586: @code{bison}, use @samp{BISON=bison -y}.
        !          1587: @end table
        !          1588: 
        !          1589: @item
        !          1590: Each Cygnus @file{Makefile} also conforms to one additional restriction:
        !          1591: 
        !          1592: When libraries are installed, the line containing the call to
        !          1593: @samp{INSTALL_DATA} should always be followed by a line containing a call to
        !          1594: @samp{RANLIB} on the installed library.  This is to accommodate systems that
        !          1595: use @code{ranlib}.  Systems that do not use @code{ranlib} can set @samp{RANLIB}
        !          1596: to ``@code{echo}'' in a host specific @file{Makefile} fragment.
        !          1597: @end itemize
        !          1598: 
        !          1599: @c ========================================================================
        !          1600: @node Porting
        !          1601: @chapter Porting with @code{configure}
        !          1602: @cindex Porting with @code{configure}
        !          1603: 
        !          1604: This section explains how to add programs, host and target configuration
        !          1605: names, and site-specific information to Cygnus @code{configure}.
        !          1606: 
        !          1607: @menu
        !          1608: * Programs::               Adding configure to new programs
        !          1609: * Hosts and targets::      Adding hosts and targets
        !          1610: * Sites::                  Adding site info
        !          1611: @end menu
        !          1612: 
        !          1613: @c ---------------------------------------------------------------------
        !          1614: @node Programs
        !          1615: @section Adding @code{configure} to new programs
        !          1616: @cindex Adding @code{configure} to new programs
        !          1617: 
        !          1618: If you are writing a new program, you probably shouldn't worry about porting or
        !          1619: configuration issues until it is running reasonably on some host.  Then refer
        !          1620: back to this section.
        !          1621: 
        !          1622: If your program currently has a @code{configure} script that meets the @sc{gnu}
        !          1623: standards (@pxref{Configuration, , How Configuration Should Work, standards,
        !          1624: GNU Coding Standards}, please do not add Cygnus @code{configure}.  It should be
        !          1625: possible to add this program without change to a Cygnus @code{configure} style
        !          1626: source tree.
        !          1627: 
        !          1628: @cindex @code{autoconf}
        !          1629: If the program is not target dependent, please consider using @code{autoconf}
        !          1630: instead of Cygnus @code{configure}.  @code{autoconf} is available from the Free
        !          1631: Software Foundation; it is a program which generates an executable shell script
        !          1632: called @file{configure} by automatically finding information on the system to
        !          1633: be configured on and embedding this information in the shell script.
        !          1634: @file{configure} scripts generated by @code{autoconf} require no arguments, and
        !          1635: accept the same options as Cygnus @code{configure}.  For detailed instructions
        !          1636: on using @code{autoconf}, see @ref{Making configure Scripts, , How to organize
        !          1637: and produce Autoconf scripts, autoconf, Autoconf}.
        !          1638: 
        !          1639: 
        !          1640: To add Cygnus @code{configure} to an existing program, do the following:
        !          1641: 
        !          1642: @table @bullet
        !          1643: @item Make sure the @file{Makefile} conforms to the @sc{gnu} standard
        !          1644: The coding standard for writing a @sc{gnu} @file{Makefile} is described in
        !          1645: @ref{Makefiles, , Makefile Conventions, standards, GNU Coding Standards}.  For
        !          1646: technical information on writing a @file{Makefile}, see @ref{Makefiles, ,
        !          1647: Writing Makefiles, make, GNU Make}.
        !          1648: 
        !          1649: @item Add Cygnus extensions to the @file{Makefile}
        !          1650: These are described in @ref{Makefile extensions, , Extensions to the @sc{gnu}
        !          1651: coding standards}.
        !          1652: 
        !          1653: @item Collect package specific definitions in a single file
        !          1654: Many packages are best configured using a common @file{Makefile} fragment which
        !          1655: is included by all of the makefiles in the different directories of the
        !          1656: package.  In order to accomplish this, set the variable
        !          1657: @samp{package_makefile_fragment} to the name of the file.  It will be inserted
        !          1658: into the final @file{Makefile} before the target-specific fragment.
        !          1659: 
        !          1660: @item Move host support from @file{Makefile} to fragments
        !          1661: This usually involves finding sections of the @file{Makefile} that say things
        !          1662: like ``uncomment these lines for host @var{hosttype}'' and moving them to a new
        !          1663: file called @file{./config/mh-@var{hosttype}}. For more information, see @ref{Hosts
        !          1664: and targets, , Adding hosts and targets}.
        !          1665: 
        !          1666: @item Choose defaults
        !          1667: If the program has compile-time options that determine the way the program
        !          1668: should behave, choose reasonable defaults and make these @file{Makefile}
        !          1669: variables.  Be sure the variables are assigned their default values before the
        !          1670: @samp{####} line so that site-specific @file{Makefile} fragments can override
        !          1671: them (@pxref{Makefile extensions, , Extensions to the @sc{gnu} coding
        !          1672: standards}).
        !          1673: 
        !          1674: @item Locate configuration files
        !          1675: If there is configuration information in header files or source files, separate
        !          1676: it in such a way that the files have generic names.  Then move the specific
        !          1677: instances of those files into the @file{./config/} subdirectory.
        !          1678: 
        !          1679: @item Separate host and target information
        !          1680: Some programs already have this information separated.  If yours does not, you
        !          1681: will need to separate these two kinds of configuration information.  @dfn{Host
        !          1682: specific} information is the information needed to compile the program.
        !          1683: @dfn{Target specific} information is information on the format of data files
        !          1684: that the program will read or write.  This information should live in separate
        !          1685: files in the @file{./config/} subdirectory with names that reflect the
        !          1686: configuration for which they are intended.
        !          1687: 
        !          1688: At this point you might skip this step and simply move on.  If you do, you
        !          1689: should end up with a program that can be configured only to build @dfn{native}
        !          1690: tools, that is, tools for which the host system is also the target system.
        !          1691: Later, you could attempt to build a cross tool and separate out the
        !          1692: target-specific information by figuring out what went wrong.  This is often
        !          1693: simpler than combing through all of the source code.
        !          1694: 
        !          1695: @item Write @code{configure.in}
        !          1696: Usually this involves writing shell script fragments to map from canonical
        !          1697: configuration names into the names of the configuration files.  These files
        !          1698: will then be linked at configure time from the specific instances of those
        !          1699: files in @file{./config} to files in the build directory with more generic
        !          1700: names.  (See also @ref{Build directories, , Build directories}.)  The format of
        !          1701: @file{configure.in} is described in @ref{configure.in, , The
        !          1702: @code{configure.in} input file}.
        !          1703: 
        !          1704: @item Rename @file{Makefile} to @file{Makefile.in}
        !          1705: @end table
        !          1706: 
        !          1707: At this point you should have a program that can be configured using
        !          1708: Cygnus @code{configure}.
        !          1709: 
        !          1710: @c ---------------------------------------------------------------------
        !          1711: @node Hosts and targets
        !          1712: @section Adding hosts and targets
        !          1713: @cindex Adding hosts and targets
        !          1714: @cindex Hosts and targets
        !          1715: 
        !          1716: To add a host or target to a program that already uses Cygnus @code{configure},
        !          1717: do the following.
        !          1718: 
        !          1719: @itemize @bullet
        !          1720: 
        !          1721: @item
        !          1722: Make sure the new configuration name is represented in @file{config.sub}.  If
        !          1723: not, add it.  For more details, see the comments in the shell script
        !          1724: @file{config.sub}.
        !          1725: 
        !          1726: @item
        !          1727: If you are adding a host configuration, look in @file{configure.in}, in the
        !          1728: @dfn{per-host} section.  Make sure that your configuration name is represented
        !          1729: in the mapping from host configuration names to configuration files.  If not,
        !          1730: add it.  Also see @ref{configure.in, , The @code{configure.in} input file}.
        !          1731: 
        !          1732: @item
        !          1733: If you are adding a target configuration, look in @file{configure.in}, in the
        !          1734: @dfn{per-target} section.  Make sure that your configuration name is
        !          1735: represented in the mapping from target configuration names to configuration
        !          1736: files.  If not, add it.  Also see @ref{configure.in, , The @code{configure.in}
        !          1737: input file}.
        !          1738: 
        !          1739: @item
        !          1740: Look in @file{configure.in} for the variables @samp{files}, @samp{links},
        !          1741: @samp{host_makefile_frag}, and @samp{target_makefile_frag}.  The values
        !          1742: assigned to these variables are the names of the configuration files, (relative
        !          1743: to @samp{srcdir}) that the program uses.  Make sure that copies of the files
        !          1744: exist for your host.  If not, create them.  See also @ref{configure variables,
        !          1745: , Variables available to @code{configure.in}}.
        !          1746: @end itemize
        !          1747: 
        !          1748: This should be enough to @code{configure} for a new host or target
        !          1749: configuration name.  Getting the program to compile and run properly represents
        !          1750: the hardest work of any port.
        !          1751: 
        !          1752: @c ---------------------------------------------------------------------
        !          1753: @node Sites
        !          1754: @section Adding site info
        !          1755: @cindex Sites
        !          1756: @cindex Adding site info
        !          1757: 
        !          1758: If some of the @file{Makefile} defaults are not right for your site, you can
        !          1759: build site-specific @file{Makefile} fragments.  To do this, do the following.
        !          1760: 
        !          1761: @itemize @bullet
        !          1762: 
        !          1763: @item
        !          1764: Choose a name for your site.  It must currently be less than eleven characters.
        !          1765: 
        !          1766: @item
        !          1767: If the program source does not have a @file{./config/} subdirectory, create it.
        !          1768: 
        !          1769: @item
        !          1770: Create a file called @file{./config/ms-@var{site}} where @var{site} is the name
        !          1771: of your site.  In it, set whatever @file{Makefile} variables you need to
        !          1772: override to match your site's conventions.
        !          1773: 
        !          1774: @item
        !          1775: Configure the program with:
        !          1776: 
        !          1777: @cindex Example session
        !          1778: @example
        !          1779: configure @dots{} --site=@var{site}
        !          1780: @end example
        !          1781: 
        !          1782: @end itemize
        !          1783: 
        !          1784: @c ---------------------------------------------------------------------
        !          1785: @node Variables Index
        !          1786: @unnumbered Variable Index
        !          1787: 
        !          1788: @printindex vr
        !          1789: 
        !          1790: @page
        !          1791: @c ---------------------------------------------------------------------
        !          1792: @node Concept Index
        !          1793: @unnumbered Concept Index
        !          1794: 
        !          1795: @printindex cp
        !          1796: @contents
        !          1797: @bye
        !          1798: 
        !          1799: @c Local Variables:
        !          1800: @c fill-column: 79
        !          1801: @c outline-regexp: "@chap"
        !          1802: @c End:
        !          1803: @c (setq outline-regexp "@chapt\\\|@unnum\\\|@setf\\\|@conte\\\|@sectio\\\|@subsect\\\|@itemize\\\|@defvar{")
        !          1804: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.