Blame INSTALL

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