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