Use /var/db for nss_db
[platform/upstream/glibc.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index 369e50e..5e538a6 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-Library Maintenance
-*******************
-
-Adding New Functions
-====================
-
-   The process of building the library is driven by the makefiles, which
-make heavy use of special features of GNU `make'.  The makefiles are
-very complex, and you probably don't want to try to understand them.
-But what they do is fairly straightforward, and only requires that you
-define a few variables in the right places.
-
-   The library sources are divided into subdirectories, grouped by
-topic.
-
-   The `string' subdirectory has all the string-manipulation functions,
-`math' has all the mathematical functions, etc.
-
-   Each subdirectory contains a simple makefile, called `Makefile',
-which defines a few `make' variables and then includes the global
-makefile `Rules' with a line like:
-
-     include ../Rules
-
-The basic variables that a subdirectory makefile defines are:
-
-`subdir'
-     The name of the subdirectory, for example `stdio'.  This variable
-     *must* be defined.
-
-`headers'
-     The names of the header files in this section of the library, such
-     as `stdio.h'.
-
-`routines'
-`aux'
-     The names of the modules (source files) in this section of the
-     library.  These should be simple names, such as `strlen' (rather
-     than complete file names, such as `strlen.c').  Use `routines' for
-     modules that define functions in the library, and `aux' for
-     auxiliary modules containing things like data definitions.  But the
-     values of `routines' and `aux' are just concatenated, so there
-     really is no practical difference.
-
-`tests'
-     The names of test programs for this section of the library.  These
-     should be simple names, such as `tester' (rather than complete file
-     names, such as `tester.c').  `make tests' will build and run all
-     the test programs.  If a test program needs input, put the test
-     data in a file called `TEST-PROGRAM.input'; it will be given to
-     the test program on its standard input.  If a test program wants
-     to be run with arguments, put the arguments (all on a single line)
-     in a file called `TEST-PROGRAM.args'.  Test programs should exit
-     with zero status when the test passes, and nonzero status when the
-     test indicates a bug in the library or error in building.
-
-`others'
-     The names of "other" programs associated with this section of the
-     library.  These are programs which are not tests per se, but are
-     other small programs included with the library.  They are built by
-     `make others'.
-
-`install-lib'
-`install-data'
-`install'
-     Files to be installed by `make install'.  Files listed in
-     `install-lib' are installed in the directory specified by `libdir'
-     in `configparms' or `Makeconfig' (*note Installation::.).  Files
-     listed in `install-data' are installed in the directory specified
-     by `datadir' in `configparms' or `Makeconfig'.  Files listed in
-     `install' are installed in the directory specified by `bindir' in
-     `configparms' or `Makeconfig'.
-
-`distribute'
-     Other files from this subdirectory which should be put into a
-     distribution tar file.  You need not list here the makefile itself
-     or the source and header files listed in the other standard
-     variables.  Only define `distribute' if there are files used in an
-     unusual way that should go into the distribution.
-
-`generated'
-     Files which are generated by `Makefile' in this subdirectory.
-     These files will be removed by `make clean', and they will never
-     go into a distribution.
-
-`extra-objs'
-     Extra object files which are built by `Makefile' in this
-     subdirectory.  This should be a list of file names like `foo.o';
-     the files will actually be found in whatever directory object
-     files are being built in.  These files will be removed by
-     `make clean'.  This variable is used for secondary object files
-     needed to build `others' or `tests'.
-
-Porting the GNU C Library
-=========================
-
-   The GNU C library is written to be easily portable to a variety of
-machines and operating systems.  Machine- and operating system-dependent
-functions are well separated to make it easy to add implementations for
-new machines or operating systems.  This section describes the layout of
-the library source tree and explains the mechanisms used to select
-machine-dependent code to use.
-
-   All the machine-dependent and operating system-dependent files in the
-library are in the subdirectory `sysdeps' under the top-level library
-source directory.  This directory contains a hierarchy of
-subdirectories (*note Hierarchy Conventions::.).
-
-   Each subdirectory of `sysdeps' contains source files for a
-particular machine or operating system, or for a class of machine or
-operating system (for example, systems by a particular vendor, or all
-machines that use IEEE 754 floating-point format).  A configuration
-specifies an ordered list of these subdirectories.  Each subdirectory
-implicitly appends its parent directory to the list.  For example,
-specifying the list `unix/bsd/vax' is equivalent to specifying the list
-`unix/bsd/vax unix/bsd unix'.  A subdirectory can also specify that it
-implies other subdirectories which are not directly above it in the
-directory hierarchy.  If the file `Implies' exists in a subdirectory,
-it lists other subdirectories of `sysdeps' which are appended to the
-list, appearing after the subdirectory containing the `Implies' file.
-Lines in an `Implies' file that begin with a `#' character are ignored
-as comments.  For example, `unix/bsd/Implies' contains:
-     # BSD has Internet-related things.
-     unix/inet
-
-and `unix/Implies' contains:
-     posix
-
-So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'.
-
-   `sysdeps' has a "special" subdirectory called `generic'.  It is
-always implicitly appended to the list of subdirectories, so you
-needn't put it in an `Implies' file, and you should not create any
-subdirectories under it intended to be new specific categories.
-`generic' serves two purposes.  First, the makefiles do not bother to
-look for a system-dependent version of a file that's not in `generic'.
-This means that any system-dependent source file must have an analogue
-in `generic', even if the routines defined by that file are not
-implemented on other platforms.  Second. the `generic' version of a
-system-dependent file is used if the makefiles do not find a version
-specific to the system you're compiling for.
-
-   If it is possible to implement the routines in a `generic' file in
-machine-independent C, using only other machine-independent functions in
-the C library, then you should do so.  Otherwise, make them stubs.  A
-"stub" function is a function which cannot be implemented on a
-particular machine or operating system.  Stub functions always return an
-error, and set `errno' to `ENOSYS' (Function not implemented).  *Note
-Error Reporting::.  If you define a stub function, you must place the
-statement `stub_warning(FUNCTION)', where FUNCTION is the name of your
-function, after its definition; also, you must include the file
-`<stub-tag.h>' into your file.  This causes the function to be listed
-in the installed `<gnu/stubs.h>', and makes GNU ld warn when the
-function is used.
-
-   Some rare functions are only useful on specific systems and aren't
-defined at all on others; these do not appear anywhere in the
-system-independent source code or makefiles (including the `generic'
-directory), only in the system-dependent `Makefile' in the specific
-system's subdirectory.
-
-   If you come across a file that is in one of the main source
-directories (`string', `stdio', etc.), and you want to write a machine-
-or operating system-dependent version of it, move the file into
-`sysdeps/generic' and write your new implementation in the appropriate
-system-specific subdirectory.  Note that if a file is to be
-system-dependent, it *must not* appear in one of the main source
-directories.
-
-   There are a few special files that may exist in each subdirectory of
-`sysdeps':
-
-`Makefile'
-     A makefile for this machine or operating system, or class of
-     machine or operating system.  This file is included by the library
-     makefile `Makerules', which is used by the top-level makefile and
-     the subdirectory makefiles.  It can change the variables set in the
-     including makefile or add new rules.  It can use GNU `make'
-     conditional directives based on the variable `subdir' (see above)
-     to select different sets of variables and rules for different
-     sections of the library.  It can also set the `make' variable
-     `sysdep-routines', to specify extra modules to be included in the
-     library.  You should use `sysdep-routines' rather than adding
-     modules to `routines' because the latter is used in determining
-     what to distribute for each subdirectory of the main source tree.
-
-     Each makefile in a subdirectory in the ordered list of
-     subdirectories to be searched is included in order.  Since several
-     system-dependent makefiles may be included, each should append to
-     `sysdep-routines' rather than simply setting it:
-
-          sysdep-routines := $(sysdep-routines) foo bar
-
-`Subdirs'
-     This file contains the names of new whole subdirectories under the
-     top-level library source tree that should be included for this
-     system.  These subdirectories are treated just like the
-     system-independent subdirectories in the library source tree, such
-     as `stdio' and `math'.
-
-     Use this when there are completely new sets of functions and header
-     files that should go into the library for the system this
-     subdirectory of `sysdeps' implements.  For example,
-     `sysdeps/unix/inet/Subdirs' contains `inet'; the `inet' directory
-     contains various network-oriented operations which only make sense
-     to put in the library on systems that support the Internet.
-
-`Dist'
-     This file contains the names of files (relative to the
-     subdirectory of `sysdeps' in which it appears) which should be
-     included in the distribution.  List any new files used by rules in
-     the `Makefile' in the same directory, or header files used by the
-     source files in that directory.  You don't need to list files that
-     are implementations (either C or assembly source) of routines
-     whose names are given in the machine-independent makefiles in the
-     main source tree.
-
-`configure'
-     This file is a shell script fragment to be run at configuration
-     time.  The top-level `configure' script uses the shell `.' command
-     to read the `configure' file in each system-dependent directory
-     chosen, in order.  The `configure' files are often generated from
-     `configure.in' files using Autoconf.
-
-     A system-dependent `configure' script will usually add things to
-     the shell variables `DEFS' and `config_vars'; see the top-level
-     `configure' script for details.  The script can check for
-     `--with-PACKAGE' options that were passed to the top-level
-     `configure'.  For an option `--with-PACKAGE=VALUE' `configure'
-     sets the shell variable `with_PACKAGE' (with any dashes in PACKAGE
-     converted to underscores) to VALUE; if the option is just
-     `--with-PACKAGE' (no argument), then it sets `with_PACKAGE' to
-     `yes'.
-
-`configure.in'
-     This file is an Autoconf input fragment to be processed into the
-     file `configure' in this subdirectory.  *Note Introduction:
-     (autoconf.info)Introduction, for a description of Autoconf.  You
-     should write either `configure' or `configure.in', but not both.
-     The first line of `configure.in' should invoke the `m4' macro
-     `GLIBC_PROVIDES'.  This macro does several `AC_PROVIDE' calls for
-     Autoconf macros which are used by the top-level `configure'
-     script; without this, those macros might be invoked again
-     unnecessarily by Autoconf.
-
-   That is the general system for how system-dependencies are isolated.
-
-Layout of the `sysdeps' Directory Hierarchy
--------------------------------------------
-
-   A GNU configuration name has three parts: the CPU type, the
-manufacturer's name, and the operating system.  `configure' uses these
-to pick the list of system-dependent directories to look for.  If the
-`--nfp' option is *not* passed to `configure', the directory
-`MACHINE/fpu' is also used.  The operating system often has a "base
-operating system"; for example, if the operating system is `Linux', the
-base operating system is `unix/sysv'.  The algorithm used to pick the
-list of directories is simple: `configure' makes a list of the base
-operating system, manufacturer, CPU type, and operating system, in that
-order.  It then concatenates all these together with slashes in
-between, to produce a directory name; for example, the configuration
-`i686-linux-gnu' results in `unix/sysv/linux/i386/i686'.  `configure'
-then tries removing each element of the list in turn, so
-`unix/sysv/linux' and `unix/sysv' are also tried, among others.  Since
-the precise version number of the operating system is often not
-important, and it would be very inconvenient, for example, to have
-identical `irix6.2' and `irix6.3' directories, `configure' tries
-successively less specific operating system names by removing trailing
-suffixes starting with a period.
-
-   As an example, here is the complete list of directories that would be
-tried for the configuration `i686-linux-gnu' (with the `crypt' and
-`linuxthreads' add-on):
-
-     sysdeps/i386/elf
-     crypt/sysdeps/unix
-     linuxthreads/sysdeps/unix/sysv/linux
-     linuxthreads/sysdeps/pthread
-     linuxthreads/sysdeps/unix/sysv
-     linuxthreads/sysdeps/unix
-     linuxthreads/sysdeps/i386/i686
-     linuxthreads/sysdeps/i386
-     linuxthreads/sysdeps/pthread/no-cmpxchg
-     sysdeps/unix/sysv/linux/i386
-     sysdeps/unix/sysv/linux
-     sysdeps/gnu
-     sysdeps/unix/common
-     sysdeps/unix/mman
-     sysdeps/unix/inet
-     sysdeps/unix/sysv/i386/i686
-     sysdeps/unix/sysv/i386
-     sysdeps/unix/sysv
-     sysdeps/unix/i386
-     sysdeps/unix
-     sysdeps/posix
-     sysdeps/i386/i686
-     sysdeps/i386/i486
-     sysdeps/libm-i387/i686
-     sysdeps/i386/fpu
-     sysdeps/libm-i387
-     sysdeps/i386
-     sysdeps/wordsize-32
-     sysdeps/ieee754
-     sysdeps/libm-ieee754
-     sysdeps/generic
-
-   Different machine architectures are conventionally subdirectories at
-the top level of the `sysdeps' directory tree.  For example,
-`sysdeps/sparc' and `sysdeps/m68k'.  These contain files specific to
-those machine architectures, but not specific to any particular
-operating system.  There might be subdirectories for specializations of
-those architectures, such as `sysdeps/m68k/68020'. Code which is
-specific to the floating-point coprocessor used with a particular
-machine should go in `sysdeps/MACHINE/fpu'.
-
-   There are a few directories at the top level of the `sysdeps'
-hierarchy that are not for particular machine architectures.
-
-`generic'
-     As described above (*note Porting::.), this is the subdirectory
-     that every configuration implicitly uses after all others.
-
-`ieee754'
-     This directory is for code using the IEEE 754 floating-point
-     format, where the C type `float' is IEEE 754 single-precision
-     format, and `double' is IEEE 754 double-precision format.  Usually
-     this directory is referred to in the `Implies' file in a machine
-     architecture-specific directory, such as `m68k/Implies'.
-
-`libm-ieee754'
-     This directory contains an implementation of a mathematical library
-     usable on platforms which use IEEE 754 conformant floating-point
-     arithmetic.
-
-`libm-i387'
-     This is a special case.  Ideally the code should be in
-     `sysdeps/i386/fpu' but for various reasons it is kept aside.
-
-`posix'
-     This directory contains implementations of things in the library in
-     terms of POSIX.1 functions.  This includes some of the POSIX.1
-     functions themselves.  Of course, POSIX.1 cannot be completely
-     implemented in terms of itself, so a configuration using just
-     `posix' cannot be complete.
-
-`unix'
-     This is the directory for Unix-like things.  *Note Porting to
-     Unix::.  `unix' implies `posix'.  There are some special-purpose
-     subdirectories of `unix':
-
-    `unix/common'
-          This directory is for things common to both BSD and System V
-          release 4.  Both `unix/bsd' and `unix/sysv/sysv4' imply
-          `unix/common'.
-
-    `unix/inet'
-          This directory is for `socket' and related functions on Unix
-          systems.  `unix/inet/Subdirs' enables the `inet' top-level
-          subdirectory.  `unix/common' implies `unix/inet'.
-
-`mach'
-     This is the directory for things based on the Mach microkernel
-     from CMU (including the GNU operating system).  Other basic
-     operating systems (VMS, for example) would have their own
-     directories at the top level of the `sysdeps' hierarchy, parallel
-     to `unix' and `mach'.
-
-Porting the GNU C Library to Unix Systems
------------------------------------------
-
-   Most Unix systems are fundamentally very similar.  There are
-variations between different machines, and variations in what
-facilities are provided by the kernel.  But the interface to the
-operating system facilities is, for the most part, pretty uniform and
-simple.
-
-   The code for Unix systems is in the directory `unix', at the top
-level of the `sysdeps' hierarchy.  This directory contains
-subdirectories (and subdirectory trees) for various Unix variants.
-
-   The functions which are system calls in most Unix systems are
-implemented in assembly code, which is generated automatically from
-specifications in files named `syscalls.list'.  There are several such
-files, one in `sysdeps/unix' and others in its subdirectories.  Some
-special system calls are implemented in files that are named with a
-suffix of `.S'; for example, `_exit.S'.  Files ending in `.S' are run
-through the C preprocessor before being fed to the assembler.
-
-   These files all use a set of macros that should be defined in
-`sysdep.h'.  The `sysdep.h' file in `sysdeps/unix' partially defines
-them; a `sysdep.h' file in another directory must finish defining them
-for the particular machine and operating system variant.  See
-`sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h'
-implementations to see what these macros are and what they should do.
-
-   The system-specific makefile for the `unix' directory
-(`sysdeps/unix/Makefile') gives rules to generate several files from
-the Unix system you are building the library on (which is assumed to be
-the target system you are building the library *for*).  All the
-generated files are put in the directory where the object files are
-kept; they should not affect the source tree itself.  The files
-generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c'
-(for the `stdio' section of the library).
-
+Installing the GNU C Library
+****************************
+
+Before you do anything else, you should read the FAQ at
+<http://sourceware.org/glibc/wiki/FAQ>.  It answers common questions and
+describes problems you may experience with compilation and installation.
+
+   Features can be added to the GNU C Library via "add-on" bundles.
+These are separate tar files, which you unpack into the top level of the
+source tree.  Then you give 'configure' the '--enable-add-ons' option to
+activate them, and they will be compiled into the library.
+
+   You will need recent versions of several GNU tools: definitely GCC
+and GNU Make, and possibly others.  *Note Tools for Compilation::,
+below.
+
+Configuring and compiling the GNU C Library
+===========================================
+
+The GNU C Library cannot be compiled in the source directory.  You must
+build it in a separate build directory.  For example, if you have
+unpacked the GNU C Library sources in '/src/gnu/glibc-VERSION', create a
+directory '/src/gnu/glibc-build' to put the object files in.  This
+allows removing the whole build directory in case an error occurs, which
+is the safest way to get a fresh start and should always be done.
+
+   From your object directory, run the shell script 'configure' located
+at the top level of the source tree.  In the scenario above, you'd type
+
+     $ ../glibc-VERSION/configure ARGS...
+
+   Please note that even though you're building in a separate build
+directory, the compilation may need to create or modify files and
+directories in the source directory.
+
+'configure' takes many options, but the only one that is usually
+mandatory is '--prefix'.  This option tells 'configure' where you want
+the GNU C Library installed.  This defaults to '/usr/local', but the
+normal setting to install as the standard system library is
+'--prefix=/usr' for GNU/Linux systems and '--prefix=' (an empty prefix)
+for GNU/Hurd systems.
+
+   It may also be useful to set the CC and CFLAGS variables in the
+environment when running 'configure'.  CC selects the C compiler that
+will be used, and CFLAGS sets optimization options for the compiler.
+
+   The following list describes all of the available options for
+'configure':
+
+'--prefix=DIRECTORY'
+     Install machine-independent data files in subdirectories of
+     'DIRECTORY'.  The default is to install in '/usr/local'.
+
+'--exec-prefix=DIRECTORY'
+     Install the library and other machine-dependent files in
+     subdirectories of 'DIRECTORY'.  The default is to the '--prefix'
+     directory if that option is specified, or '/usr/local' otherwise.
+
+'--with-headers=DIRECTORY'
+     Look for kernel header files in DIRECTORY, not '/usr/include'.  The
+     GNU C Library needs information from the kernel's header files
+     describing the interface to the kernel.  The GNU C Library will
+     normally look in '/usr/include' for them, but if you specify this
+     option, it will look in DIRECTORY instead.
+
+     This option is primarily of use on a system where the headers in
+     '/usr/include' come from an older version of the GNU C Library.
+     Conflicts can occasionally happen in this case.  You can also use
+     this option if you want to compile the GNU C Library with a newer
+     set of kernel headers than the ones found in '/usr/include'.
+
+'--enable-add-ons[=LIST]'
+     Specify add-on packages to include in the build.  If this option is
+     specified with no list, it enables all the add-on packages it finds
+     in the main source directory; this is the default behavior.  You
+     may specify an explicit list of add-ons to use in LIST, separated
+     by spaces or commas (if you use spaces, remember to quote them from
+     the shell).  Each add-on in LIST can be an absolute directory name
+     or can be a directory name relative to the main source directory,
+     or relative to the build directory (that is, the current working
+     directory).  For example,
+     '--enable-add-ons=nptl,../glibc-libidn-VERSION'.
+
+'--enable-kernel=VERSION'
+     This option is currently only useful on GNU/Linux systems.  The
+     VERSION parameter should have the form X.Y.Z and describes the
+     smallest version of the Linux kernel the generated library is
+     expected to support.  The higher the VERSION number is, the less
+     compatibility code is added, and the faster the code gets.
+
+'--with-binutils=DIRECTORY'
+     Use the binutils (assembler and linker) in 'DIRECTORY', not the
+     ones the C compiler would default to.  You can use this option if
+     the default binutils on your system cannot deal with all the
+     constructs in the GNU C Library.  In that case, 'configure' will
+     detect the problem and suppress these constructs, so that the
+     library will still be usable, but functionality may be lost--for
+     example, you can't build a shared libc with old binutils.
+
+'--without-fp'
+     Use this option if your computer lacks hardware floating-point
+     support and your operating system does not emulate an FPU.
+
+'--disable-shared'
+     Don't build shared libraries even if it is possible.  Not all
+     systems support shared libraries; you need ELF support and
+     (currently) the GNU linker.
+
+'--disable-profile'
+     Don't build libraries with profiling information.  You may want to
+     use this option if you don't plan to do profiling.
+
+'--enable-static-nss'
+     Compile static versions of the NSS (Name Service Switch) libraries.
+     This is not recommended because it defeats the purpose of NSS; a
+     program linked statically with the NSS libraries cannot be
+     dynamically reconfigured to use a different name database.
+
+'--without-tls'
+     By default the C library is built with support for thread-local
+     storage if the used tools support it.  By using '--without-tls'
+     this can be prevented though there generally is no reason since it
+     creates compatibility problems.
+
+'--enable-hardcoded-path-in-tests'
+     By default, dynamic tests are linked to run with the installed C
+     library.  This option hardcodes the newly built C library path in
+     dynamic tests so that they can be invoked directly.
+
+'--enable-lock-elision=yes'
+     Enable lock elision for pthread mutexes by default.
+
+'--enable-pt_chown'
+     The file 'pt_chown' is a helper binary for 'grantpt' (*note
+     Pseudo-Terminals: Allocation.) that is installed setuid root to fix
+     up pseudo-terminal ownership.  It is not built by default because
+     systems using the Linux kernel are commonly built with the 'devpts'
+     filesystem enabled and mounted at '/dev/pts', which manages
+     pseudo-terminal ownership automatically.  By using
+     '--enable-pt_chown', you may build 'pt_chown' and install it setuid
+     and owned by 'root'.  The use of 'pt_chown' introduces additional
+     security risks to the system and you should enable it only if you
+     understand and accept those risks.
+
+'--disable-werror'
+     By default, the GNU C Library is built with '-Werror'.  If you wish
+     to build without this option (for example, if building with a newer
+     version of GCC than this version of the GNU C Library was tested
+     with, so new warnings cause the build with '-Werror' to fail), you
+     can configure with '--disable-werror'.
+
+'--build=BUILD-SYSTEM'
+'--host=HOST-SYSTEM'
+     These options are for cross-compiling.  If you specify both options
+     and BUILD-SYSTEM is different from HOST-SYSTEM, 'configure' will
+     prepare to cross-compile the GNU C Library from BUILD-SYSTEM to be
+     used on HOST-SYSTEM.  You'll probably need the '--with-headers'
+     option too, and you may have to override CONFIGURE's selection of
+     the compiler and/or binutils.
+
+     If you only specify '--host', 'configure' will prepare for a native
+     compile but use what you specify instead of guessing what your
+     system is.  This is most useful to change the CPU submodel.  For
+     example, if 'configure' guesses your machine as 'i686-pc-linux-gnu'
+     but you want to compile a library for 586es, give
+     '--host=i586-pc-linux-gnu' or just '--host=i586-linux' and add the
+     appropriate compiler flags ('-mcpu=i586' will do the trick) to
+     CFLAGS.
+
+     If you specify just '--build', 'configure' will get confused.
+
+'--with-pkgversion=VERSION'
+     Specify a description, possibly including a build number or build
+     date, of the binaries being built, to be included in '--version'
+     output from programs installed with the GNU C Library.  For
+     example, '--with-pkgversion='FooBar GNU/Linux glibc build 123''.
+     The default value is 'GNU libc'.
+
+'--with-bugurl=URL'
+     Specify the URL that users should visit if they wish to report a
+     bug, to be included in '--help' output from programs installed with
+     the GNU C Library.  The default value refers to the main
+     bug-reporting information for the GNU C Library.
+
+   To build the library and related programs, type 'make'.  This will
+produce a lot of output, some of which may look like errors from 'make'
+but isn't.  Look for error messages from 'make' containing '***'.  Those
+indicate that something is seriously wrong.
+
+   The compilation process can take a long time, depending on the
+configuration and the speed of your machine.  Some complex modules may
+take a very long time to compile, as much as several minutes on slower
+machines.  Do not panic if the compiler appears to hang.
+
+   If you want to run a parallel make, simply pass the '-j' option with
+an appropriate numeric parameter to 'make'.  You need a recent GNU
+'make' version, though.
+
+   To build and run test programs which exercise some of the library
+facilities, type 'make check'.  If it does not complete successfully, do
+not use the built library, and report a bug after verifying that the
+problem is not already known.  *Note Reporting Bugs::, for instructions
+on reporting bugs.  Note that some of the tests assume they are not
+being run by 'root'.  We recommend you compile and test the GNU C
+Library as an unprivileged user.
+
+   Before reporting bugs make sure there is no problem with your system.
+The tests (and later installation) use some pre-existing files of the
+system such as '/etc/passwd', '/etc/nsswitch.conf' and others.  These
+files must all contain correct and sensible content.
+
+   Normally, 'make check' will run all the tests before reporting all
+problems found and exiting with error status if any problems occurred.
+You can specify 'stop-on-test-failure=y' when running 'make check' to
+make the test run stop and exit with an error status immediately when a
+failure occurs.
+
+   To format the 'GNU C Library Reference Manual' for printing, type
+'make dvi'.  You need a working TeX installation to do this.  The
+distribution builds the on-line formatted version of the manual, as Info
+files, as part of the build process.  You can build them manually with
+'make info'.
+
+   The library has a number of special-purpose configuration parameters
+which you can find in 'Makeconfig'.  These can be overwritten with the
+file 'configparms'.  To change them, create a 'configparms' in your
+build directory and add values as appropriate for your system.  The file
+is included and parsed by 'make' and has to follow the conventions for
+makefiles.
+
+   It is easy to configure the GNU C Library for cross-compilation by
+setting a few variables in 'configparms'.  Set 'CC' to the
+cross-compiler for the target you configured the library for; it is
+important to use this same 'CC' value when running 'configure', like
+this: 'CC=TARGET-gcc configure TARGET'.  Set 'BUILD_CC' to the compiler
+to use for programs run on the build system as part of compiling the
+library.  You may need to set 'AR' to cross-compiling versions of 'ar'
+if the native tools are not configured to work with object files for the
+target you configured for.  When cross-compiling the GNU C Library, it
+may be tested using 'make check
+test-wrapper="SRCDIR/scripts/cross-test-ssh.sh HOSTNAME"', where SRCDIR
+is the absolute directory name for the main source directory and
+HOSTNAME is the host name of a system that can run the newly built
+binaries of the GNU C Library.  The source and build directories must be
+visible at the same locations on both the build system and HOSTNAME.
+
+   In general, when testing the GNU C Library, 'test-wrapper' may be set
+to the name and arguments of any program to run newly built binaries.
+This program must preserve the arguments to the binary being run, its
+working directory and the standard input, output and error file
+descriptors.  If 'TEST-WRAPPER env' will not work to run a program with
+environment variables set, then 'test-wrapper-env' must be set to a
+program that runs a newly built program with environment variable
+assignments in effect, those assignments being specified as 'VAR=VALUE'
+before the name of the program to be run.  If multiple assignments to
+the same variable are specified, the last assignment specified must take
+precedence.
+
+Installing the C Library
+========================
+
+To install the library and its header files, and the Info files of the
+manual, type 'make install'.  This will build things, if necessary,
+before installing them; however, you should still compile everything
+first.  If you are installing the GNU C Library as your primary C
+library, we recommend that you shut the system down to single-user mode
+first, and reboot afterward.  This minimizes the risk of breaking things
+when the library changes out from underneath.
+
+   'make install' will do the entire job of upgrading from a previous
+installation of the GNU C Library version 2.x.  There may sometimes be
+headers left behind from the previous installation, but those are
+generally harmless.  If you want to avoid leaving headers behind you can
+do things in the following order.
+
+   You must first build the library ('make'), optionally check it ('make
+check'), switch the include directories and then install ('make
+install').  The steps must be done in this order.  Not moving the
+directory before install will result in an unusable mixture of header
+files from both libraries, but configuring, building, and checking the
+library requires the ability to compile and run programs against the old
+library.  The new '/usr/include', after switching the include
+directories and before installing the library should contain the Linux
+headers, but nothing else.  If you do this, you will need to restore any
+headers from libraries other than the GNU C Library yourself after
+installing the library.
+
+   You can install the GNU C Library somewhere other than where you
+configured it to go by setting the 'install_root' variable on the
+command line for 'make install'.  The value of this variable is
+prepended to all the paths for installation.  This is useful when
+setting up a chroot environment or preparing a binary distribution.  The
+directory should be specified with an absolute file name.
+
+   The GNU C Library includes a daemon called 'nscd', which you may or
+may not want to run.  'nscd' caches name service lookups; it can
+dramatically improve performance with NIS+, and may help with DNS as
+well.
+
+   One auxiliary program, '/usr/libexec/pt_chown', is installed setuid
+'root' if the '--enable-pt_chown' configuration option is used.  This
+program is invoked by the 'grantpt' function; it sets the permissions on
+a pseudoterminal so it can be used by the calling process.  If you are
+using a Linux kernel with the 'devpts' filesystem enabled and mounted at
+'/dev/pts', you don't need this program.
+
+   After installation you might want to configure the timezone and
+locale installation of your system.  The GNU C Library comes with a
+locale database which gets configured with 'localedef'.  For example, to
+set up a German locale with name 'de_DE', simply issue the command
+'localedef -i de_DE -f ISO-8859-1 de_DE'.  To configure all locales that
+are supported by the GNU C Library, you can issue from your build
+directory the command 'make localedata/install-locales'.
+
+   To configure the locally used timezone, set the 'TZ' environment
+variable.  The script 'tzselect' helps you to select the right value.
+As an example, for Germany, 'tzselect' would tell you to use
+'TZ='Europe/Berlin''.  For a system wide installation (the given paths
+are for an installation with '--prefix=/usr'), link the timezone file
+which is in '/usr/share/zoneinfo' to the file '/etc/localtime'.  For
+Germany, you might execute 'ln -s /usr/share/zoneinfo/Europe/Berlin
+/etc/localtime'.
+
+Recommended Tools for Compilation
+=================================
+
+We recommend installing the following GNU tools before attempting to
+build the GNU C Library:
+
+   * GNU 'make' 3.79 or newer
+
+     You need the latest version of GNU 'make'.  Modifying the GNU C
+     Library to work with other 'make' programs would be so difficult
+     that we recommend you port GNU 'make' instead.  *Really.*  We
+     recommend GNU 'make' version 3.79.  All earlier versions have
+     severe bugs or lack features.
+
+   * GCC 4.6 or newer
+
+     GCC 4.6 or higher is required.  In general it is recommended to use
+     the newest version of the compiler that is known to work for
+     building the GNU C Library, as newer compilers usually produce
+     better code.  As of release time, GCC 4.9.2 is the newest compiler
+     verified to work to build the GNU C Library.
+
+     You can use whatever compiler you like to compile programs that use
+     the GNU C Library.
+
+     Check the FAQ for any special compiler issues on particular
+     platforms.
+
+   * GNU 'binutils' 2.22 or later
+
+     You must use GNU 'binutils' (as and ld) to build the GNU C Library.
+     No other assembler or linker has the necessary functionality at the
+     moment.  As of release time, GNU 'binutils' 2.25 is the newest
+     verified to work to build the GNU C Library.
+
+   * GNU 'texinfo' 4.7 or later
+
+     To correctly translate and install the Texinfo documentation you
+     need this version of the 'texinfo' package.  Earlier versions do
+     not understand all the tags used in the document, and the
+     installation mechanism for the info files is not present or works
+     differently.  As of release time, 'texinfo' 5.2 is the newest
+     verified to work to build the GNU C Library.
+
+   * GNU 'awk' 3.1.2, or higher
+
+     'awk' is used in several places to generate files.  Some 'gawk'
+     extensions are used, including the 'asorti' function, which was
+     introduced in version 3.1.2 of 'gawk'.
+
+   * Perl 5
+
+     Perl is not required, but it is used if present to test the
+     installation.  We may decide to use it elsewhere in the future.
+
+   * GNU 'sed' 3.02 or newer
+
+     'Sed' is used in several places to generate files.  Most scripts
+     work with any version of 'sed'.  The known exception is the script
+     'po2test.sed' in the 'intl' subdirectory which is used to generate
+     'msgs.h' for the test suite.  This script works correctly only with
+     GNU 'sed' 3.02.  If you like to run the test suite, you should
+     definitely upgrade 'sed'.
+
+If you change any of the 'configure.ac' files you will also need
+
+   * GNU 'autoconf' 2.69 (exactly)
+
+and if you change any of the message translation files you will need
+
+   * GNU 'gettext' 0.10.36 or later
+
+If you wish to regenerate the 'yacc' parser code in the 'intl'
+subdirectory you will need
+
+   * GNU 'bison' 2.7 or later
+
+You may also need these packages if you upgrade your source tree using
+patches, although we try to avoid this.
+
+Specific advice for GNU/Linux systems
+=====================================
+
+If you are installing the GNU C Library on GNU/Linux systems, you need
+to have the header files from a 2.6.32 or newer kernel around for
+reference.  These headers must be installed using 'make
+headers_install'; the headers present in the kernel source directory are
+not suitable for direct use by the GNU C Library.  You do not need to
+use that kernel, just have its headers installed where the GNU C Library
+can access them, referred to here as INSTALL-DIRECTORY.  The easiest way
+to do this is to unpack it in a directory such as
+'/usr/src/linux-VERSION'.  In that directory, run 'make headers_install
+INSTALL_HDR_PATH=INSTALL-DIRECTORY'.  Finally, configure the GNU C
+Library with the option '--with-headers=INSTALL-DIRECTORY/include'.  Use
+the most recent kernel you can get your hands on.  (If you are
+cross-compiling the GNU C Library, you need to specify
+'ARCH=ARCHITECTURE' in the 'make headers_install' command, where
+ARCHITECTURE is the architecture name used by the Linux kernel, such as
+'x86' or 'powerpc'.)
+
+   After installing the GNU C Library, you may need to remove or rename
+directories such as '/usr/include/linux' and '/usr/include/asm', and
+replace them with copies of directories such as 'linux' and 'asm' from
+'INSTALL-DIRECTORY/include'.  All directories present in
+'INSTALL-DIRECTORY/include' should be copied, except that the GNU C
+Library provides its own version of '/usr/include/scsi'; the files
+provided by the kernel should be copied without replacing those provided
+by the GNU C Library.  The 'linux', 'asm' and 'asm-generic' directories
+are required to compile programs using the GNU C Library; the other
+directories describe interfaces to the kernel but are not required if
+not compiling programs using those interfaces.  You do not need to copy
+kernel headers if you did not specify an alternate kernel header source
+using '--with-headers'.
+
+   The Filesystem Hierarchy Standard for GNU/Linux systems expects some
+components of the GNU C Library installation to be in '/lib' and some in
+'/usr/lib'.  This is handled automatically if you configure the GNU C
+Library with '--prefix=/usr'.  If you set some other prefix or allow it
+to default to '/usr/local', then all the components are installed there.
+
+Reporting Bugs
+==============
+
+There are probably bugs in the GNU C Library.  There are certainly
+errors and omissions in this manual.  If you report them, they will get
+fixed.  If you don't, no one will ever know about them and they will
+remain unfixed for all eternity, if not longer.
+
+   It is a good idea to verify that the problem has not already been
+reported.  Bugs are documented in two places: The file 'BUGS' describes
+a number of well known bugs and the central GNU C Library bug tracking
+system has a WWW interface at <http://sourceware.org/bugzilla/>.  The
+WWW interface gives you access to open and closed reports.  A closed
+report normally includes a patch or a hint on solving the problem.
+
+   To report a bug, first you must find it.  With any luck, this will be
+the hard part.  Once you've found a bug, make sure it's really a bug.  A
+good way to do this is to see if the GNU C Library behaves the same way
+some other C library does.  If so, probably you are wrong and the
+libraries are right (but not necessarily).  If not, one of the libraries
+is probably wrong.  It might not be the GNU C Library.  Many historical
+Unix C libraries permit things that we don't, such as closing a file
+twice.
+
+   If you think you have found some way in which the GNU C Library does
+not conform to the ISO and POSIX standards (*note Standards and
+Portability::), that is definitely a bug.  Report it!
+
+   Once you're sure you've found a bug, try to narrow it down to the
+smallest test case that reproduces the problem.  In the case of a C
+library, you really only need to narrow it down to one library function
+call, if possible.  This should not be too difficult.
+
+   The final step when you have a simple test case is to report the bug.
+Do this at <http://www.gnu.org/software/libc/bugs.html>.
+
+   If you are not sure how a function should behave, and this manual
+doesn't tell you, that's a bug in the manual.  Report that too!  If the
+function's behavior disagrees with the manual, then either the library
+or the manual has a bug, so report the disagreement.  If you find any
+errors or omissions in this manual, please report them to the bug
+database.  If you refer to specific sections of the manual, please
+include the section names for easier identification.