Blame INSTALL

Packit 6c4009
Installing the GNU C Library
Packit 6c4009
****************************
Packit 6c4009
Packit 6c4009
Before you do anything else, you should read the FAQ at
Packit 6c4009
<https://sourceware.org/glibc/wiki/FAQ>.  It answers common questions
Packit 6c4009
and describes problems you may experience with compilation and
Packit 6c4009
installation.
Packit 6c4009
Packit 6c4009
   You will need recent versions of several GNU tools: definitely GCC
Packit 6c4009
and GNU Make, and possibly others.  *Note Tools for Compilation::,
Packit 6c4009
below.
Packit 6c4009
Packit 6c4009
Configuring and compiling the GNU C Library
Packit 6c4009
===========================================
Packit 6c4009
Packit 6c4009
The GNU C Library cannot be compiled in the source directory.  You must
Packit 6c4009
build it in a separate build directory.  For example, if you have
Packit 6c4009
unpacked the GNU C Library sources in '/src/gnu/glibc-VERSION', create a
Packit 6c4009
directory '/src/gnu/glibc-build' to put the object files in.  This
Packit 6c4009
allows removing the whole build directory in case an error occurs, which
Packit 6c4009
is the safest way to get a fresh start and should always be done.
Packit 6c4009
Packit 6c4009
   From your object directory, run the shell script 'configure' located
Packit 6c4009
at the top level of the source tree.  In the scenario above, you'd type
Packit 6c4009
Packit 6c4009
     $ ../glibc-VERSION/configure ARGS...
Packit 6c4009
Packit 6c4009
   Please note that even though you're building in a separate build
Packit 6c4009
directory, the compilation may need to create or modify files and
Packit 6c4009
directories in the source directory.
Packit 6c4009
Packit 6c4009
'configure' takes many options, but the only one that is usually
Packit 6c4009
mandatory is '--prefix'.  This option tells 'configure' where you want
Packit 6c4009
the GNU C Library installed.  This defaults to '/usr/local', but the
Packit 6c4009
normal setting to install as the standard system library is
Packit 6c4009
'--prefix=/usr' for GNU/Linux systems and '--prefix=' (an empty prefix)
Packit 6c4009
for GNU/Hurd systems.
Packit 6c4009
Packit 6c4009
   It may also be useful to pass 'CC=COMPILER' and 'CFLAGS=FLAGS'
Packit 6c4009
arguments to 'configure'.  'CC' selects the C compiler that will be
Packit 6c4009
used, and 'CFLAGS' sets optimization options for the compiler.  Any
Packit 6c4009
compiler options required for all compilations, such as options
Packit 6c4009
selecting an ABI or a processor for which to generate code, should be
Packit 6c4009
included in 'CC'.  Options that may be overridden by the GNU C Library
Packit 6c4009
build system for particular files, such as for optimization and
Packit 6c4009
debugging, should go in 'CFLAGS'.  The default value of 'CFLAGS' is '-g
Packit 6c4009
-O2', and the GNU C Library cannot be compiled without optimization, so
Packit 6c4009
if 'CFLAGS' is specified it must enable optimization.  For example:
Packit 6c4009
Packit 6c4009
     $ ../glibc-VERSION/configure CC="gcc -m32" CFLAGS="-O3"
Packit 6c4009
Packit 6c4009
   The following list describes all of the available options for
Packit 6c4009
'configure':
Packit 6c4009
Packit 6c4009
'--prefix=DIRECTORY'
Packit 6c4009
     Install machine-independent data files in subdirectories of
Packit 6c4009
     'DIRECTORY'.  The default is to install in '/usr/local'.
Packit 6c4009
Packit 6c4009
'--exec-prefix=DIRECTORY'
Packit 6c4009
     Install the library and other machine-dependent files in
Packit 6c4009
     subdirectories of 'DIRECTORY'.  The default is to the '--prefix'
Packit 6c4009
     directory if that option is specified, or '/usr/local' otherwise.
Packit 6c4009
Packit 6c4009
'--with-headers=DIRECTORY'
Packit 6c4009
     Look for kernel header files in DIRECTORY, not '/usr/include'.  The
Packit 6c4009
     GNU C Library needs information from the kernel's header files
Packit 6c4009
     describing the interface to the kernel.  The GNU C Library will
Packit 6c4009
     normally look in '/usr/include' for them, but if you specify this
Packit 6c4009
     option, it will look in DIRECTORY instead.
Packit 6c4009
Packit 6c4009
     This option is primarily of use on a system where the headers in
Packit 6c4009
     '/usr/include' come from an older version of the GNU C Library.
Packit 6c4009
     Conflicts can occasionally happen in this case.  You can also use
Packit 6c4009
     this option if you want to compile the GNU C Library with a newer
Packit 6c4009
     set of kernel headers than the ones found in '/usr/include'.
Packit 6c4009
Packit 6c4009
'--enable-kernel=VERSION'
Packit 6c4009
     This option is currently only useful on GNU/Linux systems.  The
Packit 6c4009
     VERSION parameter should have the form X.Y.Z and describes the
Packit 6c4009
     smallest version of the Linux kernel the generated library is
Packit 6c4009
     expected to support.  The higher the VERSION number is, the less
Packit 6c4009
     compatibility code is added, and the faster the code gets.
Packit 6c4009
Packit 6c4009
'--with-binutils=DIRECTORY'
Packit 6c4009
     Use the binutils (assembler and linker) in 'DIRECTORY', not the
Packit 6c4009
     ones the C compiler would default to.  You can use this option if
Packit 6c4009
     the default binutils on your system cannot deal with all the
Packit 6c4009
     constructs in the GNU C Library.  In that case, 'configure' will
Packit 6c4009
     detect the problem and suppress these constructs, so that the
Packit 6c4009
     library will still be usable, but functionality may be lost--for
Packit 6c4009
     example, you can't build a shared libc with old binutils.
Packit 6c4009
Packit Service ee5154
'--with-nonshared-cflags=CFLAGS'
Packit Service ee5154
     Use additional compiler flags CFLAGS to build the parts of the
Packit Service ee5154
     library which are always statically linked into applications and
Packit Service ee5154
     libraries even with shared linking (that is, the object files
Packit Service ee5154
     contained in 'lib*_nonshared.a' libraries).  The build process will
Packit Service ee5154
     automatically use the appropriate flags, but this option can be
Packit Service ee5154
     used to set additional flags required for building applications and
Packit Service ee5154
     libraries, to match local policy.
Packit Service ee5154
Packit 6c4009
'--disable-shared'
Packit 6c4009
     Don't build shared libraries even if it is possible.  Not all
Packit 6c4009
     systems support shared libraries; you need ELF support and
Packit 6c4009
     (currently) the GNU linker.
Packit 6c4009
Packit 6c4009
'--enable-static-pie'
Packit 6c4009
     Enable static position independent executable (static PIE) support.
Packit 6c4009
     Static PIE is similar to static executable, but can be loaded at
Packit 6c4009
     any address without help from a dynamic linker.  All static
Packit 6c4009
     programs as well as static tests are built as static PIE, except
Packit 6c4009
     for those marked with no-pie.  The resulting glibc can be used with
Packit 6c4009
     the GCC option, -static-pie, which is available with GCC 8 or
Packit 6c4009
     above, to create static PIE. This option also implies that glibc
Packit 6c4009
     programs and tests are created as dynamic position independent
Packit 6c4009
     executables (PIE) by default.
Packit 6c4009
Packit 6c4009
'--enable-cet'
Packit Service 435039
'--enable-cet=permissive'
Packit 6c4009
     Enable Intel Control-flow Enforcement Technology (CET) support.
Packit Service 435039
     When the GNU C Library is built with '--enable-cet' or
Packit Service 435039
     '--enable-cet=permissive', the resulting library is protected with
Packit Service 435039
     indirect branch tracking (IBT) and shadow stack (SHSTK).  When CET
Packit Service 435039
     is enabled, the GNU C Library is compatible with all existing
Packit Service 435039
     executables and shared libraries.  This feature is currently
Packit Service 435039
     supported on i386, x86_64 and x32 with GCC 8 and binutils 2.29 or
Packit Service 435039
     later.  Note that when CET is enabled, the GNU C Library requires
Packit Service 435039
     CPUs capable of multi-byte NOPs, like x86-64 processors as well as
Packit Service 435039
     Intel Pentium Pro or newer.  With '--enable-cet', it is an error to
Packit Service 435039
     dlopen a non CET enabled shared library in CET enabled application.
Packit Service 435039
     With '--enable-cet=permissive', CET is disabled when dlopening a
Packit Service 435039
     non CET enabled shared library in CET enabled application.
Packit 6c4009
Packit 6c4009
     NOTE: '--enable-cet' has been tested for i686, x86_64 and x32 on
Packit Service 435039
     non-CET processors.  '--enable-cet' has been tested for i686,
Packit Service 435039
     x86_64 and x32 on CET processors.
Packit 6c4009
Packit 6c4009
'--disable-profile'
Packit 6c4009
     Don't build libraries with profiling information.  You may want to
Packit 6c4009
     use this option if you don't plan to do profiling.
Packit 6c4009
Packit 6c4009
'--enable-static-nss'
Packit 6c4009
     Compile static versions of the NSS (Name Service Switch) libraries.
Packit 6c4009
     This is not recommended because it defeats the purpose of NSS; a
Packit 6c4009
     program linked statically with the NSS libraries cannot be
Packit 6c4009
     dynamically reconfigured to use a different name database.
Packit 6c4009
Packit 6c4009
'--enable-hardcoded-path-in-tests'
Packit 6c4009
     By default, dynamic tests are linked to run with the installed C
Packit 6c4009
     library.  This option hardcodes the newly built C library path in
Packit 6c4009
     dynamic tests so that they can be invoked directly.
Packit 6c4009
Packit 6c4009
'--disable-timezone-tools'
Packit 6c4009
     By default, timezone related utilities ('zic', 'zdump', and
Packit 6c4009
     'tzselect') are installed with the GNU C Library.  If you are
Packit 6c4009
     building these independently (e.g.  by using the 'tzcode' package),
Packit 6c4009
     then this option will allow disabling the install of these.
Packit 6c4009
Packit 6c4009
     Note that you need to make sure the external tools are kept in sync
Packit 6c4009
     with the versions that the GNU C Library expects as the data
Packit 6c4009
     formats may change over time.  Consult the 'timezone' subdirectory
Packit 6c4009
     for more details.
Packit 6c4009
Packit 6c4009
'--enable-stack-protector'
Packit 6c4009
'--enable-stack-protector=strong'
Packit 6c4009
'--enable-stack-protector=all'
Packit 6c4009
     Compile the C library and all other parts of the glibc package
Packit 6c4009
     (including the threading and math libraries, NSS modules, and
Packit 6c4009
     transliteration modules) using the GCC '-fstack-protector',
Packit 6c4009
     '-fstack-protector-strong' or '-fstack-protector-all' options to
Packit 6c4009
     detect stack overruns.  Only the dynamic linker and a small number
Packit 6c4009
     of routines called directly from assembler are excluded from this
Packit 6c4009
     protection.
Packit 6c4009
Packit 6c4009
'--enable-bind-now'
Packit Service 10c13b
     Disable lazy binding for installed shared objects and programs.
Packit Service 10c13b
     This provides additional security hardening because it enables full
Packit Service 10c13b
     RELRO and a read-only global offset table (GOT), at the cost of
Packit Service 10c13b
     slightly increased program load times.
Packit 6c4009
Packit 6c4009
'--enable-pt_chown'
Packit 6c4009
     The file 'pt_chown' is a helper binary for 'grantpt' (*note
Packit 6c4009
     Pseudo-Terminals: Allocation.) that is installed setuid root to fix
Packit 6c4009
     up pseudo-terminal ownership.  It is not built by default because
Packit 6c4009
     systems using the Linux kernel are commonly built with the 'devpts'
Packit 6c4009
     filesystem enabled and mounted at '/dev/pts', which manages
Packit 6c4009
     pseudo-terminal ownership automatically.  By using
Packit 6c4009
     '--enable-pt_chown', you may build 'pt_chown' and install it setuid
Packit 6c4009
     and owned by 'root'.  The use of 'pt_chown' introduces additional
Packit 6c4009
     security risks to the system and you should enable it only if you
Packit 6c4009
     understand and accept those risks.
Packit 6c4009
Packit 6c4009
'--disable-werror'
Packit 6c4009
     By default, the GNU C Library is built with '-Werror'.  If you wish
Packit 6c4009
     to build without this option (for example, if building with a newer
Packit 6c4009
     version of GCC than this version of the GNU C Library was tested
Packit 6c4009
     with, so new warnings cause the build with '-Werror' to fail), you
Packit 6c4009
     can configure with '--disable-werror'.
Packit 6c4009
Packit 6c4009
'--disable-mathvec'
Packit 6c4009
     By default for x86_64, the GNU C Library is built with the vector
Packit 6c4009
     math library.  Use this option to disable the vector math library.
Packit 6c4009
Packit 6c4009
'--enable-tunables'
Packit 6c4009
     Tunables support allows additional library parameters to be
Packit 6c4009
     customized at runtime.  This feature is enabled by default.  This
Packit 6c4009
     option can take the following values:
Packit 6c4009
Packit 6c4009
     'yes'
Packit 6c4009
          This is the default if no option is passed to configure.  This
Packit 6c4009
          enables tunables and selects the default frontend (currently
Packit 6c4009
          'valstring').
Packit 6c4009
Packit 6c4009
     'no'
Packit 6c4009
          This option disables tunables.
Packit 6c4009
Packit 6c4009
     'valstring'
Packit 6c4009
          This enables tunables and selects the 'valstring' frontend for
Packit 6c4009
          tunables.  This frontend allows users to specify tunables as a
Packit 6c4009
          colon-separated list in a single environment variable
Packit 6c4009
          'GLIBC_TUNABLES'.
Packit 6c4009
Packit 6c4009
'--enable-obsolete-nsl'
Packit 6c4009
     By default, libnsl is only built as shared library for backward
Packit 6c4009
     compatibility and the NSS modules libnss_compat, libnss_nis and
Packit 6c4009
     libnss_nisplus are not built at all.  Use this option to enable
Packit 6c4009
     libnsl with all depending NSS modules and header files.
Packit 6c4009
Packit 6c4009
'--disable-crypt'
Packit 6c4009
     Do not install the passphrase-hashing library 'libcrypt' or the
Packit 6c4009
     header file 'crypt.h'.  'unistd.h' will still declare the function
Packit 6c4009
     'crypt'.  Using this option does not change the set of programs
Packit 6c4009
     that may need to be linked with '-lcrypt'; it only means that the
Packit 6c4009
     GNU C Library will not provide that library.
Packit 6c4009
Packit 6c4009
     This option is for hackers and distributions experimenting with
Packit 6c4009
     independently-maintained implementations of libcrypt.  It may
Packit 6c4009
     become the default in a future release.
Packit 6c4009
Packit 6c4009
'--disable-experimental-malloc'
Packit 6c4009
     By default, a per-thread cache is enabled in 'malloc'.  While this
Packit 6c4009
     cache can be disabled on a per-application basis using tunables
Packit 6c4009
     (set glibc.malloc.tcache_count to zero), this option can be used to
Packit 6c4009
     remove it from the build completely.
Packit 6c4009
Packit 6c4009
'--build=BUILD-SYSTEM'
Packit 6c4009
'--host=HOST-SYSTEM'
Packit 6c4009
     These options are for cross-compiling.  If you specify both options
Packit 6c4009
     and BUILD-SYSTEM is different from HOST-SYSTEM, 'configure' will
Packit 6c4009
     prepare to cross-compile the GNU C Library from BUILD-SYSTEM to be
Packit 6c4009
     used on HOST-SYSTEM.  You'll probably need the '--with-headers'
Packit 6c4009
     option too, and you may have to override CONFIGURE's selection of
Packit 6c4009
     the compiler and/or binutils.
Packit 6c4009
Packit 6c4009
     If you only specify '--host', 'configure' will prepare for a native
Packit 6c4009
     compile but use what you specify instead of guessing what your
Packit 6c4009
     system is.  This is most useful to change the CPU submodel.  For
Packit 6c4009
     example, if 'configure' guesses your machine as 'i686-pc-linux-gnu'
Packit 6c4009
     but you want to compile a library for 586es, give
Packit 6c4009
     '--host=i586-pc-linux-gnu' or just '--host=i586-linux' and add the
Packit 6c4009
     appropriate compiler flags ('-mcpu=i586' will do the trick) to
Packit 6c4009
     'CC'.
Packit 6c4009
Packit 6c4009
     If you specify just '--build', 'configure' will get confused.
Packit 6c4009
Packit 6c4009
'--with-pkgversion=VERSION'
Packit 6c4009
     Specify a description, possibly including a build number or build
Packit 6c4009
     date, of the binaries being built, to be included in '--version'
Packit 6c4009
     output from programs installed with the GNU C Library.  For
Packit 6c4009
     example, '--with-pkgversion='FooBar GNU/Linux glibc build 123''.
Packit 6c4009
     The default value is 'GNU libc'.
Packit 6c4009
Packit 6c4009
'--with-bugurl=URL'
Packit 6c4009
     Specify the URL that users should visit if they wish to report a
Packit 6c4009
     bug, to be included in '--help' output from programs installed with
Packit 6c4009
     the GNU C Library.  The default value refers to the main
Packit 6c4009
     bug-reporting information for the GNU C Library.
Packit 6c4009
Packit 6c4009
   To build the library and related programs, type 'make'.  This will
Packit 6c4009
produce a lot of output, some of which may look like errors from 'make'
Packit 6c4009
but aren't.  Look for error messages from 'make' containing '***'.
Packit 6c4009
Those indicate that something is seriously wrong.
Packit 6c4009
Packit 6c4009
   The compilation process can take a long time, depending on the
Packit 6c4009
configuration and the speed of your machine.  Some complex modules may
Packit 6c4009
take a very long time to compile, as much as several minutes on slower
Packit 6c4009
machines.  Do not panic if the compiler appears to hang.
Packit 6c4009
Packit 6c4009
   If you want to run a parallel make, simply pass the '-j' option with
Packit 6c4009
an appropriate numeric parameter to 'make'.  You need a recent GNU
Packit 6c4009
'make' version, though.
Packit 6c4009
Packit 6c4009
   To build and run test programs which exercise some of the library
Packit 6c4009
facilities, type 'make check'.  If it does not complete successfully, do
Packit 6c4009
not use the built library, and report a bug after verifying that the
Packit 6c4009
problem is not already known.  *Note Reporting Bugs::, for instructions
Packit 6c4009
on reporting bugs.  Note that some of the tests assume they are not
Packit 6c4009
being run by 'root'.  We recommend you compile and test the GNU C
Packit 6c4009
Library as an unprivileged user.
Packit 6c4009
Packit 6c4009
   Before reporting bugs make sure there is no problem with your system.
Packit 6c4009
The tests (and later installation) use some pre-existing files of the
Packit 6c4009
system such as '/etc/passwd', '/etc/nsswitch.conf' and others.  These
Packit 6c4009
files must all contain correct and sensible content.
Packit 6c4009
Packit 6c4009
   Normally, 'make check' will run all the tests before reporting all
Packit 6c4009
problems found and exiting with error status if any problems occurred.
Packit 6c4009
You can specify 'stop-on-test-failure=y' when running 'make check' to
Packit 6c4009
make the test run stop and exit with an error status immediately when a
Packit 6c4009
failure occurs.
Packit 6c4009
Packit 6c4009
   The GNU C Library pretty printers come with their own set of scripts
Packit 6c4009
for testing, which run together with the rest of the testsuite through
Packit 6c4009
'make check'.  These scripts require the following tools to run
Packit 6c4009
successfully:
Packit 6c4009
Packit 6c4009
   * Python 2.7/3.4 or later
Packit 6c4009
Packit 6c4009
     Python is required for running the printers' test scripts.  As of
Packit 6c4009
     release time, Python 3.6 is the newest verified to work to test the
Packit 6c4009
     pretty printers.
Packit 6c4009
Packit 6c4009
   * PExpect 4.0
Packit 6c4009
Packit 6c4009
     The printer tests drive GDB through test programs and compare its
Packit 6c4009
     output to the printers'.  PExpect is used to capture the output of
Packit 6c4009
     GDB, and should be compatible with the Python version in your
Packit 6c4009
     system.  As of release time PExpect 4.3 is the newest verified to
Packit 6c4009
     work to test the pretty printers.
Packit 6c4009
Packit 6c4009
   * GDB 7.8 or later with support for Python 2.7/3.4 or later
Packit 6c4009
Packit 6c4009
     GDB itself needs to be configured with Python support in order to
Packit 6c4009
     use the pretty printers.  Notice that your system having Python
Packit 6c4009
     available doesn't imply that GDB supports it, nor that your
Packit 6c4009
     system's Python and GDB's have the same version.  As of release
Packit 6c4009
     time GNU 'debugger' 8.0.1 is the newest verified to work to test
Packit 6c4009
     the pretty printers.
Packit 6c4009
Packit 6c4009
If these tools are absent, the printer tests will report themselves as
Packit 6c4009
'UNSUPPORTED'.  Notice that some of the printer tests require the GNU C
Packit 6c4009
Library to be compiled with debugging symbols.
Packit 6c4009
Packit 6c4009
   To format the 'GNU C Library Reference Manual' for printing, type
Packit 6c4009
'make dvi'.  You need a working TeX installation to do this.  The
Packit 6c4009
distribution builds the on-line formatted version of the manual, as Info
Packit 6c4009
files, as part of the build process.  You can build them manually with
Packit 6c4009
'make info'.
Packit 6c4009
Packit 6c4009
   The library has a number of special-purpose configuration parameters
Packit 6c4009
which you can find in 'Makeconfig'.  These can be overwritten with the
Packit 6c4009
file 'configparms'.  To change them, create a 'configparms' in your
Packit 6c4009
build directory and add values as appropriate for your system.  The file
Packit 6c4009
is included and parsed by 'make' and has to follow the conventions for
Packit 6c4009
makefiles.
Packit 6c4009
Packit 6c4009
   It is easy to configure the GNU C Library for cross-compilation by
Packit 6c4009
setting a few variables in 'configparms'.  Set 'CC' to the
Packit 6c4009
cross-compiler for the target you configured the library for; it is
Packit 6c4009
important to use this same 'CC' value when running 'configure', like
Packit 6c4009
this: 'configure TARGET CC=TARGET-gcc'.  Set 'BUILD_CC' to the compiler
Packit 6c4009
to use for programs run on the build system as part of compiling the
Packit 6c4009
library.  You may need to set 'AR' to cross-compiling versions of 'ar'
Packit 6c4009
if the native tools are not configured to work with object files for the
Packit 6c4009
target you configured for.  When cross-compiling the GNU C Library, it
Packit 6c4009
may be tested using 'make check
Packit 6c4009
test-wrapper="SRCDIR/scripts/cross-test-ssh.sh HOSTNAME"', where SRCDIR
Packit 6c4009
is the absolute directory name for the main source directory and
Packit 6c4009
HOSTNAME is the host name of a system that can run the newly built
Packit 6c4009
binaries of the GNU C Library.  The source and build directories must be
Packit 6c4009
visible at the same locations on both the build system and HOSTNAME.
Packit 6c4009
Packit 6c4009
   In general, when testing the GNU C Library, 'test-wrapper' may be set
Packit 6c4009
to the name and arguments of any program to run newly built binaries.
Packit 6c4009
This program must preserve the arguments to the binary being run, its
Packit 6c4009
working directory and the standard input, output and error file
Packit 6c4009
descriptors.  If 'TEST-WRAPPER env' will not work to run a program with
Packit 6c4009
environment variables set, then 'test-wrapper-env' must be set to a
Packit 6c4009
program that runs a newly built program with environment variable
Packit 6c4009
assignments in effect, those assignments being specified as 'VAR=VALUE'
Packit 6c4009
before the name of the program to be run.  If multiple assignments to
Packit 6c4009
the same variable are specified, the last assignment specified must take
Packit 6c4009
precedence.  Similarly, if 'TEST-WRAPPER env -i' will not work to run a
Packit 6c4009
program with an environment completely empty of variables except those
Packit 6c4009
directly assigned, then 'test-wrapper-env-only' must be set; its use has
Packit 6c4009
the same syntax as 'test-wrapper-env', the only difference in its
Packit 6c4009
semantics being starting with an empty set of environment variables
Packit 6c4009
rather than the ambient set.
Packit 6c4009
Packit 6c4009
Installing the C Library
Packit 6c4009
========================
Packit 6c4009
Packit 6c4009
To install the library and its header files, and the Info files of the
Packit 6c4009
manual, type 'make install'.  This will build things, if necessary,
Packit 6c4009
before installing them; however, you should still compile everything
Packit 6c4009
first.  If you are installing the GNU C Library as your primary C
Packit 6c4009
library, we recommend that you shut the system down to single-user mode
Packit 6c4009
first, and reboot afterward.  This minimizes the risk of breaking things
Packit 6c4009
when the library changes out from underneath.
Packit 6c4009
Packit 6c4009
   'make install' will do the entire job of upgrading from a previous
Packit 6c4009
installation of the GNU C Library version 2.x.  There may sometimes be
Packit 6c4009
headers left behind from the previous installation, but those are
Packit 6c4009
generally harmless.  If you want to avoid leaving headers behind you can
Packit 6c4009
do things in the following order.
Packit 6c4009
Packit 6c4009
   You must first build the library ('make'), optionally check it ('make
Packit 6c4009
check'), switch the include directories and then install ('make
Packit 6c4009
install').  The steps must be done in this order.  Not moving the
Packit 6c4009
directory before install will result in an unusable mixture of header
Packit 6c4009
files from both libraries, but configuring, building, and checking the
Packit 6c4009
library requires the ability to compile and run programs against the old
Packit 6c4009
library.  The new '/usr/include', after switching the include
Packit 6c4009
directories and before installing the library should contain the Linux
Packit 6c4009
headers, but nothing else.  If you do this, you will need to restore any
Packit 6c4009
headers from libraries other than the GNU C Library yourself after
Packit 6c4009
installing the library.
Packit 6c4009
Packit 6c4009
   You can install the GNU C Library somewhere other than where you
Packit 6c4009
configured it to go by setting the 'DESTDIR' GNU standard make variable
Packit 6c4009
on the command line for 'make install'.  The value of this variable is
Packit 6c4009
prepended to all the paths for installation.  This is useful when
Packit 6c4009
setting up a chroot environment or preparing a binary distribution.  The
Packit 6c4009
directory should be specified with an absolute file name.  Installing
Packit 6c4009
with the 'prefix' and 'exec_prefix' GNU standard make variables set is
Packit 6c4009
not supported.
Packit 6c4009
Packit 6c4009
   The GNU C Library includes a daemon called 'nscd', which you may or
Packit 6c4009
may not want to run.  'nscd' caches name service lookups; it can
Packit 6c4009
dramatically improve performance with NIS+, and may help with DNS as
Packit 6c4009
well.
Packit 6c4009
Packit 6c4009
   One auxiliary program, '/usr/libexec/pt_chown', is installed setuid
Packit 6c4009
'root' if the '--enable-pt_chown' configuration option is used.  This
Packit 6c4009
program is invoked by the 'grantpt' function; it sets the permissions on
Packit 6c4009
a pseudoterminal so it can be used by the calling process.  If you are
Packit 6c4009
using a Linux kernel with the 'devpts' filesystem enabled and mounted at
Packit 6c4009
'/dev/pts', you don't need this program.
Packit 6c4009
Packit 6c4009
   After installation you might want to configure the timezone and
Packit 6c4009
locale installation of your system.  The GNU C Library comes with a
Packit 6c4009
locale database which gets configured with 'localedef'.  For example, to
Packit 6c4009
set up a German locale with name 'de_DE', simply issue the command
Packit 6c4009
'localedef -i de_DE -f ISO-8859-1 de_DE'.  To configure all locales that
Packit 6c4009
are supported by the GNU C Library, you can issue from your build
Packit 6c4009
directory the command 'make localedata/install-locales'.
Packit 6c4009
Packit 6c4009
   To configure the locally used timezone, set the 'TZ' environment
Packit 6c4009
variable.  The script 'tzselect' helps you to select the right value.
Packit 6c4009
As an example, for Germany, 'tzselect' would tell you to use
Packit 6c4009
'TZ='Europe/Berlin''.  For a system wide installation (the given paths
Packit 6c4009
are for an installation with '--prefix=/usr'), link the timezone file
Packit 6c4009
which is in '/usr/share/zoneinfo' to the file '/etc/localtime'.  For
Packit 6c4009
Germany, you might execute 'ln -s /usr/share/zoneinfo/Europe/Berlin
Packit 6c4009
/etc/localtime'.
Packit 6c4009
Packit 6c4009
Recommended Tools for Compilation
Packit 6c4009
=================================
Packit 6c4009
Packit 6c4009
We recommend installing the following GNU tools before attempting to
Packit 6c4009
build the GNU C Library:
Packit 6c4009
Packit 6c4009
   * GNU 'make' 4.0 or newer
Packit 6c4009
Packit 6c4009
     As of relase time, GNU 'make' 4.2.1 is the newest verified to work
Packit 6c4009
     to build the GNU C Library.
Packit 6c4009
Packit 6c4009
   * GCC 4.9 or newer
Packit 6c4009
Packit 6c4009
     GCC 4.9 or higher is required.  In general it is recommended to use
Packit 6c4009
     the newest version of the compiler that is known to work for
Packit 6c4009
     building the GNU C Library, as newer compilers usually produce
Packit 6c4009
     better code.  As of release time, GCC 8.1.1 is the newest compiler
Packit 6c4009
     verified to work to build the GNU C Library.
Packit 6c4009
Packit 6c4009
     For PowerPC 64-bits little-endian (powerpc64le), GCC 6.2 or higher
Packit 6c4009
     is required.  This compiler version is the first to provide the
Packit 6c4009
     features required for building the GNU C Library with support for
Packit 6c4009
     '_Float128'.
Packit 6c4009
Packit 6c4009
     For multi-arch support it is recommended to use a GCC which has
Packit 6c4009
     been built with support for GNU indirect functions.  This ensures
Packit 6c4009
     that correct debugging information is generated for functions
Packit 6c4009
     selected by IFUNC resolvers.  This support can either be enabled by
Packit 6c4009
     configuring GCC with '--enable-gnu-indirect-function', or by
Packit 6c4009
     enabling it by default by setting 'default_gnu_indirect_function'
Packit 6c4009
     variable for a particular architecture in the GCC source file
Packit 6c4009
     'gcc/config.gcc'.
Packit 6c4009
Packit 6c4009
     You can use whatever compiler you like to compile programs that use
Packit 6c4009
     the GNU C Library.
Packit 6c4009
Packit 6c4009
     Check the FAQ for any special compiler issues on particular
Packit 6c4009
     platforms.
Packit 6c4009
Packit 6c4009
   * GNU 'binutils' 2.25 or later
Packit 6c4009
Packit 6c4009
     You must use GNU 'binutils' (as and ld) to build the GNU C Library.
Packit 6c4009
     No other assembler or linker has the necessary functionality at the
Packit 6c4009
     moment.  As of release time, GNU 'binutils' 2.31.1 is the newest
Packit 6c4009
     verified to work to build the GNU C Library.
Packit 6c4009
Packit 6c4009
   * GNU 'texinfo' 4.7 or later
Packit 6c4009
Packit 6c4009
     To correctly translate and install the Texinfo documentation you
Packit 6c4009
     need this version of the 'texinfo' package.  Earlier versions do
Packit 6c4009
     not understand all the tags used in the document, and the
Packit 6c4009
     installation mechanism for the info files is not present or works
Packit 6c4009
     differently.  As of release time, 'texinfo' 6.5 is the newest
Packit 6c4009
     verified to work to build the GNU C Library.
Packit 6c4009
Packit 6c4009
   * GNU 'awk' 3.1.2, or higher
Packit 6c4009
Packit 6c4009
     'awk' is used in several places to generate files.  Some 'gawk'
Packit 6c4009
     extensions are used, including the 'asorti' function, which was
Packit 6c4009
     introduced in version 3.1.2 of 'gawk'.  As of release time, 'gawk'
Packit 6c4009
     version 4.2.1 is the newest verified to work to build the GNU C
Packit 6c4009
     Library.
Packit 6c4009
Packit 6c4009
   * GNU 'bison' 2.7 or later
Packit 6c4009
Packit 6c4009
     'bison' is used to generate the 'yacc' parser code in the 'intl'
Packit 6c4009
     subdirectory.  As of release time, 'bison' version 3.0.4 is the
Packit 6c4009
     newest verified to work to build the GNU C Library.
Packit 6c4009
Packit 6c4009
   * Perl 5
Packit 6c4009
Packit 6c4009
     Perl is not required, but it is used if present to test the
Packit 6c4009
     installation.  We may decide to use it elsewhere in the future.  As
Packit 6c4009
     of release time 'perl' version 5.28.0 is the newest verified to
Packit 6c4009
     work to build the GNU C Library.
Packit 6c4009
Packit 6c4009
   * GNU 'sed' 3.02 or newer
Packit 6c4009
Packit 6c4009
     'Sed' is used in several places to generate files.  Most scripts
Packit 6c4009
     work with any version of 'sed'.  As of release time, 'sed' version
Packit 6c4009
     4.5 is the newest verified to work to build the GNU C Library.
Packit 6c4009
Packit 6c4009
If you change any of the 'configure.ac' files you will also need
Packit 6c4009
Packit 6c4009
   * GNU 'autoconf' 2.69 (exactly)
Packit 6c4009
Packit 6c4009
and if you change any of the message translation files you will need
Packit 6c4009
Packit 6c4009
   * GNU 'gettext' 0.10.36 or later
Packit 6c4009
Packit 6c4009
     As of release time, GNU 'gettext' version 0.19.8.1 is the newest
Packit 6c4009
     version verified to work to build the GNU C Library.
Packit 6c4009
Packit 6c4009
You may also need these packages if you upgrade your source tree using
Packit 6c4009
patches, although we try to avoid this.
Packit 6c4009
Packit 6c4009
Specific advice for GNU/Linux systems
Packit 6c4009
=====================================
Packit 6c4009
Packit 6c4009
If you are installing the GNU C Library on GNU/Linux systems, you need
Packit 6c4009
to have the header files from a 3.2 or newer kernel around for
Packit 6c4009
reference.  (For the ia64 architecture, you need version 3.2.18 or newer
Packit 6c4009
because this is the first version with support for the 'accept4' system
Packit 6c4009
call.)  These headers must be installed using 'make headers_install';
Packit 6c4009
the headers present in the kernel source directory are not suitable for
Packit 6c4009
direct use by the GNU C Library.  You do not need to use that kernel,
Packit 6c4009
just have its headers installed where the GNU C Library can access them,
Packit 6c4009
referred to here as INSTALL-DIRECTORY.  The easiest way to do this is to
Packit 6c4009
unpack it in a directory such as '/usr/src/linux-VERSION'.  In that
Packit 6c4009
directory, run 'make headers_install
Packit 6c4009
INSTALL_HDR_PATH=INSTALL-DIRECTORY'.  Finally, configure the GNU C
Packit 6c4009
Library with the option '--with-headers=INSTALL-DIRECTORY/include'.  Use
Packit 6c4009
the most recent kernel you can get your hands on.  (If you are
Packit 6c4009
cross-compiling the GNU C Library, you need to specify
Packit 6c4009
'ARCH=ARCHITECTURE' in the 'make headers_install' command, where
Packit 6c4009
ARCHITECTURE is the architecture name used by the Linux kernel, such as
Packit 6c4009
'x86' or 'powerpc'.)
Packit 6c4009
Packit 6c4009
   After installing the GNU C Library, you may need to remove or rename
Packit 6c4009
directories such as '/usr/include/linux' and '/usr/include/asm', and
Packit 6c4009
replace them with copies of directories such as 'linux' and 'asm' from
Packit 6c4009
'INSTALL-DIRECTORY/include'.  All directories present in
Packit 6c4009
'INSTALL-DIRECTORY/include' should be copied, except that the GNU C
Packit 6c4009
Library provides its own version of '/usr/include/scsi'; the files
Packit 6c4009
provided by the kernel should be copied without replacing those provided
Packit 6c4009
by the GNU C Library.  The 'linux', 'asm' and 'asm-generic' directories
Packit 6c4009
are required to compile programs using the GNU C Library; the other
Packit 6c4009
directories describe interfaces to the kernel but are not required if
Packit 6c4009
not compiling programs using those interfaces.  You do not need to copy
Packit 6c4009
kernel headers if you did not specify an alternate kernel header source
Packit 6c4009
using '--with-headers'.
Packit 6c4009
Packit 6c4009
   The Filesystem Hierarchy Standard for GNU/Linux systems expects some
Packit 6c4009
components of the GNU C Library installation to be in '/lib' and some in
Packit 6c4009
'/usr/lib'.  This is handled automatically if you configure the GNU C
Packit 6c4009
Library with '--prefix=/usr'.  If you set some other prefix or allow it
Packit 6c4009
to default to '/usr/local', then all the components are installed there.
Packit 6c4009
Packit 6c4009
Reporting Bugs
Packit 6c4009
==============
Packit 6c4009
Packit 6c4009
There are probably bugs in the GNU C Library.  There are certainly
Packit 6c4009
errors and omissions in this manual.  If you report them, they will get
Packit 6c4009
fixed.  If you don't, no one will ever know about them and they will
Packit 6c4009
remain unfixed for all eternity, if not longer.
Packit 6c4009
Packit 6c4009
   It is a good idea to verify that the problem has not already been
Packit 6c4009
reported.  Bugs are documented in two places: The file 'BUGS' describes
Packit 6c4009
a number of well known bugs and the central GNU C Library bug tracking
Packit 6c4009
system has a WWW interface at <https://sourceware.org/bugzilla/>.  The
Packit 6c4009
WWW interface gives you access to open and closed reports.  A closed
Packit 6c4009
report normally includes a patch or a hint on solving the problem.
Packit 6c4009
Packit 6c4009
   To report a bug, first you must find it.  With any luck, this will be
Packit 6c4009
the hard part.  Once you've found a bug, make sure it's really a bug.  A
Packit 6c4009
good way to do this is to see if the GNU C Library behaves the same way
Packit 6c4009
some other C library does.  If so, probably you are wrong and the
Packit 6c4009
libraries are right (but not necessarily).  If not, one of the libraries
Packit 6c4009
is probably wrong.  It might not be the GNU C Library.  Many historical
Packit 6c4009
Unix C libraries permit things that we don't, such as closing a file
Packit 6c4009
twice.
Packit 6c4009
Packit 6c4009
   If you think you have found some way in which the GNU C Library does
Packit 6c4009
not conform to the ISO and POSIX standards (*note Standards and
Packit 6c4009
Portability::), that is definitely a bug.  Report it!
Packit 6c4009
Packit 6c4009
   Once you're sure you've found a bug, try to narrow it down to the
Packit 6c4009
smallest test case that reproduces the problem.  In the case of a C
Packit 6c4009
library, you really only need to narrow it down to one library function
Packit 6c4009
call, if possible.  This should not be too difficult.
Packit 6c4009
Packit 6c4009
   The final step when you have a simple test case is to report the bug.
Packit 6c4009
Do this at <http://www.gnu.org/software/libc/bugs.html>.
Packit 6c4009
Packit 6c4009
   If you are not sure how a function should behave, and this manual
Packit 6c4009
doesn't tell you, that's a bug in the manual.  Report that too!  If the
Packit 6c4009
function's behavior disagrees with the manual, then either the library
Packit 6c4009
or the manual has a bug, so report the disagreement.  If you find any
Packit 6c4009
errors or omissions in this manual, please report them to the bug
Packit 6c4009
database.  If you refer to specific sections of the manual, please
Packit 6c4009
include the section names for easier identification.