changes from Minh Tran-Le <TRANLE@INTELLICORP.COM> to support i386
[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
bccfae16
JG
145@item Generate @file{.gdbinit} If the source directory contains a
146@file{.gdbinit} file and the build directory is not the same as the
147source directory, a @file{.gdbinit} file is created in the build
148directory. This @file{.gdbinit} file contains @code{dir} commands and
149a @code{source} command, which will cause the @file{.gdbinit} file from
150the source directory to be read by GDB, and will allow GDB to find
151source files in either the source directory or the build directory.
152(see @ref{Command Files, , , gdb, Command Files}.)
d1cde16a
RP
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
442b8598
JG
1009@dfn{post-target} section. Each section is a shell script fragment,
1010which is sourced by the configure shell script at an appropriate time.
1011Values are passed among configure and the shell fragments through a
1012set of shell variables. When each section is being interpreted
1013(sourced) by the shell, the shell's current directory is the build
1014directory, and any files created by the section (or referred to by the
1015section) will be relative to the build directory. To reference files
1016in other places (such as the source directory), prepend a shell
1017variable such as @code{srcdir} to the desired file name.
e59aa15a
RP
1018
1019@cindex Per-invocation section
1020The beginning of the @file{configure.in} file begins the per-invocation
1021section.
8f861f08 1022
87081339 1023@cindex Per-host section
f3b7efd5
RP
1024A line beginning with @code{# Per-host:} begins the per-host section.
1025
87081339 1026@cindex Per-target section
f3b7efd5
RP
1027A line beginning with @code{# Per-target:} begins the per-target
1028section.
1029
87081339
RP
1030@cindex Post-target section
1031If it exists, the post-target section begins with @code{# Per-target:}.
f3b7efd5
RP
1032
1033@menu
1034* Minimal:: A minimal configure.in
1035* Configure Variables:: Variables available to configure.in
e59aa15a
RP
1036* Declarations:: For each invocation
1037* Per-host:: For each host
1038* Per-target:: For each target
f3b7efd5
RP
1039* Post-target:: After each target
1040* Example:: An example configure.in
1041@end menu
1042
1043@node Minimal, Configure Variables, configure.in, configure.in
e59aa15a 1044@subsection A minimal @file{configure.in}
f3b7efd5 1045
e59aa15a 1046@cindex Minimal @file{configure.in} example
f3b7efd5
RP
1047A minimal @file{configure.in} consists of four lines.
1048
1049@example
1050srctrigger=foo.c
1051srcname="source for the foo program"
1052# Per-host:
1053# Per-target:
1054@end example
1055
e59aa15a
RP
1056The @samp{Per-host} and @samp{Per-target} lines divide the file into the
1057three required sections. The @samp{srctrigger} line names a file.
1058@code{configure} checks to see that this file exists in the source
1059directory before configuring. If the @samp{srctrigger} file does not
1060exist, @code{configure} uses the value of @samp{srcname} to print an
1061error message about not finding the source.
f3b7efd5 1062
87081339
RP
1063This particular example uses no links, and only the default host,
1064target, and site specific Makefile fragments if they exist.
f3b7efd5
RP
1065
1066@node Configure Variables, Declarations, Minimal, configure.in
1067@subsection Variables available to configure.in
1068
e59aa15a 1069@cindex @file{configure.in} interface
f3b7efd5 1070
e59aa15a
RP
1071The following variables pass information between the standard parts of
1072@code{configure} and the shell-script fragments in @file{configure.in}:
f3b7efd5
RP
1073
1074@defvar{srctrigger}
1075Contains the name of a source file that is expected to live in the
e59aa15a
RP
1076source directory. You must usually set this in the per-invocation
1077section of @file{configure.in}. Configure tests to see that this file
1078exists. If the file does not exist, configure prints an error message.
1079This is used as a sanity check that configure.in matches the source
1080directory.
f3b7efd5
RP
1081@end defvar
1082
1083@defvar{srcname}
e59aa15a
RP
1084Contains the name of the source collection contained in the source
1085directory. You must usually set this in the per-invocation section of
1086@file{configure.in}. If the file named in @code{srctrigger} does not
1087exist, configure uses the value of this variable when it prints the
1088error message.
f3b7efd5
RP
1089@end defvar
1090
1091@defvar{configdirs}
e59aa15a
RP
1092Contains the names of any subdirectories where @code{configure} should
1093recur. You must usually set this in the per-invocation section of
f3b7efd5
RP
1094@file{configure.in}. If @file{Makefile.in} contains a line starting
1095with @code{SUBDIRS =}, then it will be replaced with an assignment to
1096@code{SUBDIRS} using the value of @code{configdirs}. This can be used
1097to determine which directories to configure and build depending on the
1098host and target configurations.
f8f3c853
RP
1099@c Most other matching makefile/config vars use the same name. Why not
1100@c this? (FIXME).
f3b7efd5
RP
1101@end defvar
1102
f3b7efd5 1103@defvar{target_dependent}
e59aa15a
RP
1104NOTE: support for multiple targets is currently suspended.
1105@*
f3b7efd5
RP
1106If this variable is not empty and @code{-subdirs} is in effect then
1107configure will create separate build directories for each target. This
1108is usually set in the declarations section of @file{configure.in}. The
e59aa15a
RP
1109default is to assume that a directory is target independent, and to create
1110only one real directory with symlinks from the other names. This means that
f3b7efd5
RP
1111a target independent directory will be built exactly once regardless of
1112how many targets are being built.
1113@end defvar
8f861f08
RP
1114
1115@defvar{host}
f8f3c853
RP
1116Contains the name that the user entered for the host. Since many things
1117that the user could enter would map to the same output from
1118@code{config.sub}, this variable is innappropriate to use for picking
1119available configurations. For that, use @code{host_cpu},
1120@code{host_vendor}, and/or @code{host_os}. This variable is useful,
1121however, for error messages.
8f861f08
RP
1122@end defvar
1123
1124@defvar{host_cpu}
1125Contains the first element of the canonical triple representing the host
f3b7efd5 1126as returned by @file{config.sub}. This is occasionally used to
8f861f08
RP
1127distinguish between minor variations of a particular vendor's operating
1128system and sometimes to determine variations in binary format between
1129the host and the target.
1130@end defvar
1131
1132@defvar{host_vendor}
1133Contains the second element of the canonical triple representing the
f3b7efd5 1134host as returned by @file{config.sub}. This is usually used to
8f861f08
RP
1135distinguish betwen the numerous variations between @emph{common}
1136operating systems.
e59aa15a
RP
1137@c "@emph{common} OS" doesn't convey much to me. Is this meant to cover
1138@c cases like Unix, widespread but with many variations?
8f861f08
RP
1139@end defvar
1140
1141@defvar{host_os}
1142Contains the the third element of the canonical triple representing the
f3b7efd5 1143host as returned by @file{config.sub}.
8f861f08
RP
1144@end defvar
1145
1146@defvar{target}
d1cde16a 1147Contains the name that the user entered for the target. Since
f3b7efd5
RP
1148many things that the user could enter would map to the same canonical
1149triple, this variable is innappropriate to use for picking available
8f861f08
RP
1150configurations. For that, use @code{target_cpu}, @code{target_vendor},
1151and/or @code{target_os}. This variable is useful, however, for error
1152messages.
1153@end defvar
1154
1155@defvar{target_cpu}
1156Contains the first element of the canonical triple representing the
f3b7efd5 1157target as returned by @file{config.sub}. This is used heavily by
8f861f08
RP
1158programs involved in building programs, like the compiler, assembler,
1159linker, etc. Most programs will not need the @code{target} variables at
1160all, but this one could conceivably be used to build a program, for
1161instance, that operated on binary data files whose byte order or
e59aa15a 1162alignment differ from the system where the program is running.
8f861f08
RP
1163@end defvar
1164
1165@defvar{target_vendor}
1166Contains the second element of the canonical triple representing the
f3b7efd5 1167target as returned by @file{config.sub}. This is usually used to
8f861f08
RP
1168distinguish betwen the numerous variations between @emph{common}
1169operating systems or object file formats. Sometimes it is used to
87081339 1170switch between different flavors of user interfaces.
e59aa15a 1171@c above query re "@emph{common} OS" applies here too
8f861f08
RP
1172@end defvar
1173
1174@defvar{target_os}
1175Contains the the third element of the canonical triple representing the
f3b7efd5 1176target as returned by @file{config.sub}. This variable is used by
8f861f08
RP
1177development tools to distinguish between subtle variations in object
1178file formats that some vendors use across operating system releases. It
1179might also be use to decide which libraries to build or what user
1180interface the tool should provide.
1181@end defvar
1182
1183@defvar{nfp}
1184Is set to @code{true} if the user invoked configure with the @code{-nfp}
1185command line option, otherwise it is empty. This is a request to target
87081339
RP
1186machines with @emph{no floating point} unit, even if the targets
1187ordinarily have floating point units available. This option has no
f3b7efd5 1188negation.
8f861f08
RP
1189@end defvar
1190
1191@defvar{gas}
1192Is set to @code{true} if the user invoked configure with the @code{-gas}
1193command line option, otherwise it is empty. This is a request to assume
e59aa15a
RP
1194that all target machines have @sc{gas} available even if they ordinarily do
1195not. The converse option @samp{-no-gas} is not available.
8f861f08
RP
1196@end defvar
1197
1198@defvar{x}
1199Is set to @code{true} if the user invoked configure with the @code{-x}
1200command line option, otherwise it is empty. This is a request to assume
87081339
RP
1201that @sc{mit x11} compatible headers files and libraries are available
1202on all hosts, regardless of what is normally available on them.
8f861f08
RP
1203@end defvar
1204
1205@defvar{srcdir}
e59aa15a
RP
1206NOTE: support for @code{-subdirs} is at least temporarily suspended.
1207@*
8f861f08 1208Is set to the name of the directory containing the source for this
f3b7efd5
RP
1209program. This will be different from @file{.} if the user has specified
1210either the @code{-srcdir=} or the @code{-subdirs} options. Note that
1211@code{srcdir} is not necessarily an absolute path.
8f861f08
RP
1212@end defvar
1213
1214@defvar{host_makefile_frag}
bcdbe02f
RP
1215If set by @file{configure.in}, this variable should be the name a file,
1216relative to @code{srcdir} to be included in the resulting Makefile. If
1217the named file does not exist, @code{configure} will print a warning
1218message. This variable is not set by @code{configure}.
8f861f08
RP
1219@end defvar
1220
1221@defvar{target_makefile_frag}
bcdbe02f
RP
1222If set by @file{configure.in}, this variable should be the name of a
1223file, relative to @code{srcdir}, to be included in the resulting
1224Makefile. If the named file does not exist, @code{configure} will print
1225a warning message. This variable is not set by @code{configure}.
8f861f08
RP
1226@end defvar
1227
e59aa15a 1228@defvar{site_makefile_frag}
8f861f08 1229Is set to a file name representing to the default Makefile fragment for
e59aa15a 1230this host. It may be set in @file{configure.in} to override this
8f861f08 1231default. Normally @code{site_makefile_frag} is empty, but will have a
e59aa15a
RP
1232value if the user specified @code{-site=} on the command line. It is
1233probably not a good idea to override this variable from
1234@file{configure.in}, since that may defeat the @code{configure} user's
1235intentions.
8f861f08
RP
1236@end defvar
1237
1238@defvar{Makefile}
1239Is set to the name of the generated @file{Makefile}. Normally this
1240value is precisely @file{Makefile} but some programs may want something
1241else.
1242@end defvar
1243
1244@defvar{removing}
1245Is normally empty but will be set to some non-empty value if the user
1246specified @code{-rm} on the command line. That is, if @code{removing}
1247is non-empty, then configure is @emph{removing} a configuration rather
1248than creating one.
1249@end defvar
1250
1251@defvar{files}
1252If this variable is non-empty following the @code{per-target:} section,
e59aa15a
RP
1253then each word in its value will be the target of a symbolic link named
1254in the corresponding word from the @code{links} variable.
8f861f08
RP
1255@end defvar
1256
1257@defvar{links}
1258If the @code{files} variable is non-empty following the
e59aa15a
RP
1259@code{per-target:} section, then @code{configure} creates symbolic links
1260with the first word of @code{links} pointing to the first word of
1261@code{files}, the second word of @code{links} pointing to the second
1262word of @code{files}, and so on.
8f861f08
RP
1263@end defvar
1264
f3b7efd5 1265@node Declarations, Per-host, Configure Variables, configure.in
e59aa15a 1266@subsection For each invocation
ce947b9d 1267
f3b7efd5 1268@cindex Declarations section
ce947b9d 1269
e59aa15a
RP
1270@code{configure} sources the entire shell script fragment from the start
1271of @file{configure.in} up to a line beginning with @samp{# Per-host:}
1272immediately after parsing command line arguments. The variables
1273@code{srctrigger} and @code{srcname} @emph{must} be set here.
ce947b9d 1274
e59aa15a
RP
1275You might also want to set the variables @code{configdirs} or
1276@code{target_dependent} here.
1277@*
1278FIXME-soon. target_dependent isn't useful without multiple targets.
ce947b9d 1279
f3b7efd5 1280@node Per-host, Per-target, Declarations, configure.in
e59aa15a
RP
1281@subsection For each host
1282@cindex per-host section
1283@cindex host shell-script fragment
ce947b9d 1284
e59aa15a
RP
1285The per-host section of @file{configure.in} starts with the line that begins
1286with @samp{# Per-host:} and ends before a line beginning with
1287@samp{# Per-target:}. @code{configure} sources the per-host section once for
f3b7efd5 1288each host.
ce947b9d 1289
f3b7efd5 1290This section usually contains a big case statement using the variables
e59aa15a
RP
1291@samp{host_cpu}, @samp{host_vendor}, and @samp{host_os} to determine
1292appropriate values for @samp{host_makefile_frag} and @samp{files},
1293although @samp{files} is not usually set here. Usually, it is set
f3b7efd5
RP
1294at the end of the per-target section after determining the names of the
1295target specific configuration files.
8f861f08 1296
f3b7efd5 1297@node Per-target, Post-target, Per-host, configure.in
e59aa15a
RP
1298@subsection For each target
1299@cindex per-target section
1300@cindex target shell-script fragment
1301
1302The per-target section of @file{configure.in} starts with the line that
1303begins with @samp{# Per-target:} and ends before the line that begins
1304with @samp{# Post-target:}, if there is such a line. Otherwise the
1305per-target section extends to the end of the file. @code{configure} sources
1306the per-target section once for each target before building any files,
f3b7efd5 1307directories, or links.
ce947b9d 1308
e59aa15a
RP
1309This section usually contains a big case statement using the variables called
1310@samp{target_cpu}, @samp{target_vendor}, and @samp{target_os} to determine
1311appropriate values for @samp{target_makefile_frag} and @samp{files}.
f3b7efd5
RP
1312The last lines in the per-target section normally set the variables
1313@code{files} and @code{links}.
ce947b9d 1314
f3b7efd5
RP
1315@node Post-target, Example, Per-target, configure.in
1316@subsection After each target
ce947b9d 1317
f3b7efd5
RP
1318The post-target section is optional. If it exists, the post-target
1319section starts with a line beginning with @code{# Post-target:} and
e59aa15a 1320extends to the end of the file. If it exists, @code{configure} sources this
f3b7efd5
RP
1321section once for each target after building all files, directories, or
1322links.
ce947b9d 1323
e59aa15a
RP
1324This section is seldom needed, but you can use it to edit the Makefile
1325generated by @code{configure}.
ce947b9d 1326
f3b7efd5 1327@node Example, , Post-target, configure.in
e59aa15a
RP
1328@subsection An example @file{configure.in}
1329@cindex example @file{configure.in}
1330@cindex sample @file{configure.in}
1331@cindex Bison @file{configure.in}
8f861f08 1332
e59aa15a 1333Here is a small example of a @file{configure.in} file.
8f861f08 1334
f3b7efd5 1335@example
e59aa15a
RP
1336# This file is a collection of shell script fragments used to tailor
1337# a template configure script as appropriate for this directory.
f8f3c853 1338# For more information, see configure.texi.
8f861f08 1339
f3b7efd5
RP
1340configdirs=
1341srctrigger=warshall.c
1342srcname="bison"
1343
1344# per-host:
87081339 1345case "$@{host_os@}" in
f3b7efd5
RP
1346m88kbcs)
1347 host_makefile_frag=config/mh-delta88
1348 ;;
1349esac
ce947b9d 1350
f3b7efd5 1351# per-target:
ce947b9d 1352
f3b7efd5
RP
1353files="bison_in.hairy"
1354links="bison.hairy"
ce947b9d 1355
f3b7efd5
RP
1356# post-target:
1357@end example
ce947b9d 1358
f3b7efd5 1359@node config.status, Makefile Fragments, configure.in, Reference
e59aa15a 1360@section @code{config.status}
ce947b9d 1361
e59aa15a 1362@kindex config.status
ce947b9d 1363
87081339 1364The final step in configuring a directory is to create an executable
e59aa15a
RP
1365shell script, @file{config.status}. The main purpose of this file
1366is to allow the Makefile for the current directory to rebuild itself, if
1367necessary. For this reason, @file{config.status} uses the
1368@samp{-norecursion} option to @code{configure}, and is therefore
1369probably inappropriate for reconfiguring a tree of source code.
ce947b9d 1370
f3b7efd5
RP
1371@node Makefile Fragments, , config.status, Reference
1372@section Makefile Fragments
ce947b9d 1373
f3b7efd5 1374@cindex Makefile fragments
ce947b9d 1375
e59aa15a
RP
1376Cygnus @code{configure} uses three types of Makefile fragments. In a
1377generated Makefile they appear in the order target fragment, host
1378fragment, and site fragment. This allows host fragments to override
1379target fragments, and site fragments to override both.
87081339
RP
1380
1381Host specific Makefile fragments conventionally reside in the
1382@file{./config} directory with names of the form
1383@file{mh-@var{host}}. They are used for hosts that require
1384odd options to the standard compiler and for compile time options based
1385on the host configuration.
1386
1387Target specific Makefile fragments conventionally reside in the
1388@file{./config} directory with names of the form @file{mt-@var{target}}.
1389They are used for target dependent compile time options.
1390
1391Site specific Makefile fragments conventionally reside in the
1392@file{./config} directory with names of the form @file{ms-@var{site}}.
1393They are used to override host and target independent compile time
e59aa15a 1394options. Note that you can also overridde these options on the
87081339 1395@code{make} invocation line.
ce947b9d 1396
f3b7efd5 1397@node Known Bugs, Variables Index, Reference, top
8f861f08
RP
1398@chapter Known Bugs
1399
f3b7efd5
RP
1400@cindex bugs
1401
e59aa15a 1402We know of the following bugs:
8f861f08
RP
1403
1404@itemize @bullet
1405
1406@item
1407There is no way to query about known hosts, known targets, or the
1408porting or testing status of any configuration.
1409
1410@item
1411The negations to the options @code{-gas}, @code{-x}, and @code{-nfp} are
1412not available.
1413
1414@end itemize
1415
f3b7efd5 1416@page
8f861f08 1417@node Variables Index, Concept Index, Known Bugs, top
ce947b9d 1418@appendix Variable Index
8f861f08
RP
1419
1420@printindex vr
1421
f3b7efd5 1422@page
8f861f08 1423@node Concept Index, , Variables Index, top
ce947b9d 1424@appendix Concept Index
8f861f08
RP
1425
1426@printindex cp
8f861f08
RP
1427@contents
1428@bye
1429
1430@c Local Variables:
1431@c fill-column: 79
1432@c outline-regexp: "@chap"
1433@c End:
1434@c (setq outline-regexp "@chapt\\\|@unnum\\\|@setf\\\|@conte\\\|@sectio\\\|@subsect\\\|@itemize\\\|@defvar{")
This page took 0.092976 seconds and 4 git commands to generate.