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