personal checkpoint

This commit is contained in:
K. Richard Pixley 1991-12-27 21:12:50 +00:00
parent aab77d5f23
commit 87081339b7

View file

@ -175,7 +175,7 @@ create one.
@item -site=@var{site}
Asks that Makefiles be generated using site specific Makefiles for
@var{site}. (@xref{Makefile Fragments}.)
@var{site}. See also @xref{Sites}.
@item -srcdir=@var{_dir}
Tells @code{configure} that the sources are located in @var{dir}. The
@ -223,7 +223,8 @@ Configure prepares source directories in anticipation of building.
Source cannot be built until it has been configured. The choices
and options available at configuration time generally have valid
defaults, but the defaults do not cover all cases. The choices
available include:
available include install locations, build directories, host, target,
and local conventions.
@menu
* Install Locations:: Where to install things once they are built
@ -289,7 +290,7 @@ Host independent files are installed in subdirectories of
@file{/usr/local/lib}. The actual location is determined by the value
of the @code{configure} variable @code{datadir} which determines
the value of the Makefile variable @code{datadir}. By default, the
value of @code{datadir} is @file{@code{prefix}/lib}. This makes
value of @code{datadir} is @file{@var{prefix}/lib}. This makes
single host installs simple, and simplifies changing the default
location for the install tree, but doesn't allow for multiple hosts to
effectively share host independent files.
@ -323,8 +324,8 @@ independent files will be installed @emph{on top of} the host
independent files installed for @var{host1}. This results in a single
copy of the host independent files suitable for use by both hosts.
NOTE: support for -subdirsa and multiple hosts is at least temporarily
suspended. FIXME-soon
NOTE: support for @code{-subdirs} and multiple hosts is at least
temporarily suspended. FIXME-soon
Previously this was:
@ -352,8 +353,8 @@ value precisely the same way for each invocation of @code{make} or you
risk ending up with a broken installation. This is because many
programs have the locations of other programs or files compiled into
them. If you find yourself overriding any of the variables frequently,
you should consider site dependent Makefile fragments. (See
@xref{Makefile Fragments}.)
you should consider site dependent Makefile fragments. See also
@xref{Sites}.
During @code{make install}, the following standard directories will be
created and populated:
@ -372,7 +373,7 @@ The value of this variable names a directory intended to contain binary
programs that users can run. The default value for @code{bindir}
depends on @code{prefix} so @code{bindir} is normally changed
only indirectly through @code{prefix}. The default value for
@code{bindir} is @file{@code{prefix}/bin}.
@code{bindir} is @file{@var{prefix}/bin}.
@end defvr
@vindex datadir
@ -380,9 +381,9 @@ only indirectly through @code{prefix}. The default value for
The value of this variable names a directory intended to contain host
independent files. The @code{configure} variable, which is used to set
the default value of the Makefile variable, can be set at configure time
using the @code{-datadir=} option to @code{configure}.
(@xref{Invoking}.) The default value for @code{datadir} is
@code{prefix}@file{/lib}.
using the @code{-datadir=} option to @code{configure}. (See also
@xref{Invoking}.) The default value for @code{datadir} is
@file{@var{prefix}/lib}.
@end defvr
@vindex libdir
@ -391,7 +392,7 @@ The value of this variable names a directory intended to hold libraries
and support programs. The default value for @code{libdir}
depends on @code{prefix} so @code{libdir} is normally changed
only indirectly through @code{prefix}. The default value for
@code{libdir} is @code{prefix}@file{/lib}.
@code{libdir} is @file{@var{prefix}/lib}.
@end defvr
@vindex mandir
@ -400,7 +401,7 @@ The value of this variable names a directory intended to hold @emph{man}
format man pages. The default value for @code{mandir}
depends on @code{prefix} so @code{mandir} is normally changed
only indirectly through @code{prefix}. The default value for
@code{mandir} is @code{datadir}@file{/man}.
@code{mandir} is @file{@var{datadir}/man}.
@end defvr
@vindex man@var{N}dir
@ -413,7 +414,7 @@ holds the man page describing the @code{rcs} data file format, called
@file{rcsfile.5}. The default value for @code{man@var{N}dir}
depends on @code{prefix} so @code{man@var{N}dir} is normally changed
only indirectly through @code{prefix}. The default value for
@code{man@var{N}dir} is @code{mandir}@file{/man@var{N}}.
@code{man@var{N}dir} is @file{@var{mandir}/man@var{N}}.
@end defvr
@vindex manext
@ -430,7 +431,7 @@ The value of this variable names a directory intended to hold
@emph{info} format documentation. The default value for @code{infodir}
depends on @code{prefix} so @code{infodir} is normally changed
only indirectly through @code{prefix}. The default value for
@code{infodir} is @code{datadir}@file{/info}.
@code{infodir} is @file{@var{datadir}/info}.
@end defvr
@vindex docdir
@ -439,7 +440,7 @@ The value of this variable names a directory intended to hold any
documentation that is in a format other than @emph{info} or @emph{man}.
The default value for @code{docdir} depends on @code{prefix} so
@code{docdir} is normally changed only indirectly through @code{prefix}.
The default value for @code{docdir} is @code{datadir}@file{/doc}. Note
The default value for @code{docdir} is @file{@var{datadir}/doc}. Note
that this variable is an extension to the @sc{gnu} coding standards.
(See also @xref{Makefile Extensions}.)
@end defvr
@ -450,7 +451,7 @@ The value of this variable names a directory intended to hold the
headers files that accompany the libraries installed in @code{libdir}.
The default value for @code{includedir} depends on @code{prefix} so
@code{includedir} is normally changed only indirectly through @code{prefix}. The default value for
@code{includedir} is @code{prefix}@file{/include}.
@code{includedir} is @file{@var{prefix}/include}.
@end defvr
@ -464,13 +465,13 @@ The default value for @code{includedir} depends on @code{prefix} so
@cindex Building for multiple hosts
@cindex Building for multiple targets
Normally, @code{configure} builds @file{Makefile}'s and symbolic links
Normally, @code{configure} builds a @file{Makefile} and symbolic links
in the same directory as the source files. This is the typical
@sc{un*x} way to build programs but it has limitations. For instance,
using this approach, you can only build for one host at a time.
We refer to the directories in which @code{configure} builds
@file{Makefile}'s as the @emph{build directories} or sometimes as
We refer to the directories in which @code{configure} builds a
@file{Makefile} as the @emph{build directories} or sometimes as
@emph{objdir} because these are the directories in which @code{make}
will build object files, among other things.
@ -579,8 +580,9 @@ Tools}.
If you find that a tool does not get configured to your liking or that
@code{configure}'s conventions are not your local conventions, you
should probably consider site specific Makefile fragments. (see
@xref{Makefile Fragments})
should probably consider site specific Makefile fragments. See also
@xref{Sites}.
These are probably not the right choice for options that can be set from
the @code{configure} command line or for differences that are host or
@ -659,18 +661,18 @@ configured, then @code{configure} is called for each.
@chapter Porting with Configure
@cindex Porting
This section explains briefly how to port configure for:
This section explains briefly how to add programs, host and target
configuration names, and sites to Cygnus configure.
@menu
* Programs:: Adding configure to existing programs
* Hosts:: Adding hosts to a program that uses Cygnus configure
* Targets:: Adding targets to a program that uses Cygnus configure
* Sites:: Adding site info to programs that use Cygnus configure
* Programs:: Adding configure to new programs
* Hosts and Targets:: Adding hosts and targets
* Sites:: Adding site info
@end menu
@node Programs, Hosts, Porting, Porting
@section Adding Configure To Existing Programs
@node Programs, Hosts and Targets, Porting, Porting
@section Adding Configure To New Programs
If you are writing a new program, you probably shouldn't worry about
porting issues or configure until it is running reasonably on some host.
@ -699,12 +701,21 @@ There are described in @xref{Makefile Extensions}.
@item Move host support from Makefile to fragments
This usually involves finding sections of the Makefile that say things
like ``uncomment these lines for host foo'' and moving them to a new
file call @file{./config/mh-foo}. For more on this, see @xref{Makefile Fragments}.
file call @file{./config/mh-foo}. For more on this, see @xref{Hosts and
Targets}.
@item Choose defaults
If the program has compile time options that determine the way the
program should behave, chose reasonable defaults and make these Makefile
variables. Be sure the variables are assigned their default values
before the @code{####} line so that they can be overridden with site
specific Makefile fragments.
@item Locate configuration files
If there is configuration information in header files or source files,
separate it in such a way that the files have a generic name. Then move
the specific instances of those files into @file{./config}.
the specific instances of those files into the @file{./config}
directory.
@item Separate host and target information
Some programs already have this information separated. If not, you will
@ -738,21 +749,74 @@ The format of configure.in is described in @xref{configure.in}.
At this point you should have a program that can be configured by Cygnus
configure.
@node Hosts, Targets, Programs, Porting
@section Adding hosts to a program that uses Cygnus configure
@node Hosts and Targets, Sites, Programs, Porting
@section Adding hosts and targets
Coming soon. FIXME-now.
To add a host or target to a program that currently uses Cygnus
configure, do the following.
@node Targets, Sites, Hosts, Porting
@section Adding targets to a program that uses Cygnus configure
@itemize @bullet
Coming soon. FIXME-now.
@item
Make sure the new configuration name is represented in
@file{config.sub}. If not, add it. For more details, see the comments
in the shell script @file{config.sub}.
@node Sites, , Targets, Porting
@section Adding site info to programs that use Cygnus configure
@item
If you are adding a host configuration, look in @file{configure.in}, in
the per-host section. Make sure that your configuration name is
represented in the mapping from host configuration names to
configuration files. If not, add it. Also see @xref{configure.in}.
Coming soon. FIXME-now.
@item
If you are adding a target configuration, look in @file{configure.in},
in the per-target section. Make sure that your configuration name is
represented in the mapping from target configuration names to
configuration files. If not, add it. Also see @xref{configure.in}.
@item
Look in @file{configure.in} for the assignments to the variables
@code{files}, @code{links}, @code{host_makefile_frag}, and
@code{target_makefile_frag}. These are the names of the configuration
files that the program uses. Make sure that copies of the files exist
for your host. If not, create them. See also @xref{Configure
Variables}.
@end itemize
This should be enough to configure for a new host or target
configuration name. Getting the program to compile and run properly now
is the hard work of the port.
@node Sites, , Hosts and Targets, Porting
@section Adding site info
If some of the Makefile defaults are not right for your site, you can
build site specific Makefile fragments. To do this, do the following.
@itemize @bullet
@item
Choose a name for your site. It must be less than eleven characters for
now.
@item
If the program does not have a @file{./config} directory, create it.
@item
Create a file called @file{./config/ms-@var{site}} where @var{site} is
the name of your site. In it, set the Makefile variables of your
choice.
@item
Configure the program with:
@example
configure @dots{} +site=@var{site}
@end example
@end itemize
@node Reference, Known Bugs, Porting, top
@chapter Gory details described
@ -792,26 +856,40 @@ completeness.
@table @code
@cindex info
@item info
Build all info files from texinfo source.
@cindex install-info
@item install-info
Install all info files.
@cindex clean-info
@item clean-info
Remove all info files and any intermediate files that can be generated
from texinfo source.
@cindex stage1
@item stage1
@cindex stage2
@item stage2
@cindex stage3
@item stage3
@cindex stage4
@item stage4
@cindex de-stage1
@item de-stage1
@cindex de-stage2
@item de-stage2
@cindex de-stage3
@item de-stage3
@cindex de-stage4
@item de-stage4
@cindex bootstrap
@item bootstrap
@cindex comparison
@item comparison
@cindex Makefile
@item Makefile
These targets are in transition and may be removed shortly.
@ -821,6 +899,7 @@ In addition, the following Makefile targets have revised semantics:
@table @code
@cindex install
@item install
Should @emph{not} depend on the target @code{all}. If the program is
not already built, @code{make install} should fail. This allows
@ -829,6 +908,7 @@ them to be out of date. This can happen when the result of a @code{make
all} is transported via tape to another machine for installation as
well as in a number of other cases.
@cindex clean
@item clean
Should remove any file that can be regenerated by the Makefile,
excepting only the Makefile itself, and any links created by configure.
@ -849,11 +929,13 @@ is not required for Cygnus configure.
@table @code
@cindex docdir
@item docdir
The directory in which to install any documentation that is not either a
man page or an info file. For man pages, see mandir, for info, see
infodir.
@cindex includedir
@item includedir
The directory in which to install any headers files that should be made
available to users. This is distinct from the @code{gcc} include
@ -866,13 +948,15 @@ In addition, the following macros have revised semantics.
@table @code
@cindex manext
@item manext
is not used. The intended usage is not clear. For example, if I have a
@file{foo.man} and a @file{bar.man}, and @file{foo.man} is destined for
@file{/usr/local/lib/man/man1/foo.1} while @file{bar.man} is destined
for @file{/usr/local/lib/man/man5/bar.5}, then to what should the value
of @code{manext} be set?
of @code{manext} be set? See also @xref{Install Details}.
@cindex datadir
@item datadir
is used for @emph{all} host independent files. This makes it possible
to share host independent files across multiple hosts without ersorting
@ -881,14 +965,17 @@ build an install tree that contains multiple host binaries, write
the binaries to tape, and extract any of the hosts without extracting
the others.
@cindex mandir
@item mandir
man pages are host independent so the default path for @code{mandir}
depends on @code{datadir}.
@cindex infodir
@item infodir
info files are host independent so the default path for @code{infodir}
depends on @code{datadir}.
@cindex BISON
@item BISON
is assumed to have a yacc calling convention. To actually use
@code{bison}, use @code{BISON=bison -y}.
@ -902,9 +989,9 @@ Cygnus also adds the following restrictions on our Makefiles.
@item
When libraries are installed, the line containing the call to
@code{INSTALL_DATA} should always be followed by a line containing a
call to @code{RANLIB}. This is to accomodate systems that use
@code{ranlib}. Systems that do not use ranlib can set @code{RANLIB} to
@code{echo} in a host specific Makefile fragment.
call to @code{RANLIB} on the installed library. This is to accomodate
systems that use @code{ranlib}. Systems that do not use ranlib can set
@code{RANLIB} to @code{echo} in a host specific Makefile fragment.
@end itemize
@ -920,13 +1007,15 @@ a shell script fragment sourced by configure at the appropriate time.
The interface between configure and the shell fragments is through a set
of shell variables. All sections are sourced in the build directory.
@cindex Per-host section
A line beginning with @code{# Per-host:} begins the per-host section.
@cindex Per-target section
A line beginning with @code{# Per-target:} begins the per-target
section.
If it exists, the post-target section begins with @code{# Per-target:}
on a line by itself.
@cindex Post-target section
If it exists, the post-target section begins with @code{# Per-target:}.
@menu
* Minimal:: A minimal configure.in
@ -958,6 +1047,8 @@ configuring. If the srctrigger file does not exist, configure
uses the value of srcname to print an error message about not finding
the source.
This particular example uses no links, and only the default host,
target, and site specific Makefile fragments if they exist.
@node Configure Variables, Declarations, Minimal, configure.in
@subsection Variables available to configure.in
@ -1058,7 +1149,7 @@ Contains the second element of the canonical triple representing the
target as returned by @file{config.sub}. This is usually used to
distinguish betwen the numerous variations between @emph{common}
operating systems or object file formats. Sometimes it is used to
switch between different flavors of users interfaces.
switch between different flavors of user interfaces.
@end defvar
@defvar{target_os}
@ -1073,25 +1164,27 @@ interface the tool should provide.
@defvar{nfp}
Is set to @code{true} if the user invoked configure with the @code{-nfp}
command line option, otherwise it is empty. This is a request to target
a machine with @emph{no floating point} unit, even if the machine
ordinarily has a floating point unit available. This option has no
machines with @emph{no floating point} unit, even if the targets
ordinarily have floating point units available. This option has no
negation.
@end defvar
@defvar{gas}
Is set to @code{true} if the user invoked configure with the @code{-gas}
command line option, otherwise it is empty. This is a request to assume
that the target machine has gas available even if it ordinarily does
that all target machines have gas available even if they ordinarily do
not. The converse option, @code{-no-gas} is not available.
@end defvar
@defvar{x}
Is set to @code{true} if the user invoked configure with the @code{-x}
command line option, otherwise it is empty. This is a request to assume
that @sc{mit x11} compatible headers files and libraries are available,
regardless of what is normally available on this host.
that @sc{mit x11} compatible headers files and libraries are available
on all hosts, regardless of what is normally available on them.
@end defvar
NOTE: support for @code{-subdirs} is at least temporarily suspended.
@defvar{srcdir}
Is set to the name of the directory containing the source for this
program. This will be different from @file{.} if the user has specified
@ -1226,7 +1319,7 @@ srctrigger=warshall.c
srcname="bison"
# per-host:
case "${host_os}" in
case "$@{host_os@}" in
m88kbcs)
host_makefile_frag=config/mh-delta88
;;
@ -1245,14 +1338,38 @@ links="bison.hairy"
@cindex config.status
Coming soon. FIXME-soon.
The final step in configuring a directory is to create an executable
shell script call @file{config.status}. This file is typically used to
rebuild the Makefile for the current directory. For this reason,
@file{config.status} uses the @code{-norecursion} option to configure
and is therefor probably inappropriate for actually reconfiguring a tree
of source code.
@node Makefile Fragments, , config.status, Reference
@section Makefile Fragments
@cindex Makefile fragments
Coming soon. FIXME-soon.
Cygnus configure uses three types of Makefile fragments. In a
generated Makefile they occur in the order target fragment, host
fragment, and site fragment. This is so host fragments can override
target fragments etc.
Host specific Makefile fragments conventionally reside in the
@file{./config} directory with names of the form
@file{mh-@var{host}}. They are used for hosts that require
odd options to the standard compiler and for compile time options based
on the host configuration.
Target specific Makefile fragments conventionally reside in the
@file{./config} directory with names of the form @file{mt-@var{target}}.
They are used for target dependent compile time options.
Site specific Makefile fragments conventionally reside in the
@file{./config} directory with names of the form @file{ms-@var{site}}.
They are used to override host and target independent compile time
options. Note that these options can also be overridden on the
@code{make} invocation line.
@node Known Bugs, Variables Index, Reference, top
@chapter Known Bugs