These are generic installation instructions.

Prerequisites
=============

   This package depends on a few other packages.  They are listed in
the file ‘DEPENDENCIES’.  It is recommended to install the listed
packages before installing this package.

Basic Installation
==================

   The ‘configure’ shell script attempts to guess correct values for
various system-dependent variables used during compilation.  It uses
those values to create a ‘Makefile’ in each directory of the package.
It may also create one or more ‘.h’ files containing system-dependent
definitions.  Finally, it creates a shell script ‘config.status’ that
you can run in the future to recreate the current configuration, a file
‘config.cache’ that saves the results of its tests to speed up
reconfiguring, and a file ‘config.log’ containing compiler output
(useful mainly for debugging ‘configure’).

   If you need to do unusual things to compile the package, please try
to figure out how ‘configure’ could check whether to do them, and mail
diffs or instructions to the address given in the ‘README’ so they can
be considered for the next release.  If at some point ‘config.cache’
contains results you don't want to keep, you may remove or edit it.

   The file ‘configure.ac’ is used to create ‘configure’ by a program
called ‘autoconf’.  You only need ‘configure.ac’ if you want to change
it or regenerate ‘configure’ using a newer version of ‘autoconf’.

The simplest way to compile this package is:

  1. ‘cd’ to the directory containing the package's source code and type
     ‘./configure’ to configure the package for your system.  If you're
     using ‘csh’ on an old version of System V, you might need to type
     ‘sh ./configure’ instead to prevent ‘csh’ from trying to execute
     ‘configure’ itself.

     Running ‘configure’ takes awhile.  While running, it prints some
     messages telling which features it is checking for.

  2. Type ‘make’ to compile the package.

  3. Optionally, type ‘make check’ to run any self-tests that come with
     the package.

  4. Type ‘make install’ to install the programs and any data files and
     documentation.

  5. You can remove the program binaries and object files from the
     source code directory by typing ‘make clean’.  To also remove the
     files that ‘configure’ created (so you can compile the package for
     a different kind of computer), type ‘make distclean’.  There is
     also a ‘make maintainer-clean’ target, but that is intended mainly
     for the package's developers.  If you use it, you may have to get
     all sorts of other programs in order to regenerate files that came
     with the distribution.

Compilers and Options
=====================

   Some systems require unusual options for compilation or linking that
the ‘configure’ script does not know about.  You can give ‘configure’
initial values for variables as arguments.  You can do it like this:
     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix

Compiling For Multiple Architectures
====================================

   You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory.  To do this, you must use a version of ‘make’ that
supports the ‘VPATH’ variable, such as GNU ‘make’.  ‘cd’ to the
directory where you want the object files and executables to go and run
the ‘configure’ script.  ‘configure’ automatically checks for the
source code in the directory that ‘configure’ is in and in ‘..’.

   If you have to use a ‘make’ that does not supports the ‘VPATH’
variable, you have to compile the package for one architecture at a time
in the source code directory.  After you have installed the package for
one architecture, use ‘make distclean’ before reconfiguring for another
architecture.

   On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple '-arch' options to the
compiler but only a single '-arch' option to the preprocessor.  Like
this:

     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                 CPP="gcc -E" CXXCPP="g++ -E"

   This is not guaranteed to produce working output in all cases.  You
may have to build one architecture at a time and combine the results
using the 'lipo' tool if you have problems.

Installation Names
==================

   By default, ‘make install’ will install the package's files in
‘/usr/local/bin’, ‘/usr/local/man’, etc.  You can specify an
installation prefix other than ‘/usr/local’ by giving ‘configure’ the
option ‘--prefix=PATH’.

   You can specify separate installation prefixes for
architecture-specific files and architecture-independent files.  If you
give ‘configure’ the option ‘--exec-prefix=PATH’, the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.

   In addition, if you use an unusual directory layout you can give
options like ‘--bindir=PATH’ to specify different values for particular
kinds of files.  Run ‘configure --help’ for a list of the directories
you can set and what kinds of files go in them.

   If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving ‘configure’ the
option ‘--program-prefix=PREFIX’ or ‘--program-suffix=SUFFIX’.

Enabling Relocatability
=======================

   It has been a pain for many users of GNU packages for a long time
that packages are not relocatable.  It means a user cannot copy a
program, installed by another user on the same machine, to his home
directory, and have it work correctly (including i18n).  So many users
need to go through ‘configure; make; make install’ with all its
dependencies, options, and hurdles.

   Red Hat, Debian, and similar package systems solve the "ease of
installation" problem, but they hardwire path names, usually to ‘/usr’
or ‘/usr/local’.  This means that users need root privileges to install
a binary package, and prevents installing two different versions of the
same binary package.

   A relocatable program can be moved or copied to a different location
on the filesystem.  It is possible to make symlinks to the installed
and moved programs, and invoke them through the symlink. It is possible
to do the same thing with a hard link _only_ if the hard link file is
in the same directory as the real program.

   To configure a program to be relocatable, add ‘--enable-relocatable’
to the ‘configure’ command line.

   On some OSes the executables remember the location of shared
libraries and prefer them over any other search path.  Therefore, such
an executable will look for its shared libraries first in the original
installation directory and only then in the current installation
directory.  Thus, for reliability, it is best to also give a ‘--prefix’
option pointing to a directory that does not exist now and which never
will be created, e.g.  ‘--prefix=/nonexistent’.  You may use
‘DESTDIR=DEST-DIR’ on the ‘make’ command line to avoid installing into
that directory.

   We do not recommend using a prefix writable by unprivileged users
(e.g. ‘/tmp/inst$$’) because such a directory can be recreated by an
unprivileged user after the original directory has been removed.  We
also do not recommend prefixes that might be behind an automounter
(e.g. ‘$HOME/inst$$’) because of the performance impact of directory
searching.

   Here's a sample installation run that takes into account all these
recommendations:

     ./configure --enable-relocatable --prefix=/nonexistent
     make
     make install DESTDIR=/tmp/inst$$

   Installation with ‘--enable-relocatable’ will not work for setuid or
setgid executables, because such executables search only system library
paths for security reasons.  Also, installation with
‘--enable-relocatable’ might not work on OpenBSD, when the package
contains shared libraries and libtool versions 1.5.xx are used.

   The runtime penalty and size penalty are negligible on GNU/Linux
(just one system call more when an executable is launched), and small on
other systems (the wrapper program just sets an environment variable
and executes the real program).

Optional Features
=================

   Some packages pay attention to ‘--enable-FEATURE’ options to
‘configure’, where FEATURE indicates an optional part of the package.
They may also pay attention to ‘--with-PACKAGE’ options, where PACKAGE
is something like ‘gnu-as’ or ‘x’ (for the X Window System).  The
‘README’ should mention any ‘--enable-’ and ‘--with-’ options that the
package recognizes.

   For packages that use the X Window System, ‘configure’ can usually
find the X include and library files automatically, but if it doesn't,
you can use the ‘configure’ options ‘--x-includes=DIR’ and
‘--x-libraries=DIR’ to specify their locations.

   For packages that use the GNU libiconv library, you can use the
‘configure’ option ‘--with-libiconv-prefix’ to specify the prefix you
used while installing GNU libiconv.  This option is not necessary if
that other prefix is the same as the one now specified through --prefix.

   For packages that use the GNU libintl library, you can use the
‘configure’ option ‘--with-libintl-prefix’ to specify the prefix you
used while installing GNU gettext-runtime.  This option is not necessary if
that other prefix is the same as the one now specified through --prefix.

Particular Systems
==================

   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC
is not installed, it is recommended to use the following options in order
to use an ANSI C compiler:

     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"

and if that doesn't work, install pre-built binaries of GCC for HP-UX.

   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its ‘<wchar.h>’ header file.  The option ‘-nodtk’ can be used as
a workaround.  If GNU CC is not installed, it is therefore recommended
to try

     ./configure CC="cc"

and if that doesn't work, try

     ./configure CC="cc -nodtk"

   On AIX 3, the C include files by default don't define some necessary
prototype declarations.  If GNU CC is not installed, it is recommended to
use the following options:

     ./configure CC="xlc -D_ALL_SOURCE"

   On Haiku, software installed for all users goes in /boot/common, not
/usr/local.  It is recommended to use the following options:

     ./configure --prefix=/boot/common

   On BeOS, user installed software goes in /boot/home/config, not
/usr/local.  It is recommended to use the following options:

     ./configure --prefix=/boot/home/config

Specifying the System Type
==========================

   There may be some features ‘configure’ can not figure out
automatically, but needs to determine by the type of host the package
will run on.  Usually ‘configure’ can figure that out, but if it prints
a message saying it can not guess the host type, give it the
‘--host=TYPE’ option.  TYPE can either be a short name for the system
type, such as ‘sun4’, or a canonical name with three fields:
     CPU-COMPANY-SYSTEM

See the file ‘config.sub’ for the possible values of each field.  If
‘config.sub’ isn't included in this package, then this package doesn't
need to know the host type.

   If you are building compiler tools for cross-compiling, you can also
use the ‘--target=TYPE’ option to select the type of system they will
produce code for and the ‘--build=TYPE’ option to select the type of
system on which you are compiling the package.

Sharing Defaults
================

   If you want to set default values for ‘configure’ scripts to share,
you can create a site shell script called ‘config.site’ that gives
default values for variables like ‘CC’, ‘cache_file’, and ‘prefix’.
‘configure’ looks for ‘PREFIX/share/config.site’ if it exists, then
‘PREFIX/etc/config.site’ if it exists.  Or, you can set the
‘CONFIG_SITE’ environment variable to the location of the site script.
A warning: not all ‘configure’ scripts look for a site script.

Operation Controls
==================

   ‘configure’ recognizes the following options to control how it
operates.

‘--cache-file=FILE’
     Use and save the results of the tests in FILE instead of
     ‘./config.cache’.  Set FILE to ‘/dev/null’ to disable caching, for
     debugging ‘configure’.

‘--help’
     Print a summary of the options to ‘configure’, and exit.

‘--quiet’
‘--silent’
‘-q’
     Do not print messages saying which checks are being made.  To
     suppress all normal output, redirect it to ‘/dev/null’ (any error
     messages will still be shown).

‘--srcdir=DIR’
     Look for the package's source code in directory DIR.  Usually
     ‘configure’ can determine that directory automatically.

‘--version’
     Print the version of Autoconf used to generate the ‘configure’
     script, and exit.

‘configure’ also accepts some other, not widely useful, options.

