In configure{.in} {host|target}_makefile_frag should name a file
[deliverable/binutils-gdb.git] / configure.texi
CommitLineData
8f861f08 1\input texinfo @c -*-para-*-
ce947b9d 2@c %**start of header
8f861f08
RP
3@setfilename configure.info
4@settitle Cygnus Configure
ce947b9d 5@c %**end of header
e59aa15a 6@synindex ky cp
d1cde16a
RP
7@tex
8\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$
9\xdef\manvers{\$Revision$} % For use in headers, footers too
10@end tex
f3b7efd5
RP
11@setchapternewpage off
12
13@ifinfo
14This document attempts to describe the Cygnus Support version of
15@code{configure}.
16
17Copyright (C) 1991 Cygnus Support
18Permission is granted to make and distribute verbatim copies of
19this manual provided the copyright notice and this permission notice
20are preserved on all copies.
21
22@ignore
23Permission is granted to process this file through TeX and print the
24results, provided the printed document carries copying permission
25notice identical to this one except for the removal of this paragraph
26(this paragraph not being relevant to the printed manual).
27
28@end ignore
29Permission is granted to copy and distribute modified versions of this
30manual under the conditions for verbatim copying, provided that the entire
31resulting derived work is distributed under the terms of a permission
32notice identical to this one.
33
34Permission is granted to copy and distribute translations of this manual
35into another language, under the above conditions for modified versions,
36except that this permission notice may be stated in a translation approved
37by Cygnus Support.
38@end ifinfo
8f861f08 39
ce947b9d
RP
40@titlepage
41@sp 10
42@title{Cygnus Configure}
d1cde16a 43@subtitle @manvers, for Cygnus Configure version 1.84
f3b7efd5
RP
44@author{K. Richard Pixley, @code{rich@@cygnus.com}}
45@author{Cygnus Support}
ce947b9d 46@page
f3b7efd5 47
ce947b9d
RP
48@vskip 0pt plus 1filll
49Copyright @copyright{} 1991 Cygnus Support
ce947b9d 50
f3b7efd5
RP
51Permission is granted to make and distribute verbatim copies of
52this manual provided the copyright notice and this permission notice
53are preserved on all copies.
ce947b9d 54
f3b7efd5
RP
55Permission is granted to copy and distribute modified versions of this
56manual under the conditions for verbatim copying, provided that the entire
57resulting derived work is distributed under the terms of a permission
58notice identical to this one.
59
60Permission is granted to copy and distribute translations of this manual
61into another language, under the above conditions for modified versions,
62except that this permission notice may be stated in a translation approved
63by Cygnus Support.
64@end titlepage
ce947b9d
RP
65
66@ifinfo
f3b7efd5
RP
67@format
68START-INFO-DIR-ENTRY
69* configure: (configure.info). Cygnus configure.
70END-INFO-DIR-ENTRY
71@end format
72
d1cde16a 73@node top, What Configure Does, (dir), (dir)
ce947b9d 74@top top
8f861f08
RP
75
76This file documents the configuration system used and distributed by
77Cygnus Support.
78
ce947b9d
RP
79NOTE: support for a Cygnus experimental option, @code{-subdirs} is at
80least temporarily suspended. Most of the code is still in configure but
81the option is disabled. This document describes that feature, but those
82parts are prominently marked with NOTE's like this one. FIXME-soon
83
8f861f08 84@menu
d1cde16a 85* What Configure Does:: What Configure Does
8f861f08 86* Invoking:: Invoking
ce947b9d 87* Using Configure:: Using Configure
ce947b9d 88* Porting:: Porting with Configure
f3b7efd5 89* Reference:: Gory details described
ce947b9d
RP
90* Known Bugs:: Known Bugs
91* Variables Index:: Variable Index
92* Concept Index:: Concept Index
93
8f861f08 94@end menu
f3b7efd5 95
ce947b9d 96@end ifinfo
8f861f08 97
f3b7efd5
RP
98@iftex
99@unnumbered Preface
100NOTE: support for a Cygnus experimental option, @code{-subdirs} is at
101least temporarily suspended. Most of the code is still in configure but
102the option is disabled. This document describes that feature, but those
103parts are prominently marked with NOTE's like this one. FIXME-soon
104@end iftex
105
d1cde16a
RP
106@node What Configure Does, Invoking, top, top
107@chapter What Configure Does
108
109@code{configure} prepares source directories for building working
110programs. A program cannot be built until its source has been
111configured. When configure runs, it does the following things for each source
112directory for each host and target combination.
113@*
114NOTE: support for multiple hosts and targets is at least temporarily
115suspended.
116
117@table @emph
118@item Create build directories
119(see @ref{Build Directories}). When you run @code{configure} with the
120@code{-srcdir=} option, it uses the current directory as build
121directory, creating under it a directory tree that parallels the
122directory structure under the source directory. (See @ref{Invoking}).
123
124NOTE: support for @code{-subdirs} is at least temporarily suspended.
125@*
126When you run @code{configure} with the @code{-subdirs} option, it
127creates a build subdirectory in each source directory.
128
129If you use both @code{-subdirs} and @code{-srcdir=}, a tree that
130parallels the source directory structure is created in the current
131directory, and the subdirectories are created in this directory tree
132rather than in the source directories.
133
134@item Generate makefiles
135A makefile template from the source directory, usually called
136@file{Makefile.in}, is copied to an output file in the build directory.
137The output file is usually named @file{Makefile}. @code{configure}
138places definitions for a number of standard makefile
139macros at the beginning of the output file. If @code{-prefix=} or
140@code{-datadir=} were specified on the @code{configure} command line,
141corresponding makefile variables are set accordingly. If host, target, or
142site specific makefile fragments exist, these are inserted into the
143output file. (See @ref{Makefiles, , , make, Makefiles}.)
144
145@item Generate @file{.gdbinit}
146If the source directory contains a @file{.gdbinit} file and the build
147directory is not the same as the source directory, a @file{.gdbinit}
148file is created in the build directory. (see @ref{Command Files, , ,
149gdb, Command Files}.)
150@c There doesn't seem to be anything else about this. Is the build-dir
151@c .gdbinit identical with the source-dir one? If so should say "copy"
152@c rather than "create" to make it clear.
153
154@item Make symbolic links
155Most directories have some symbolic links with generic names built
156pointing to specific files in the source directory. If the system where
157@code{configure} runs cannot support symbolic links, hard links are used
158instead.
159
160@item Miscellaneous
161If the source directory has special needs, they are handled by shell
162script fragments stored with the source. Usually there are no special
163needs, but sometimes they involve changes to the output makefile.
164
165@item Generate @file{config.status}
166@code{configure} creates a shell script named @file{config.status} in
167the build directory. This shell script, when run from the build
168directory, will reconfigure the build directory (but not its
169subdirectories). This is most often used to have a @code{Makefile} update
170itself automatically if a new source directory is available.
d1cde16a
RP
171
172@item Recursion
173If the source directory has subdirectories that should also be
174configured, @code{configure} is called for each.
175@end table
176
177@node Invoking, Using Configure, What Configure Does, top
8f861f08
RP
178@chapter Invoking
179
180The usual way to invoke @code{configure} is as follows:
181@example
182configure @var{host}
183@end example
d1cde16a 184This prepares the source to be compiled in a
8f861f08
RP
185@var{host} environment with programs and files to be installed in
186@file{/usr/local}.
187
188NOTE: support for multiple hosts is at least temporarily suspended.
ce947b9d 189FIXME-soon
d1cde16a 190@*
8f861f08
RP
191If more than one host is specified on the command line, then
192configurations are created for each and @code{-subdirs} is assumed.
193
d1cde16a
RP
194@code{configure} prepares the source as you specify by selecting and
195using script and Makefile fragments prepared in advance, and stored with
196the source. @code{configure}'s command line options also allow you to
197specify other aspects of the source configuration:
8f861f08 198
d1cde16a 199@table @code
8f861f08 200@item -datadir=@var{dir}
d1cde16a 201Configure the source to install host independent files in @var{dir}.
8f861f08 202
3a07a6ac
RP
203This option sets the @code{configure} variable @code{datadir}.
204Generated Makefiles will have their @code{datadir} variables set to this
205value. (See @ref{Install Details}.)
8f861f08
RP
206
207@item -gas
d1cde16a 208Configure to use the @sc{GNU} assembler.
8f861f08
RP
209
210@item -help
d1cde16a 211Display a quick summary of how to invoke @code{configure}.
8f861f08
RP
212
213@item -host=@var{host}
ce947b9d 214FIXME-soon: I don't think this option should be documented.
d1cde16a 215@c Then why does it exist? /Pesch 7jan92
ce947b9d 216
d1cde16a
RP
217@item -namesubdir=@var{name}
218NOTE: support for this @code{-namesubdir=} is at least temporarily
ce947b9d 219suspended. FIXME-soon
8f861f08 220
d1cde16a
RP
221Name any subdirectories created by the @code{-subdirs} option
222@file{@var{name}}.
223
224@emph{Warning:} Avoid using this option if you specify multiple hosts
225simultaneously. There is no way to specify separate names for
226subdirectories, when you configure for multiple hosts in a single
227invocation of @code{configure}.
8f861f08 228
8f861f08 229@item -nfp
d1cde16a
RP
230@emph{No floating point} unit available on the target; configure to
231avoid dependencies on hardware floating point.
8f861f08
RP
232
233@item -norecursion
d1cde16a
RP
234Configure only this directory; ignore any subdirectories. This is used
235by the executable shell script @file{config.status} to reconfigure the
236current directory. (see @ref{config.status}).
8f861f08 237
d1cde16a
RP
238@ignore
239@c This is complicated enough without "no longer supported" entries.
240@c Should really delete this, but for ease of discourse...
8f861f08 241@item -objdir=@var{dir}
ce947b9d 242This option is no longer supported. Use @code{-srcdir=} instead.
d1cde16a 243@end ignore
8f861f08
RP
244
245@item -prefix=@var{dir}
d1cde16a
RP
246Configure the source to install programs and files under directory
247@file{@var{dir}}.
8f861f08 248
3a07a6ac
RP
249This option sets the @code{configure} variable @code{prefix}. Generated
250Makefiles will have their @code{prefix} variables set to this value.
251(See @ref{Install Details}.)
8f861f08
RP
252
253@item -recurring
f8f3c853 254@c Wouldn't it make more sense to call this "-quiet"? (FIXME).
8f861f08 255This option is used internally by @code{configure} when recurring on
d1cde16a
RP
256subdirectories. Its sole purpose is to suppress status output. You can
257override this effect with the @code{-verbose} option.
8f861f08
RP
258
259@item -rm
d1cde16a
RP
260@emph{Remove} the configuration specified by @var{host} and the other
261command-line options, rather than creating it.
8f861f08
RP
262
263@item -site=@var{site}
d1cde16a
RP
264Generate Makefiles using site specific Makefile fragments for
265@var{site}. See also @ref{Sites}.
8f861f08
RP
266
267@item -srcdir=@var{_dir}
d1cde16a 268Build Makefiles to use the sources located in directory @file{@var{dir}}. The
8f861f08
RP
269build directory is assumed to be @file{.}.
270
d1cde16a 271@item -subdirs
ce947b9d
RP
272NOTE: support for this @code{-subdirs} is at least temporary suspended.
273FIXME-soon
274
d1cde16a
RP
275Place configurations in subdirectories of each build directory.
276@code{configure} builds a separate subdirectory for each host specified,
277and names it @file{H-@var{host}}. If a configuration is not native,
278(@var{host} is not @var{target}), then the subdirectory is named
279@file{X-@var{host}-@var{target}} instead. You can also name a
280subdirectory explicitly using the @samp{-namesubdir} option, but this is
281effective only when you specify one configuration at a time.
8f861f08
RP
282
283@item -target=@var{target}
284Requests that the sources be configured to target the @var{target}
d1cde16a
RP
285machine. If no target is specified explicitly, the target is assumed
286to be the same as the host.
287
288NOTE: support for multiple targets is at least temporarily suspended.
289FIXME-soon
290@*
291If multiple targets are specified, configurations for each
292are created and @code{-subdirs} is assumed.
8f861f08 293
8f861f08 294@item -tmpdir=@var{tmpdir}
d1cde16a 295Use the directory @var{tmpdir} for @code{configure}'s temporary files.
f8f3c853
RP
296The default is the value of the environment variable TMPDIR, or
297@file{/tmp} if the environment variable is not set.
8f861f08
RP
298
299@item -verbose
d1cde16a
RP
300@itemx -v
301Print status lines for each directory configured. Normally, only the
302status lines for the initial working directory are printed.
8f861f08
RP
303
304@item -x
d1cde16a
RP
305Use @sc{MIT} style @sc{X11} header files and libraries on the host, even
306if they are not normally available.
8f861f08
RP
307@end table
308
d1cde16a 309@node Using Configure, Porting, Invoking, top
8f861f08
RP
310@chapter Using Configure
311
d1cde16a
RP
312The choices and options available at configuration time
313generally have valid defaults, but the defaults do not cover all cases.
314The choices available include install locations, build directories,
315host, target, and local conventions.
8f861f08
RP
316
317@menu
318* Install Locations:: Where to install things once they are built
319* Build Directories:: Where to build object files
ce947b9d
RP
320* Host:: Telling @code{configure} what will source will
321 be built
322* Target:: Telling @code{configure} what the source will
323 target
324* Local Conventions:: Adding information about local conventions
8f861f08
RP
325@end menu
326
ce947b9d 327@node Install Locations, Build Directories, Using Configure, Using Configure
8f861f08 328@section Install Locations
8f861f08
RP
329@cindex Where to install
330
d1cde16a 331Using the default configuration, @code{make install} creates a
8f861f08 332single tree of files, some of which are programs. The location of this
f3b7efd5
RP
333tree is determined by the value of the variable @code{prefix}. The
334default value of @code{prefix} is @file{/usr/local}. This is
d1cde16a 335often correct for native tools installed on only one host.
8f861f08
RP
336
337@menu
d1cde16a
RP
338* prefix:: Changing the default install directory
339* datadir:: How to separate host independent files
8f861f08
RP
340 from host dependent files when
341 installing for multiple hosts
d1cde16a 342* Install Details:: Full descriptions of all installation
8f861f08
RP
343 subdirectories
344@end menu
345
346@node prefix, datadir, Install Locations, Install Locations
347@subsection Changing the default install directory
8f861f08 348@cindex Changing the default install directory
ce947b9d 349@cindex Prefix directory
8f861f08
RP
350
351In the default configuration, all files are installed in subdirectories
d1cde16a
RP
352of @file{/usr/local}. The location is determined by the value of
353the @code{configure} variable @code{prefix}; in turn, this determines the
354value of the Makefile variable of the same name (@code{prefix}).
8f861f08 355
f3b7efd5 356You can also set the value of the Makefile variable @code{prefix}
d1cde16a 357explicitly each time you invoke @code{make} if you are so inclined; but
8f861f08 358because many programs have this location compiled in, you must specify
d1cde16a 359the @code{prefix} value consistently on each invocation of @code{make},
8f861f08
RP
360or you will end up with a broken installation.
361
362To make this easier, the value of the @code{configure} variable
f3b7efd5 363@code{prefix} can be set on the command line to @code{configure}
d1cde16a 364using the option @code{-prefix=}.
8f861f08
RP
365
366
367@node datadir, Install Details, prefix, Install Locations
368@subsection Installing for multiple hosts
8f861f08
RP
369@cindex Configuring for multiple hosts
370@cindex Sharing host independent files
e59aa15a 371@cindex The @file{datadir} directory
8f861f08
RP
372@cindex Installing host independent files
373
d1cde16a
RP
374By default, host independent files are installed in subdirectories of
375@file{@var{prefix}/lib}. The location is determined by the value of the
376@code{configure} variable @code{datadir}, which determines the value of
377the Makefile variable @code{datadir}. This makes it simpler to install
378for a single host, and simplifies changing the default location for the
379install tree; but the default doesn't allow for multiple hosts to
8f861f08
RP
380effectively share host independent files.
381
382To configure so that multiple hosts can share common files, use
383something like:
384
385@example
386configure @var{host1} -prefix=/usr/gnu/H-@var{host1} -datadir=/usr/gnu/H-independent
387make all info install install-info clean
d1cde16a 388
8f861f08
RP
389configure @var{host2} -prefix=/usr/gnu/H-@var{host2} -datadir=/usr/gnu/H-independent
390make all info install install-info
391@end example
392
d1cde16a
RP
393The first line configures the source for @var{host1} to place host
394specific programs in subdirectories of @file{/usr/gnu/H-@var{host1}},
395and host independent files in @file{/usr/gnu/H-independent}.
8f861f08
RP
396
397The second line builds and installs all programs for @var{host1},
d1cde16a 398including both host independent and host specific files.
8f861f08 399
d1cde16a
RP
400The third line reconfigures the source for @var{host2} to place host
401specific programs in subdirectories of @file{/usr/gnu/H-@var{host2}},
402and host independent files (once again) in
403@file{/usr/gnu/H-independent}.
8f861f08
RP
404
405The fourth line builds and installs all programs for @var{host2}. Host
d1cde16a
RP
406specific files are installed in new directories, but the host
407independent files are installed @emph{on top of} the host
8f861f08 408independent files installed for @var{host1}. This results in a single
d1cde16a 409copy of the host independent files, suitable for use by both hosts.
8f861f08 410
87081339
RP
411NOTE: support for @code{-subdirs} and multiple hosts is at least
412temporarily suspended. FIXME-soon
d1cde16a 413@*
ce947b9d
RP
414Previously this was:
415
416@example
417configure @var{host1} @var{host2} -prefix=/usr/gnu
f8f3c853 418make all install
ce947b9d 419@end example
8f861f08
RP
420
421@node Install Details, , datadir, Install Locations
422@subsection Full descriptions of all installation subdirectories
423
d1cde16a
RP
424During any install, a number of standard directories are created. Their
425names are determined by Makefile variables. Some of the
8f861f08
RP
426defaults for Makefile variables can be changed at configure time using
427command line options to @code{configure}. For more information on the
428standard directories or the Makefile variables, please refer to
429@cite{standards.text}.
430
d1cde16a
RP
431Note that @code{configure} does not create the directory @code{srcdir}
432at any time. @code{srcdir} is not an installation directory.
8f861f08 433
d1cde16a
RP
434You can override all makefile variables on the command line to
435@code{make}. (See @ref{Overriding, Overriding Variables, Overriding
8f861f08 436Variables, make, Make}.) If you do so, you will need to specify the
d1cde16a 437value precisely the same way for each invocation of @code{make}, or you
8f861f08
RP
438risk ending up with a broken installation. This is because many
439programs have the locations of other programs or files compiled into
440them. If you find yourself overriding any of the variables frequently,
87081339 441you should consider site dependent Makefile fragments. See also
d1cde16a 442@ref{Sites}.
8f861f08 443
d1cde16a
RP
444During @code{make install}, a number of standard directories are
445created and populated. The following Makefile variables define them.
446Those whose defaults are set by corresponding @code{configure} variables
447are marked ``Makefile and configure''.
8f861f08
RP
448
449@vindex prefix
450@defvr {Makefile and configure} prefix
d1cde16a
RP
451The root of the installation tree. You can set
452its Makefile default with the @code{-prefix=} command line option to
453@code{configure}. (@ref{Invoking}.) The default value for
454@code{prefix} is @file{/usr/local}.
8f861f08
RP
455@end defvr
456
457@vindex bindir
458@defvr Makefile bindir
d1cde16a
RP
459A directory for binary programs that users can run.
460The default value for @code{bindir} depends on @code{prefix};
461@code{bindir} is normally changed only indirectly through @code{prefix}.
462The default value for @code{bindir} is @file{$(prefix)/bin}.
8f861f08
RP
463@end defvr
464
465@vindex datadir
466@defvr {Makefile and configure} datadir
d1cde16a
RP
467A directory for host independent files. You can specify the Makefile
468default value by using the @code{-datadir=} option to @code{configure}.
469(See also @ref{Invoking}.) The default value for @code{datadir} is
470@file{$(prefix)/lib}.
8f861f08
RP
471@end defvr
472
473@vindex libdir
474@defvr Makefile libdir
d1cde16a
RP
475A directory for libraries and support programs. The default value for
476@code{libdir} depends on @code{prefix}; @code{libdir} is normally
477changed only indirectly through @code{prefix}. The default value for
478@code{libdir} is @file{$(prefix)/lib}.
8f861f08
RP
479@end defvr
480
481@vindex mandir
482@defvr Makefile mandir
d1cde16a
RP
483A directory for @code{man} format documentation (``man pages''). The
484default value for @code{mandir} depends on @code{prefix};
485@code{mandir} is normally changed only indirectly through @code{prefix}.
486The default value for @code{mandir} is @file{$(datadir)/man}.
8f861f08
RP
487@end defvr
488
489@vindex man@var{N}dir
490@defvr Makefile man@var{N}dir
d1cde16a
RP
491There are eight variables named @code{man1dir}, @code{man2dir}, etc.
492They name the specific directories for each man page section. For
493example, @code{man1dir} holds @file{emacs.1} (the man page for the emacs
494program), while @code{man5dir} holds @file{rcsfile.5} (the man page
495describing the @code{rcs} data file format). The default value for any
496of the @code{man@var{N}dir} variables depends indirectly on
497@code{prefix}, and is normally changed only through @code{prefix}. The
498default value for @code{man@var{N}dir} is
499@file{$(mandir)/man@var{N}}.
8f861f08
RP
500@end defvr
501
502@vindex manext
503@defvr Makefile manext
d1cde16a
RP
504@emph{Not supported by @code{configure}}. The @sc{gnu} coding standards
505do not call for @code{man1ext}, @code{man2ext}, so the intended use for
506@code{manext} is apparently not parallel to @code{mandir}. Its use is
507not clear. (See also @ref{Makefile Extensions}.)
8f861f08
RP
508@end defvr
509
510@vindex infodir
511@defvr Makefile infodir
d1cde16a
RP
512A directory for @emph{info} format documentation. The default value for
513@code{infodir} depends indirectly on @code{prefix}; @code{infodir} is
514normally changed only through @code{prefix}. The default value for
515@code{infodir} is @file{$(datadir)/info}.
8f861f08
RP
516@end defvr
517
518@vindex docdir
519@defvr Makefile docdir
d1cde16a
RP
520A directory for any documentation that is in a format other than those
521used by @code{info} or @code{man}. The default value for @code{docdir}
522depends indirectly on @code{prefix}; @code{docdir} is normally changed only
523through @code{prefix}. The default value for @code{docdir}
524is @file{$(datadir)/doc}. @emph{This variable is an extension to
525the @sc{gnu} coding standards}. (See also @ref{Makefile Extensions}.)
8f861f08
RP
526@end defvr
527
528@vindex includedir
529@defvr Makefile includedir
d1cde16a
RP
530A directory for the header files accompanying the libraries installed in
531@code{libdir}. The default value for @code{includedir} depends on
532@code{prefix}; @code{includedir} is normally changed only indirectly
533through @code{prefix}. The default value for @code{includedir} is
534@file{$(prefix)/include}.
8f861f08
RP
535@end defvr
536
ce947b9d 537@node Build Directories, Host, Install Locations, Using Configure
8f861f08 538@section Build Directories
ce947b9d 539@cindex Build directories
e59aa15a 540@kindex objdir
ce947b9d 541@cindex Object directories
e59aa15a 542@kindex subdirs
ce947b9d
RP
543@cindex Building for multiple hosts
544@cindex Building for multiple targets
8f861f08 545
87081339 546Normally, @code{configure} builds a @file{Makefile} and symbolic links
ce947b9d 547in the same directory as the source files. This is the typical
d1cde16a 548@sc{un*x} way to build programs, but it has limitations. For instance,
ce947b9d 549using this approach, you can only build for one host at a time.
8f861f08 550
d1cde16a
RP
551We refer to the directories where @code{configure} builds a
552Makefile as the @emph{build directories} or sometimes as
ce947b9d
RP
553@emph{objdir} because these are the directories in which @code{make}
554will build object files, among other things.
8f861f08 555
ce947b9d 556The default build directory is the same as the source directory.
d1cde16a 557You can use a different build directory with a sequence like the following:
8f861f08 558
ce947b9d
RP
559@example
560mkdir @var{builddir}
561cd @var{builddir}
562configure @var{host} -srcdir=@var{sourcedirectory}
f3b7efd5 563@end example
8f861f08 564
d1cde16a
RP
565@noindent
566where @var{builddir} is the directory where you wish to build,
ce947b9d
RP
567@var{host} is the host for which you want to build, and
568@var{sourcedirectory} is the directory containing the source files.
8f861f08 569
ce947b9d 570If you were to do this twice with different values for @var{builddir}
f3b7efd5 571and @var{host}, then you could @code{make} for both at the same time.
8f861f08 572
d1cde16a
RP
573@quotation
574@emph{NOTE:} The rest of this section describes the @code{-subdirs} feature for
ce947b9d 575which support is at least temporarily suspended. FIXME-soon.
d1cde16a 576@end quotation
8f861f08 577
d1cde16a 578Another way to specify the build directory is with the @samp{-subdirs}
ce947b9d 579option. For example:
8f861f08 580
ce947b9d
RP
581@example
582configure @var{host} -subdirs
583@end example
8f861f08 584
ce947b9d
RP
585Using this option, @code{configure} will create a subdirectory named
586@file{H-@var{host}} to act as the build directory for each source
587directory.
8f861f08 588
ce947b9d
RP
589Since building for multiple hosts is so common, @code{configure}
590recognizes this situation as special. For example:
8f861f08 591
ce947b9d
RP
592@example
593configure @var{host1} @var{host2}
594@end example
8f861f08 595
ce947b9d 596is precisely the same as:
8f861f08 597
ce947b9d
RP
598@example
599configure @var{host1} -subdirs
600configure @var{host2} -subdirs
f3b7efd5 601@end example
8f861f08 602
d1cde16a
RP
603That is, configuring for multiple hosts or multiple targets implies
604@samp{-subdirs}.
8f861f08 605
d1cde16a
RP
606When configuring for cross tools (the converse of native tools: when the
607host is not the target), as in:
8f861f08 608
ce947b9d
RP
609@example
610configure @var{host} +target=@var{targ} -subdirs
611@end example
8f861f08 612
d1cde16a 613@noindent
ce947b9d
RP
614the subdirectories are named @file{X-@var{host}-@var{targ}}. This is
615especially useful when configuring for multiple targets.
8f861f08 616
d1cde16a 617If you use both @samp{-subdirs} and @samp{-srcdir=}, a tree that
ce947b9d 618parallels the source directory structure is created in the current
d1cde16a 619directory, and the subdirectories are created in this directory
ce947b9d 620tree rather than in the source directories.
8f861f08 621
d1cde16a
RP
622@emph{NOTE:} previously, @samp{-subdirs} built two-level subdirectories
623as @file{./H-@var{host}/T-@var{target}}, created
624@file{./H-@var{host}/Makefile} for building across all targets,
625@file{./Makefile} for building across all hosts, and
626@file{./config.status} and @file{./H-@var{host}/config.status} for
627rebuilding these Makefiles.
8f861f08 628
ce947b9d
RP
629@node Host, Target, Build Directories, Using Configure
630@section Host
8f861f08 631
d1cde16a
RP
632@quotation
633@emph{NOTE:} support for multiple hosts is at least temporarily suspended.
ce947b9d 634FIXME-soon.
d1cde16a 635@end quotation
8f861f08 636
ce947b9d
RP
637The arguments to @code{configure} are @emph{hosts}. By @emph{host} we
638mean the environment in which the source will be compiled. This need
d1cde16a 639not necessarily be the same as the physical machine involved,
ce947b9d 640although it usually is.
8f861f08 641
ce947b9d 642For example, if some obscure machine running an operating system other
d1cde16a 643than @sc{un*x} had the @sc{gnu} @sc{posix} emulation libraries
ce947b9d
RP
644available, it would be possible to configure most @sc{gnu} source for a
645@sc{posix} system and build it on the obscure host.
8f861f08 646
e59aa15a
RP
647For more on this topic, see @ref{Host Environments, , Host Environments,
648cfg-paper, On Configuring Development Tools}.
8f861f08 649
ce947b9d
RP
650@node Target, Local Conventions, Host, Using Configure
651@section Target
8f861f08 652
d1cde16a
RP
653For building native development tools, or most of the other @sc{gnu}
654tools, you need not worry about the target. The @emph{target} of a
655configuration defaults to the same as the @emph{host}.
8f861f08 656
d1cde16a 657For building cross development tools, please see @ref{Building
e59aa15a
RP
658Development Environments, , Building Development Environments,
659cfg-paper, On Configuring Development Tools}.
8f861f08 660
ce947b9d
RP
661@node Local Conventions, , Target, Using Configure
662@section Local Conventions
8f861f08 663
d1cde16a
RP
664If you find that a tool does not get configured to your liking, or if
665@code{configure}'s conventions differ from your local conventions, you
87081339 666should probably consider site specific Makefile fragments. See also
d1cde16a 667@ref{Sites}.
8f861f08 668
ce947b9d
RP
669These are probably not the right choice for options that can be set from
670the @code{configure} command line or for differences that are host or
671target dependent.
8f861f08 672
d1cde16a 673@node Porting, Reference, Using Configure, top
ce947b9d 674@chapter Porting with Configure
f3b7efd5 675@cindex Porting
d1cde16a
RP
676
677This section explains how to add programs, host and target configuration
678names, and site-specific information to Cygnus configure.
8f861f08
RP
679
680@menu
87081339
RP
681* Programs:: Adding configure to new programs
682* Hosts and Targets:: Adding hosts and targets
683* Sites:: Adding site info
8f861f08
RP
684@end menu
685
8f861f08 686
87081339
RP
687@node Programs, Hosts and Targets, Porting, Porting
688@section Adding Configure To New Programs
8f861f08 689
f3b7efd5
RP
690If you are writing a new program, you probably shouldn't worry about
691porting issues or configure until it is running reasonably on some host.
692Then refer back to this section.
ce947b9d 693
f3b7efd5 694If the program in question currently has a configure script that meets
d1cde16a 695the criteria set out by @cite{standards.text}, please do not add Cygnus
f3b7efd5
RP
696configure. It should be possible to add this program without change to
697a Cygnus configure style source tree.
ce947b9d 698
f3b7efd5 699If the program is not target dependent, please consider using
d1cde16a
RP
700@code{autoconf} instead of Cygnus configure. @code{autoconf} will
701be available soon from the @sc{fsf}.
702
e59aa15a 703To add Cygnus configure to an existing program, do the following:
8f861f08 704
f3b7efd5 705@table @asis
e59aa15a 706@item Make sure the Makefile conforms to @sc{gnu} standard
f3b7efd5
RP
707The coding standard for @sc{gnu} Makefiles is described in
708@cite{standards.text}.
8f861f08 709
f3b7efd5 710@item Add Cygnus extensions to the Makefile
e59aa15a 711These are described in @ref{Makefile Extensions}.
f3b7efd5
RP
712
713@item Move host support from Makefile to fragments
714This usually involves finding sections of the Makefile that say things
715like ``uncomment these lines for host foo'' and moving them to a new
e59aa15a
RP
716file called @file{./config/mh-foo}. For more information, see @ref{Hosts
717and Targets}.
87081339
RP
718
719@item Choose defaults
720If the program has compile time options that determine the way the
721program should behave, chose reasonable defaults and make these Makefile
722variables. Be sure the variables are assigned their default values
e59aa15a
RP
723before the @code{####} line so that site specific Makefile fragments can
724override them (@pxref{Makefile Extensions,,Extensions to the @sc{gnu}
725coding standards}).
f3b7efd5
RP
726
727@item Locate configuration files
728If there is configuration information in header files or source files,
729separate it in such a way that the files have a generic name. Then move
87081339
RP
730the specific instances of those files into the @file{./config}
731directory.
f3b7efd5
RP
732
733@item Separate host and target information
e59aa15a
RP
734Some programs already have this information separated. If yours does
735not, you will need to separate these two kinds of configuration
736information. @dfn{Host specific} information is the information needed to
737compile the program. @dfn{Target specific} information is information on the
f3b7efd5
RP
738format of data files that the program will read or write. This
739information should live in separate files in the @file{./config}
740directory with names that reflect the configuration for which they are
741intended.
742
743At this point you might skip this step and simply move on. If you do,
744you should end up with a program that can be configured only to build
745native tools, that is, tools for which the host system is also the
746target system. Later, you could attempt to build a cross tool and
747separate out the target specific information by figuring out what went
748wrong. This is often simpler than combing through all of the source
749code.
750
e59aa15a 751@item Write @code{configure.in}
f3b7efd5
RP
752Usually this involves writing shell script fragments to map from
753canonical configuration names into the names of the configuration files.
754These files will then be linked at configure time from the specific
755instances of those files in @file{./config} to file in the build
d1cde16a
RP
756directory with more generic names. (see also @ref{Build Directories}).
757The format of configure.in is described in @ref{configure.in}.
f3b7efd5 758
e59aa15a 759@item Rename @file{Makefile} to @file{Makefile.in}
f3b7efd5
RP
760@end table
761
e59aa15a
RP
762At this point you should have a program that can be configured using
763Cygnus @code{configure}.
f3b7efd5 764
87081339
RP
765@node Hosts and Targets, Sites, Programs, Porting
766@section Adding hosts and targets
767
e59aa15a 768To add a host or target to a program that already uses Cygnus
87081339
RP
769configure, do the following.
770
771@itemize @bullet
772
773@item
774Make sure the new configuration name is represented in
775@file{config.sub}. If not, add it. For more details, see the comments
776in the shell script @file{config.sub}.
777
778@item
779If you are adding a host configuration, look in @file{configure.in}, in
780the per-host section. Make sure that your configuration name is
781represented in the mapping from host configuration names to
d1cde16a 782configuration files. If not, add it. Also see @ref{configure.in}.
87081339
RP
783
784@item
785If you are adding a target configuration, look in @file{configure.in},
786in the per-target section. Make sure that your configuration name is
787represented in the mapping from target configuration names to
d1cde16a 788configuration files. If not, add it. Also see @ref{configure.in}.
87081339
RP
789
790@item
e59aa15a
RP
791Look in @file{configure.in} for the variables @samp{files},
792@samp{links}, @samp{host_makefile_frag}, and
793@samp{target_makefile_frag}. The values assigned to these variables are
bcdbe02f
RP
794the names of the configuration files, relative to @code{srcdir} that the
795program uses. Make sure that copies of the files exist for your host.
796If not, create them. See also @ref{Configure Variables}.
87081339
RP
797@end itemize
798
799This should be enough to configure for a new host or target
e59aa15a
RP
800configuration name. Getting the program to compile and run properly
801remains the hard work of the port.
f3b7efd5 802
87081339
RP
803@node Sites, , Hosts and Targets, Porting
804@section Adding site info
f3b7efd5 805
87081339
RP
806If some of the Makefile defaults are not right for your site, you can
807build site specific Makefile fragments. To do this, do the following.
f3b7efd5 808
87081339 809@itemize @bullet
f3b7efd5 810
87081339
RP
811@item
812Choose a name for your site. It must be less than eleven characters for
813now.
814
815@item
e59aa15a 816If the program source does not have a @file{./config} directory, create it.
87081339
RP
817
818@item
819Create a file called @file{./config/ms-@var{site}} where @var{site} is
e59aa15a
RP
820the name of your site. In it, set whatever Makefile variables you need
821to override to match your site's conventions.
87081339
RP
822
823@item
824Configure the program with:
f3b7efd5 825
87081339
RP
826@example
827configure @dots{} +site=@var{site}
828@end example
829
830@end itemize
e59aa15a 831
f3b7efd5
RP
832@node Reference, Known Bugs, Porting, top
833@chapter Gory details described
834
835@cindex Backends
836Here we describe the backend support.
8f861f08
RP
837
838@menu
f3b7efd5
RP
839* Makefile Extensions:: Extensions to the @sc{gnu} coding standards
840* configure.in:: The format of the configure.in file
841* config.status:: config.status
842* Makefile Fragments:: Makefile Fragments
8f861f08
RP
843@end menu
844
f3b7efd5
RP
845@node Makefile Extensions, configure.in, Reference, Reference
846@section Extensions to the @sc{gnu} coding standards
8f861f08 847
f3b7efd5
RP
848@cindex Makefile extensions
849@cindex Cygnus extensions
850
851The following additions to the @sc{gnu} coding standards are required
852for Cygnus configure to work properly.
8f861f08
RP
853
854@itemize @bullet
f3b7efd5
RP
855@item
856The Makefile must contain exactly one line starting with @code{####}.
857This line should follow any default macro definitions but precede any
858rules. Host, target, and site specific Makefile fragments will be
859inserted immediately after this line. If the line is missing, the
860fragments will not be inserted.
8f861f08
RP
861@end itemize
862
f3b7efd5 863Cygnus adds the following targets to our Makefiles. Their existence is
e59aa15a 864not required for Cygnus configure, but they are documented here for
f3b7efd5 865completeness.
8f861f08 866
f3b7efd5 867@table @code
e59aa15a 868@kindex info
f3b7efd5
RP
869@item info
870Build all info files from texinfo source.
871
e59aa15a 872@kindex install-info
f3b7efd5
RP
873@item install-info
874Install all info files.
875
e59aa15a 876@kindex clean-info
f3b7efd5
RP
877@item clean-info
878Remove all info files and any intermediate files that can be generated
879from texinfo source.
880
e59aa15a 881@kindex stage1
f3b7efd5 882@item stage1
e59aa15a
RP
883@kindex stage2
884@itemx stage2
885@kindex stage3
886@itemx stage3
887@kindex stage4
888@itemx stage4
889@kindex de-stage1
890@itemx de-stage1
891@kindex de-stage2
892@itemx de-stage2
893@kindex de-stage3
894@itemx de-stage3
895@kindex de-stage4
896@itemx de-stage4
897@kindex bootstrap
898@itemx bootstrap
899@kindex comparison
900@itemx comparison
901@kindex Makefile
902@itemx Makefile
f3b7efd5 903These targets are in transition and may be removed shortly.
f3b7efd5
RP
904@end table
905
906In addition, the following Makefile targets have revised semantics:
907
908@table @code
e59aa15a 909@kindex install
f3b7efd5
RP
910@item install
911Should @emph{not} depend on the target @code{all}. If the program is
e59aa15a
RP
912not already built, @code{make install} should fail. This allows you
913to install programs even when @code{make} would otherwise determine
f3b7efd5
RP
914them to be out of date. This can happen when the result of a @code{make
915all} is transported via tape to another machine for installation as
916well as in a number of other cases.
917
e59aa15a 918@kindex clean
f3b7efd5
RP
919@item clean
920Should remove any file that can be regenerated by the Makefile,
921excepting only the Makefile itself, and any links created by configure.
922That is, @code{make all clean} should return all directories to their
923original condition. If this is not done, then:
8f861f08 924
f3b7efd5
RP
925@example
926configure @var{host1} ; make all clean ; configure @var{host2} ; make all
8f861f08
RP
927@end example
928
f3b7efd5
RP
929@noindent
930will fail because of intermediate files intended for @var{host1}.
f3b7efd5
RP
931@end table
932
e59aa15a
RP
933Cygnus adds the following macros to all @file{Makefile.in} files, but
934you are not required to use them to run Cygnus configure.
f3b7efd5
RP
935
936@table @code
e59aa15a 937@kindex docdir
f3b7efd5
RP
938@item docdir
939The directory in which to install any documentation that is not either a
940man page or an info file. For man pages, see mandir, for info, see
941infodir.
942
e59aa15a 943@kindex includedir
f3b7efd5
RP
944@item includedir
945The directory in which to install any headers files that should be made
946available to users. This is distinct from the @code{gcc} include
947directory which is intended for @code{gcc} only. Files in
948@code{includedir} may be used by @code{cc} as well.
f3b7efd5
RP
949@end table
950
e59aa15a
RP
951In addition, the following macros have revised semantics. Most of them
952describe installation directories; see also @ref{Install Details,,Full
953description of all installation subdirectories}.
f3b7efd5
RP
954
955@table @code
956
e59aa15a 957@kindex manext
f3b7efd5 958@item manext
e59aa15a 959is not used. The intended usage is not clear. For example, if you have a
f3b7efd5
RP
960@file{foo.man} and a @file{bar.man}, and @file{foo.man} is destined for
961@file{/usr/local/lib/man/man1/foo.1} while @file{bar.man} is destined
e59aa15a
RP
962for @file{/usr/local/lib/man/man5/bar.5}, then what is the desired value
963of @code{manext}?
f3b7efd5 964
e59aa15a 965@kindex datadir
f3b7efd5
RP
966@item datadir
967is used for @emph{all} host independent files. This makes it possible
e59aa15a
RP
968to share host independent files across multiple hosts without resorting
969to symbolic links or to multiple mount points. This also makes it possible
f3b7efd5
RP
970build an install tree that contains multiple host binaries, write
971the binaries to tape, and extract any of the hosts without extracting
972the others.
973
e59aa15a 974@kindex mandir
f3b7efd5 975@item mandir
e59aa15a
RP
976The default path for @code{mandir} depends on @code{datadir}, since man
977pages are host independent.
f3b7efd5 978
e59aa15a 979@kindex infodir
f3b7efd5 980@item infodir
e59aa15a
RP
981The default path for @code{infodir} depends on @code{datadir}, since
982info files are host independent.
f3b7efd5 983
e59aa15a 984@kindex BISON
f3b7efd5 985@item BISON
e59aa15a 986is assumed to have a @code{yacc} calling convention. To use
f3b7efd5 987@code{bison}, use @code{BISON=bison -y}.
f3b7efd5
RP
988@end table
989
e59aa15a 990Cygnus Makefiles also conform to one additional restriction:
8f861f08
RP
991
992@itemize @bullet
f3b7efd5
RP
993@item
994When libraries are installed, the line containing the call to
995@code{INSTALL_DATA} should always be followed by a line containing a
87081339 996call to @code{RANLIB} on the installed library. This is to accomodate
e59aa15a
RP
997systems that use @code{ranlib}. Systems that do not use @code{ranlib}
998can set @code{RANLIB} to @code{echo} in a host specific Makefile
999fragment.
8f861f08
RP
1000@end itemize
1001
f3b7efd5 1002@node configure.in, config.status, Makefile Extensions, Reference
e59aa15a
RP
1003@section The format of the @file{configure.in} file
1004@kindex configure.in
1005
e59aa15a
RP
1006A @file{configure.in} file for Cygnus configure consists of a
1007@dfn{per-invocation} section, followed by a @dfn{per-host} section,
1008followed by a @dfn{per-target} section, optionally followed by a
1009@dfn{post-target} section. Each section is a shell script fragment sourced by
1010configure at the appropriate time. The interface between configure and
1011the shell fragments is through a set of shell variables. All sections
1012are sourced in the build directory.
1013
1014@cindex Per-invocation section
1015The beginning of the @file{configure.in} file begins the per-invocation
1016section.
8f861f08 1017
87081339 1018@cindex Per-host section
f3b7efd5
RP
1019A line beginning with @code{# Per-host:} begins the per-host section.
1020
87081339 1021@cindex Per-target section
f3b7efd5
RP
1022A line beginning with @code{# Per-target:} begins the per-target
1023section.
1024
87081339
RP
1025@cindex Post-target section
1026If it exists, the post-target section begins with @code{# Per-target:}.
f3b7efd5
RP
1027
1028@menu
1029* Minimal:: A minimal configure.in
1030* Configure Variables:: Variables available to configure.in
e59aa15a
RP
1031* Declarations:: For each invocation
1032* Per-host:: For each host
1033* Per-target:: For each target
f3b7efd5
RP
1034* Post-target:: After each target
1035* Example:: An example configure.in
1036@end menu
1037
1038@node Minimal, Configure Variables, configure.in, configure.in
e59aa15a 1039@subsection A minimal @file{configure.in}
f3b7efd5 1040
e59aa15a 1041@cindex Minimal @file{configure.in} example
f3b7efd5
RP
1042A minimal @file{configure.in} consists of four lines.
1043
1044@example
1045srctrigger=foo.c
1046srcname="source for the foo program"
1047# Per-host:
1048# Per-target:
1049@end example
1050
e59aa15a
RP
1051The @samp{Per-host} and @samp{Per-target} lines divide the file into the
1052three required sections. The @samp{srctrigger} line names a file.
1053@code{configure} checks to see that this file exists in the source
1054directory before configuring. If the @samp{srctrigger} file does not
1055exist, @code{configure} uses the value of @samp{srcname} to print an
1056error message about not finding the source.
f3b7efd5 1057
87081339
RP
1058This particular example uses no links, and only the default host,
1059target, and site specific Makefile fragments if they exist.
f3b7efd5
RP
1060
1061@node Configure Variables, Declarations, Minimal, configure.in
1062@subsection Variables available to configure.in
1063
e59aa15a 1064@cindex @file{configure.in} interface
f3b7efd5 1065
e59aa15a
RP
1066The following variables pass information between the standard parts of
1067@code{configure} and the shell-script fragments in @file{configure.in}:
f3b7efd5
RP
1068
1069@defvar{srctrigger}
1070Contains the name of a source file that is expected to live in the
e59aa15a
RP
1071source directory. You must usually set this in the per-invocation
1072section of @file{configure.in}. Configure tests to see that this file
1073exists. If the file does not exist, configure prints an error message.
1074This is used as a sanity check that configure.in matches the source
1075directory.
f3b7efd5
RP
1076@end defvar
1077
1078@defvar{srcname}
e59aa15a
RP
1079Contains the name of the source collection contained in the source
1080directory. You must usually set this in the per-invocation section of
1081@file{configure.in}. If the file named in @code{srctrigger} does not
1082exist, configure uses the value of this variable when it prints the
1083error message.
f3b7efd5
RP
1084@end defvar
1085
1086@defvar{configdirs}
e59aa15a
RP
1087Contains the names of any subdirectories where @code{configure} should
1088recur. You must usually set this in the per-invocation section of
f3b7efd5
RP
1089@file{configure.in}. If @file{Makefile.in} contains a line starting
1090with @code{SUBDIRS =}, then it will be replaced with an assignment to
1091@code{SUBDIRS} using the value of @code{configdirs}. This can be used
1092to determine which directories to configure and build depending on the
1093host and target configurations.
f8f3c853
RP
1094@c Most other matching makefile/config vars use the same name. Why not
1095@c this? (FIXME).
f3b7efd5
RP
1096@end defvar
1097
f3b7efd5 1098@defvar{target_dependent}
e59aa15a
RP
1099NOTE: support for multiple targets is currently suspended.
1100@*
f3b7efd5
RP
1101If this variable is not empty and @code{-subdirs} is in effect then
1102configure will create separate build directories for each target. This
1103is usually set in the declarations section of @file{configure.in}. The
e59aa15a
RP
1104default is to assume that a directory is target independent, and to create
1105only one real directory with symlinks from the other names. This means that
f3b7efd5
RP
1106a target independent directory will be built exactly once regardless of
1107how many targets are being built.
1108@end defvar
8f861f08
RP
1109
1110@defvar{host}
f8f3c853
RP
1111Contains the name that the user entered for the host. Since many things
1112that the user could enter would map to the same output from
1113@code{config.sub}, this variable is innappropriate to use for picking
1114available configurations. For that, use @code{host_cpu},
1115@code{host_vendor}, and/or @code{host_os}. This variable is useful,
1116however, for error messages.
8f861f08
RP
1117@end defvar
1118
1119@defvar{host_cpu}
1120Contains the first element of the canonical triple representing the host
f3b7efd5 1121as returned by @file{config.sub}. This is occasionally used to
8f861f08
RP
1122distinguish between minor variations of a particular vendor's operating
1123system and sometimes to determine variations in binary format between
1124the host and the target.
1125@end defvar
1126
1127@defvar{host_vendor}
1128Contains the second element of the canonical triple representing the
f3b7efd5 1129host as returned by @file{config.sub}. This is usually used to
8f861f08
RP
1130distinguish betwen the numerous variations between @emph{common}
1131operating systems.
e59aa15a
RP
1132@c "@emph{common} OS" doesn't convey much to me. Is this meant to cover
1133@c cases like Unix, widespread but with many variations?
8f861f08
RP
1134@end defvar
1135
1136@defvar{host_os}
1137Contains the the third element of the canonical triple representing the
f3b7efd5 1138host as returned by @file{config.sub}.
8f861f08
RP
1139@end defvar
1140
1141@defvar{target}
d1cde16a 1142Contains the name that the user entered for the target. Since
f3b7efd5
RP
1143many things that the user could enter would map to the same canonical
1144triple, this variable is innappropriate to use for picking available
8f861f08
RP
1145configurations. For that, use @code{target_cpu}, @code{target_vendor},
1146and/or @code{target_os}. This variable is useful, however, for error
1147messages.
1148@end defvar
1149
1150@defvar{target_cpu}
1151Contains the first element of the canonical triple representing the
f3b7efd5 1152target as returned by @file{config.sub}. This is used heavily by
8f861f08
RP
1153programs involved in building programs, like the compiler, assembler,
1154linker, etc. Most programs will not need the @code{target} variables at
1155all, but this one could conceivably be used to build a program, for
1156instance, that operated on binary data files whose byte order or
e59aa15a 1157alignment differ from the system where the program is running.
8f861f08
RP
1158@end defvar
1159
1160@defvar{target_vendor}
1161Contains the second element of the canonical triple representing the
f3b7efd5 1162target as returned by @file{config.sub}. This is usually used to
8f861f08
RP
1163distinguish betwen the numerous variations between @emph{common}
1164operating systems or object file formats. Sometimes it is used to
87081339 1165switch between different flavors of user interfaces.
e59aa15a 1166@c above query re "@emph{common} OS" applies here too
8f861f08
RP
1167@end defvar
1168
1169@defvar{target_os}
1170Contains the the third element of the canonical triple representing the
f3b7efd5 1171target as returned by @file{config.sub}. This variable is used by
8f861f08
RP
1172development tools to distinguish between subtle variations in object
1173file formats that some vendors use across operating system releases. It
1174might also be use to decide which libraries to build or what user
1175interface the tool should provide.
1176@end defvar
1177
1178@defvar{nfp}
1179Is set to @code{true} if the user invoked configure with the @code{-nfp}
1180command line option, otherwise it is empty. This is a request to target
87081339
RP
1181machines with @emph{no floating point} unit, even if the targets
1182ordinarily have floating point units available. This option has no
f3b7efd5 1183negation.
8f861f08
RP
1184@end defvar
1185
1186@defvar{gas}
1187Is set to @code{true} if the user invoked configure with the @code{-gas}
1188command line option, otherwise it is empty. This is a request to assume
e59aa15a
RP
1189that all target machines have @sc{gas} available even if they ordinarily do
1190not. The converse option @samp{-no-gas} is not available.
8f861f08
RP
1191@end defvar
1192
1193@defvar{x}
1194Is set to @code{true} if the user invoked configure with the @code{-x}
1195command line option, otherwise it is empty. This is a request to assume
87081339
RP
1196that @sc{mit x11} compatible headers files and libraries are available
1197on all hosts, regardless of what is normally available on them.
8f861f08
RP
1198@end defvar
1199
1200@defvar{srcdir}
e59aa15a
RP
1201NOTE: support for @code{-subdirs} is at least temporarily suspended.
1202@*
8f861f08 1203Is set to the name of the directory containing the source for this
f3b7efd5
RP
1204program. This will be different from @file{.} if the user has specified
1205either the @code{-srcdir=} or the @code{-subdirs} options. Note that
1206@code{srcdir} is not necessarily an absolute path.
8f861f08
RP
1207@end defvar
1208
1209@defvar{host_makefile_frag}
bcdbe02f
RP
1210If set by @file{configure.in}, this variable should be the name a file,
1211relative to @code{srcdir} to be included in the resulting Makefile. If
1212the named file does not exist, @code{configure} will print a warning
1213message. This variable is not set by @code{configure}.
8f861f08
RP
1214@end defvar
1215
1216@defvar{target_makefile_frag}
bcdbe02f
RP
1217If set by @file{configure.in}, this variable should be the name of a
1218file, relative to @code{srcdir}, to be included in the resulting
1219Makefile. If the named file does not exist, @code{configure} will print
1220a warning message. This variable is not set by @code{configure}.
8f861f08
RP
1221@end defvar
1222
e59aa15a 1223@defvar{site_makefile_frag}
8f861f08 1224Is set to a file name representing to the default Makefile fragment for
e59aa15a 1225this host. It may be set in @file{configure.in} to override this
8f861f08 1226default. Normally @code{site_makefile_frag} is empty, but will have a
e59aa15a
RP
1227value if the user specified @code{-site=} on the command line. It is
1228probably not a good idea to override this variable from
1229@file{configure.in}, since that may defeat the @code{configure} user's
1230intentions.
8f861f08
RP
1231@end defvar
1232
1233@defvar{Makefile}
1234Is set to the name of the generated @file{Makefile}. Normally this
1235value is precisely @file{Makefile} but some programs may want something
1236else.
1237@end defvar
1238
1239@defvar{removing}
1240Is normally empty but will be set to some non-empty value if the user
1241specified @code{-rm} on the command line. That is, if @code{removing}
1242is non-empty, then configure is @emph{removing} a configuration rather
1243than creating one.
1244@end defvar
1245
1246@defvar{files}
1247If this variable is non-empty following the @code{per-target:} section,
e59aa15a
RP
1248then each word in its value will be the target of a symbolic link named
1249in the corresponding word from the @code{links} variable.
8f861f08
RP
1250@end defvar
1251
1252@defvar{links}
1253If the @code{files} variable is non-empty following the
e59aa15a
RP
1254@code{per-target:} section, then @code{configure} creates symbolic links
1255with the first word of @code{links} pointing to the first word of
1256@code{files}, the second word of @code{links} pointing to the second
1257word of @code{files}, and so on.
8f861f08
RP
1258@end defvar
1259
f3b7efd5 1260@node Declarations, Per-host, Configure Variables, configure.in
e59aa15a 1261@subsection For each invocation
ce947b9d 1262
f3b7efd5 1263@cindex Declarations section
ce947b9d 1264
e59aa15a
RP
1265@code{configure} sources the entire shell script fragment from the start
1266of @file{configure.in} up to a line beginning with @samp{# Per-host:}
1267immediately after parsing command line arguments. The variables
1268@code{srctrigger} and @code{srcname} @emph{must} be set here.
ce947b9d 1269
e59aa15a
RP
1270You might also want to set the variables @code{configdirs} or
1271@code{target_dependent} here.
1272@*
1273FIXME-soon. target_dependent isn't useful without multiple targets.
ce947b9d 1274
f3b7efd5 1275@node Per-host, Per-target, Declarations, configure.in
e59aa15a
RP
1276@subsection For each host
1277@cindex per-host section
1278@cindex host shell-script fragment
ce947b9d 1279
e59aa15a
RP
1280The per-host section of @file{configure.in} starts with the line that begins
1281with @samp{# Per-host:} and ends before a line beginning with
1282@samp{# Per-target:}. @code{configure} sources the per-host section once for
f3b7efd5 1283each host.
ce947b9d 1284
f3b7efd5 1285This section usually contains a big case statement using the variables
e59aa15a
RP
1286@samp{host_cpu}, @samp{host_vendor}, and @samp{host_os} to determine
1287appropriate values for @samp{host_makefile_frag} and @samp{files},
1288although @samp{files} is not usually set here. Usually, it is set
f3b7efd5
RP
1289at the end of the per-target section after determining the names of the
1290target specific configuration files.
8f861f08 1291
f3b7efd5 1292@node Per-target, Post-target, Per-host, configure.in
e59aa15a
RP
1293@subsection For each target
1294@cindex per-target section
1295@cindex target shell-script fragment
1296
1297The per-target section of @file{configure.in} starts with the line that
1298begins with @samp{# Per-target:} and ends before the line that begins
1299with @samp{# Post-target:}, if there is such a line. Otherwise the
1300per-target section extends to the end of the file. @code{configure} sources
1301the per-target section once for each target before building any files,
f3b7efd5 1302directories, or links.
ce947b9d 1303
e59aa15a
RP
1304This section usually contains a big case statement using the variables called
1305@samp{target_cpu}, @samp{target_vendor}, and @samp{target_os} to determine
1306appropriate values for @samp{target_makefile_frag} and @samp{files}.
f3b7efd5
RP
1307The last lines in the per-target section normally set the variables
1308@code{files} and @code{links}.
ce947b9d 1309
f3b7efd5
RP
1310@node Post-target, Example, Per-target, configure.in
1311@subsection After each target
ce947b9d 1312
f3b7efd5
RP
1313The post-target section is optional. If it exists, the post-target
1314section starts with a line beginning with @code{# Post-target:} and
e59aa15a 1315extends to the end of the file. If it exists, @code{configure} sources this
f3b7efd5
RP
1316section once for each target after building all files, directories, or
1317links.
ce947b9d 1318
e59aa15a
RP
1319This section is seldom needed, but you can use it to edit the Makefile
1320generated by @code{configure}.
ce947b9d 1321
f3b7efd5 1322@node Example, , Post-target, configure.in
e59aa15a
RP
1323@subsection An example @file{configure.in}
1324@cindex example @file{configure.in}
1325@cindex sample @file{configure.in}
1326@cindex Bison @file{configure.in}
8f861f08 1327
e59aa15a 1328Here is a small example of a @file{configure.in} file.
8f861f08 1329
f3b7efd5 1330@example
e59aa15a
RP
1331# This file is a collection of shell script fragments used to tailor
1332# a template configure script as appropriate for this directory.
f8f3c853 1333# For more information, see configure.texi.
8f861f08 1334
f3b7efd5
RP
1335configdirs=
1336srctrigger=warshall.c
1337srcname="bison"
1338
1339# per-host:
87081339 1340case "$@{host_os@}" in
f3b7efd5
RP
1341m88kbcs)
1342 host_makefile_frag=config/mh-delta88
1343 ;;
1344esac
ce947b9d 1345
f3b7efd5 1346# per-target:
ce947b9d 1347
f3b7efd5
RP
1348files="bison_in.hairy"
1349links="bison.hairy"
ce947b9d 1350
f3b7efd5
RP
1351# post-target:
1352@end example
ce947b9d 1353
f3b7efd5 1354@node config.status, Makefile Fragments, configure.in, Reference
e59aa15a 1355@section @code{config.status}
ce947b9d 1356
e59aa15a 1357@kindex config.status
ce947b9d 1358
87081339 1359The final step in configuring a directory is to create an executable
e59aa15a
RP
1360shell script, @file{config.status}. The main purpose of this file
1361is to allow the Makefile for the current directory to rebuild itself, if
1362necessary. For this reason, @file{config.status} uses the
1363@samp{-norecursion} option to @code{configure}, and is therefore
1364probably inappropriate for reconfiguring a tree of source code.
ce947b9d 1365
f3b7efd5
RP
1366@node Makefile Fragments, , config.status, Reference
1367@section Makefile Fragments
ce947b9d 1368
f3b7efd5 1369@cindex Makefile fragments
ce947b9d 1370
e59aa15a
RP
1371Cygnus @code{configure} uses three types of Makefile fragments. In a
1372generated Makefile they appear in the order target fragment, host
1373fragment, and site fragment. This allows host fragments to override
1374target fragments, and site fragments to override both.
87081339
RP
1375
1376Host specific Makefile fragments conventionally reside in the
1377@file{./config} directory with names of the form
1378@file{mh-@var{host}}. They are used for hosts that require
1379odd options to the standard compiler and for compile time options based
1380on the host configuration.
1381
1382Target specific Makefile fragments conventionally reside in the
1383@file{./config} directory with names of the form @file{mt-@var{target}}.
1384They are used for target dependent compile time options.
1385
1386Site specific Makefile fragments conventionally reside in the
1387@file{./config} directory with names of the form @file{ms-@var{site}}.
1388They are used to override host and target independent compile time
e59aa15a 1389options. Note that you can also overridde these options on the
87081339 1390@code{make} invocation line.
ce947b9d 1391
f3b7efd5 1392@node Known Bugs, Variables Index, Reference, top
8f861f08
RP
1393@chapter Known Bugs
1394
f3b7efd5
RP
1395@cindex bugs
1396
e59aa15a 1397We know of the following bugs:
8f861f08
RP
1398
1399@itemize @bullet
1400
1401@item
1402There is no way to query about known hosts, known targets, or the
1403porting or testing status of any configuration.
1404
1405@item
1406The negations to the options @code{-gas}, @code{-x}, and @code{-nfp} are
1407not available.
1408
1409@end itemize
1410
f3b7efd5 1411@page
8f861f08 1412@node Variables Index, Concept Index, Known Bugs, top
ce947b9d 1413@appendix Variable Index
8f861f08
RP
1414
1415@printindex vr
1416
f3b7efd5 1417@page
8f861f08 1418@node Concept Index, , Variables Index, top
ce947b9d 1419@appendix Concept Index
8f861f08
RP
1420
1421@printindex cp
8f861f08
RP
1422@contents
1423@bye
1424
1425@c Local Variables:
1426@c fill-column: 79
1427@c outline-regexp: "@chap"
1428@c End:
1429@c (setq outline-regexp "@chapt\\\|@unnum\\\|@setf\\\|@conte\\\|@sectio\\\|@subsect\\\|@itemize\\\|@defvar{")
This page took 0.093192 seconds and 4 git commands to generate.