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

   These are generic installation instructions.

   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 by setting them in the environment.  Using
a Bourne-compatible shell, you can do that on the command line like
this:
     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure

Or on systems that have the ‘env’ program, you can do it like this:
     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

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’.

Relocatable Installation
========================

   By default, ‘make install’ will install a package with hardwired
file names, and the package will not work correctly when copied or
moved to a different location in the filesystem.

   Some packages pay attention to the ‘--enable-relocatable’ option to
‘configure’.  This option makes the entire installed package
relocatable.  This means, it 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
linked file is in the same directory as the real program.

   For reliability it is best to give together with --enable-relocatable
a ‘--prefix’ option pointing to an otherwise unused (and never used
again) directory, for example, ‘--prefix=/tmp/inst$$’.  This is
recommended because on some OSes the executables remember the location
of shared libraries (and prefer them over LD_LIBRARY_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.

   Installation with ‘--enable-relocatable’ will not work for setuid /
setgid executables.  (This is because such an executable kills its
LD_LIBRARY_PATH variable when it is launched.)

   The runtime penalty and size penalty are nearly zero on Linux 2.2 or
newer (just one system call more when an executable is launched), and
small on other systems (the wrapper program just sets an environment
variable and execs 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 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 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.

