1@include macros.texi 2@include pkgvers.texi 3 4@ifclear plain 5@node Installation, Maintenance, Library Summary, Top 6@end ifclear 7 8@c %MENU% How to install the GNU C Library 9@appendix Installing @theglibc{} 10 11Before you do anything else, you should read the FAQ at 12@url{https://sourceware.org/glibc/wiki/FAQ}. It answers common 13questions and describes problems you may experience with compilation 14and installation. 15 16You will need recent versions of several GNU tools: definitely GCC and 17GNU Make, and possibly others. @xref{Tools for Compilation}, below. 18 19@ifclear plain 20@menu 21* Configuring and compiling:: How to compile and test GNU libc. 22* Running make install:: How to install it once you've got it 23 compiled. 24* Tools for Compilation:: You'll need these first. 25* Linux:: Specific advice for GNU/Linux systems. 26* Reporting Bugs:: So they'll get fixed. 27@end menu 28@end ifclear 29 30@node Configuring and compiling 31@appendixsec Configuring and compiling @theglibc{} 32@cindex configuring 33@cindex compiling 34 35@Theglibc{} cannot be compiled in the source directory. You must build 36it in a separate build directory. For example, if you have unpacked 37the @glibcadj{} sources in @file{/src/gnu/glibc-@var{version}}, 38create a directory 39@file{/src/gnu/glibc-build} to put the object files in. This allows 40removing the whole build directory in case an error occurs, which is 41the safest way to get a fresh start and should always be done. 42 43From your object directory, run the shell script @file{configure} located 44at the top level of the source tree. In the scenario above, you'd type 45 46@smallexample 47$ ../glibc-@var{version}/configure @var{args@dots{}} 48@end smallexample 49 50Please note that even though you're building in a separate build 51directory, the compilation may need to create or modify files and 52directories in the source directory. 53 54@noindent 55@code{configure} takes many options, but the only one that is usually 56mandatory is @samp{--prefix}. This option tells @code{configure} 57where you want @theglibc{} installed. This defaults to @file{/usr/local}, 58but the normal setting to install as the standard system library is 59@samp{--prefix=/usr} for @gnulinuxsystems{} and @samp{--prefix=} (an 60empty prefix) for @gnuhurdsystems{}. 61 62It may also be useful to pass @samp{CC=@var{compiler}} and 63@code{CFLAGS=@var{flags}} arguments to @code{configure}. @code{CC} 64selects the C compiler that will be used, and @code{CFLAGS} sets 65optimization options for the compiler. Any compiler options required 66for all compilations, such as options selecting an ABI or a processor 67for which to generate code, should be included in @code{CC}. Options 68that may be overridden by the @glibcadj{} build system for particular 69files, such as for optimization and debugging, should go in 70@code{CFLAGS}. The default value of @code{CFLAGS} is @samp{-g -O2}, 71and @theglibc{} cannot be compiled without optimization, so if 72@code{CFLAGS} is specified it must enable optimization. For example: 73 74@smallexample 75$ ../glibc-@var{version}/configure CC="gcc -m32" CFLAGS="-O3" 76@end smallexample 77 78The following list describes all of the available options for 79 @code{configure}: 80 81@table @samp 82@item --prefix=@var{directory} 83Install machine-independent data files in subdirectories of 84@file{@var{directory}}. The default is to install in @file{/usr/local}. 85 86@item --exec-prefix=@var{directory} 87Install the library and other machine-dependent files in subdirectories 88of @file{@var{directory}}. The default is to the @samp{--prefix} 89directory if that option is specified, or @file{/usr/local} otherwise. 90 91@item --with-headers=@var{directory} 92Look for kernel header files in @var{directory}, not 93@file{/usr/include}. @Theglibc{} needs information from the kernel's header 94files describing the interface to the kernel. @Theglibc{} will normally 95look in @file{/usr/include} for them, 96but if you specify this option, it will look in @var{DIRECTORY} instead. 97 98This option is primarily of use on a system where the headers in 99@file{/usr/include} come from an older version of @theglibc{}. Conflicts can 100occasionally happen in this case. You can also use this option if you want to 101compile @theglibc{} with a newer set of kernel headers than the ones found in 102@file{/usr/include}. 103 104@item --enable-kernel=@var{version} 105This option is currently only useful on @gnulinuxsystems{}. The 106@var{version} parameter should have the form X.Y.Z and describes the 107smallest version of the Linux kernel the generated library is expected 108to support. The higher the @var{version} number is, the less 109compatibility code is added, and the faster the code gets. 110 111@item --with-binutils=@var{directory} 112Use the binutils (assembler and linker) in @file{@var{directory}}, not 113the ones the C compiler would default to. You can use this option if 114the default binutils on your system cannot deal with all the constructs 115in @theglibc{}. In that case, @code{configure} will detect the 116problem and suppress these constructs, so that the library will still be 117usable, but functionality may be lost---for example, you can't build a 118shared libc with old binutils. 119 120@item --with-nonshared-cflags=@var{cflags} 121Use additional compiler flags @var{cflags} to build the parts of the 122library which are always statically linked into applications and 123libraries even with shared linking (that is, the object files contained 124in @file{lib*_nonshared.a} libraries). The build process will 125automatically use the appropriate flags, but this option can be used to 126set additional flags required for building applications and libraries, 127to match local policy. For example, if such a policy requires that all 128code linked into applications must be built with source fortification, 129@samp{--with-nonshared-cflags=-Wp,-D_FORTIFY_SOURCE=2} will make sure 130that the objects in @file{libc_nonshared.a} are compiled with this flag 131(although this will not affect the generated code in this particular 132case and potentially change debugging information and metadata only). 133 134@item --with-timeoutfactor=@var{NUM} 135Specify an integer @var{NUM} to scale the timeout of test programs. 136This factor can be changed at run time using @env{TIMEOUTFACTOR} 137environment variable. 138 139@c disable static doesn't work currently 140@c @item --disable-static 141@c Don't build static libraries. Static libraries aren't that useful these 142@c days, but we recommend you build them in case you need them. 143 144@item --disable-shared 145Don't build shared libraries even if it is possible. Not all systems 146support shared libraries; you need ELF support and (currently) the GNU 147linker. 148 149@item --disable-default-pie 150Don't build glibc programs and the testsuite as position independent 151executables (PIE). By default, glibc programs and tests are created as 152position independent executables on targets that support it. If the toolchain 153and architecture support it, static executables are built as static PIE and the 154resulting glibc can be used with the GCC option, -static-pie, which is 155available with GCC 8 or above, to create static PIE. 156 157@item --enable-cet 158@itemx --enable-cet=permissive 159Enable Intel Control-flow Enforcement Technology (CET) support. When 160@theglibc{} is built with @option{--enable-cet} or 161@option{--enable-cet=permissive}, the resulting library 162is protected with indirect branch tracking (IBT) and shadow stack 163(SHSTK)@. When CET is enabled, @theglibc{} is compatible with all 164existing executables and shared libraries. This feature is currently 165supported on i386, x86_64 and x32 with GCC 8 and binutils 2.29 or later. 166Note that when CET is enabled, @theglibc{} requires CPUs capable of 167multi-byte NOPs, like x86-64 processors as well as Intel Pentium Pro or 168newer. With @option{--enable-cet}, it is an error to dlopen a non CET 169enabled shared library in CET enabled application. With 170@option{--enable-cet=permissive}, CET is disabled when dlopening a 171non CET enabled shared library in CET enabled application. 172 173NOTE: @option{--enable-cet} has been tested for i686, x86_64 and x32 174on non-CET processors. @option{--enable-cet} has been tested for 175i686, x86_64 and x32 on CET processors. 176 177@item --enable-memory-tagging 178Enable memory tagging support if the architecture supports it. When 179@theglibc{} is built with this option then the resulting library will 180be able to control the use of tagged memory when hardware support is 181present by use of the tunable @samp{glibc.mem.tagging}. This includes 182the generation of tagged memory when using the @code{malloc} APIs. 183 184At present only AArch64 platforms with MTE provide this functionality, 185although the library will still operate (without memory tagging) on 186older versions of the architecture. 187 188The default is to disable support for memory tagging. 189 190@item --disable-profile 191Don't build libraries with profiling information. You may want to use 192this option if you don't plan to do profiling. 193 194@item --enable-static-nss 195Compile static versions of the NSS (Name Service Switch) libraries. 196This is not recommended because it defeats the purpose of NSS; a program 197linked statically with the NSS libraries cannot be dynamically 198reconfigured to use a different name database. 199 200@item --enable-hardcoded-path-in-tests 201By default, dynamic tests are linked to run with the installed C library. 202This option hardcodes the newly built C library path in dynamic tests 203so that they can be invoked directly. 204 205@item --disable-timezone-tools 206By default, timezone related utilities (@command{zic}, @command{zdump}, 207and @command{tzselect}) are installed with @theglibc{}. If you are building 208these independently (e.g. by using the @samp{tzcode} package), then this 209option will allow disabling the install of these. 210 211Note that you need to make sure the external tools are kept in sync with 212the versions that @theglibc{} expects as the data formats may change over 213time. Consult the @file{timezone} subdirectory for more details. 214 215@item --enable-stack-protector 216@itemx --enable-stack-protector=strong 217@itemx --enable-stack-protector=all 218Compile the C library and all other parts of the glibc package 219(including the threading and math libraries, NSS modules, and 220transliteration modules) using the GCC @option{-fstack-protector}, 221@option{-fstack-protector-strong} or @option{-fstack-protector-all} 222options to detect stack overruns. Only the dynamic linker and a small 223number of routines called directly from assembler are excluded from this 224protection. 225 226@item --enable-bind-now 227Disable lazy binding for installed shared objects and programs. This 228provides additional security hardening because it enables full RELRO 229and a read-only global offset table (GOT), at the cost of slightly 230increased program load times. 231 232@pindex pt_chown 233@findex grantpt 234@item --enable-pt_chown 235The file @file{pt_chown} is a helper binary for @code{grantpt} 236(@pxref{Allocation, Pseudo-Terminals}) that is installed setuid root to 237fix up pseudo-terminal ownership on GNU/Hurd. It is not required on 238GNU/Linux, and @theglibc{} will not use the installed @file{pt_chown} 239program when configured with @option{--enable-pt_chown}. 240 241@item --disable-werror 242By default, @theglibc{} is built with @option{-Werror}. If you wish 243to build without this option (for example, if building with a newer 244version of GCC than this version of @theglibc{} was tested with, so 245new warnings cause the build with @option{-Werror} to fail), you can 246configure with @option{--disable-werror}. 247 248@item --disable-mathvec 249By default for x86_64, @theglibc{} is built with the vector math library. 250Use this option to disable the vector math library. 251 252@item --enable-tunables 253Tunables support allows additional library parameters to be customized at 254runtime. This feature is enabled by default. This option can take the 255following values: 256 257@table @code 258@item yes 259This is the default if no option is passed to configure. This enables tunables 260and selects the default frontend (currently @samp{valstring}). 261 262@item no 263This option disables tunables. 264 265@item valstring 266This enables tunables and selects the @samp{valstring} frontend for tunables. 267This frontend allows users to specify tunables as a colon-separated list in a 268single environment variable @env{GLIBC_TUNABLES}. 269@end table 270 271@item --disable-crypt 272Do not install the passphrase-hashing library @file{libcrypt} or the 273header file @file{crypt.h}. @file{unistd.h} will still declare the 274function @code{crypt}. Using this option does not change the set of 275programs that may need to be linked with @option{-lcrypt}; it only 276means that @theglibc{} will not provide that library. 277 278This option is for hackers and distributions experimenting with 279independently-maintained implementations of libcrypt. It may become 280the default in a future release. 281 282@item --disable-experimental-malloc 283By default, a per-thread cache is enabled in @code{malloc}. While 284this cache can be disabled on a per-application basis using tunables 285(set glibc.malloc.tcache_count to zero), this option can be used to 286remove it from the build completely. 287 288@item --disable-scv 289Disable using @code{scv} instruction for syscalls. All syscalls will use 290@code{sc} instead, even if the kernel supports @code{scv}. PowerPC only. 291 292@item --build=@var{build-system} 293@itemx --host=@var{host-system} 294These options are for cross-compiling. If you specify both options and 295@var{build-system} is different from @var{host-system}, @code{configure} 296will prepare to cross-compile @theglibc{} from @var{build-system} to be used 297on @var{host-system}. You'll probably need the @samp{--with-headers} 298option too, and you may have to override @var{configure}'s selection of 299the compiler and/or binutils. 300 301If you only specify @samp{--host}, @code{configure} will prepare for a 302native compile but use what you specify instead of guessing what your 303system is. This is most useful to change the CPU submodel. For example, 304if @code{configure} guesses your machine as @code{i686-pc-linux-gnu} but 305you want to compile a library for 586es, give 306@samp{--host=i586-pc-linux-gnu} or just @samp{--host=i586-linux} and add 307the appropriate compiler flags (@samp{-mcpu=i586} will do the trick) to 308@code{CC}. 309 310If you specify just @samp{--build}, @code{configure} will get confused. 311 312@item --with-pkgversion=@var{version} 313Specify a description, possibly including a build number or build 314date, of the binaries being built, to be included in 315@option{--version} output from programs installed with @theglibc{}. 316For example, @option{--with-pkgversion='FooBar GNU/Linux glibc build 317123'}. The default value is @samp{GNU libc}. 318 319@item --with-bugurl=@var{url} 320Specify the URL that users should visit if they wish to report a bug, 321to be included in @option{--help} output from programs installed with 322@theglibc{}. The default value refers to the main bug-reporting 323information for @theglibc{}. 324@end table 325 326To build the library and related programs, type @code{make}. This will 327produce a lot of output, some of which may look like errors from 328@code{make} but aren't. Look for error messages from @code{make} 329containing @samp{***}. Those indicate that something is seriously wrong. 330 331The compilation process can take a long time, depending on the 332configuration and the speed of your machine. Some complex modules may 333take a very long time to compile, as much as several minutes on slower 334machines. Do not panic if the compiler appears to hang. 335 336If you want to run a parallel make, simply pass the @samp{-j} option 337with an appropriate numeric parameter to @code{make}. You need a recent 338GNU @code{make} version, though. 339 340To build and run test programs which exercise some of the library 341facilities, type @code{make check}. If it does not complete 342successfully, do not use the built library, and report a bug after 343verifying that the problem is not already known. @xref{Reporting Bugs}, 344for instructions on reporting bugs. Note that some of the tests assume 345they are not being run by @code{root}. We recommend you compile and 346test @theglibc{} as an unprivileged user. 347 348Before reporting bugs make sure there is no problem with your system. 349The tests (and later installation) use some pre-existing files of the 350system such as @file{/etc/passwd}, @file{/etc/nsswitch.conf} and others. 351These files must all contain correct and sensible content. 352 353Normally, @code{make check} will run all the tests before reporting 354all problems found and exiting with error status if any problems 355occurred. You can specify @samp{stop-on-test-failure=y} when running 356@code{make check} to make the test run stop and exit with an error 357status immediately when a failure occurs. 358 359To format the @cite{GNU C Library Reference Manual} for printing, type 360@w{@code{make dvi}}. You need a working @TeX{} installation to do 361this. The distribution builds the on-line formatted version of the 362manual, as Info files, as part of the build process. You can build 363them manually with @w{@code{make info}}. 364 365The library has a number of special-purpose configuration parameters 366which you can find in @file{Makeconfig}. These can be overwritten with 367the file @file{configparms}. To change them, create a 368@file{configparms} in your build directory and add values as appropriate 369for your system. The file is included and parsed by @code{make} and has 370to follow the conventions for makefiles. 371 372It is easy to configure @theglibc{} for cross-compilation by 373setting a few variables in @file{configparms}. Set @code{CC} to the 374cross-compiler for the target you configured the library for; it is 375important to use this same @code{CC} value when running 376@code{configure}, like this: @samp{configure @var{target} 377CC=@var{target}-gcc}. Set @code{BUILD_CC} to the compiler to use for programs 378run on the build system as part of compiling the library. You may need to 379set @code{AR} to cross-compiling versions of @code{ar} 380if the native tools are not configured to work with 381object files for the target you configured for. When cross-compiling 382@theglibc{}, it may be tested using @samp{make check 383test-wrapper="@var{srcdir}/scripts/cross-test-ssh.sh @var{hostname}"}, 384where @var{srcdir} is the absolute directory name for the main source 385directory and @var{hostname} is the host name of a system that can run 386the newly built binaries of @theglibc{}. The source and build 387directories must be visible at the same locations on both the build 388system and @var{hostname}. 389The @samp{cross-test-ssh.sh} script requires @samp{flock} from 390@samp{util-linux} to work when @var{glibc_test_allow_time_setting} 391environment variable is set. 392 393It is also possible to execute tests, which require setting the date on 394the target machine. Following use cases are supported: 395@itemize @bullet 396@item 397@code{GLIBC_TEST_ALLOW_TIME_SETTING} is set in the environment in 398which eligible tests are executed and have the privilege to run 399@code{clock_settime}. In this case, nothing prevents those tests from 400running in parallel, so the caller shall assure that those tests 401are serialized or provide a proper wrapper script for them. 402 403@item 404The @code{cross-test-ssh.sh} script is used and one passes the 405@option{--allow-time-setting} flag. In this case, both sets 406@code{GLIBC_TEST_ALLOW_TIME_SETTING} and serialization of test 407execution are assured automatically. 408@end itemize 409 410In general, when testing @theglibc{}, @samp{test-wrapper} may be set 411to the name and arguments of any program to run newly built binaries. 412This program must preserve the arguments to the binary being run, its 413working directory and the standard input, output and error file 414descriptors. If @samp{@var{test-wrapper} env} will not work to run a 415program with environment variables set, then @samp{test-wrapper-env} 416must be set to a program that runs a newly built program with 417environment variable assignments in effect, those assignments being 418specified as @samp{@var{var}=@var{value}} before the name of the 419program to be run. If multiple assignments to the same variable are 420specified, the last assignment specified must take precedence. 421Similarly, if @samp{@var{test-wrapper} env -i} will not work to run a 422program with an environment completely empty of variables except those 423directly assigned, then @samp{test-wrapper-env-only} must be set; its 424use has the same syntax as @samp{test-wrapper-env}, the only 425difference in its semantics being starting with an empty set of 426environment variables rather than the ambient set. 427 428For AArch64 with SVE, when testing @theglibc{}, @samp{test-wrapper} 429may be set to "@var{srcdir}/sysdeps/unix/sysv/linux/aarch64/vltest.py 430@var{vector-length}" to change Vector Length. 431 432@node Running make install 433@appendixsec Installing the C Library 434@cindex installing 435 436To install the library and its header files, and the Info files of the 437manual, type @code{make install}. This will 438build things, if necessary, before installing them; however, you should 439still compile everything first. If you are installing @theglibc{} as your 440primary C library, we recommend that you shut the system down to 441single-user mode first, and reboot afterward. This minimizes the risk 442of breaking things when the library changes out from underneath. 443 444@samp{make install} will do the entire job of upgrading from a 445previous installation of @theglibc{} version 2.x. There may sometimes 446be headers 447left behind from the previous installation, but those are generally 448harmless. If you want to avoid leaving headers behind you can do 449things in the following order. 450 451You must first build the library (@samp{make}), optionally check it 452(@samp{make check}), switch the include directories and then install 453(@samp{make install}). The steps must be done in this order. Not moving 454the directory before install will result in an unusable mixture of header 455files from both libraries, but configuring, building, and checking the 456library requires the ability to compile and run programs against the old 457library. The new @file{/usr/include}, after switching the include 458directories and before installing the library should contain the Linux 459headers, but nothing else. If you do this, you will need to restore 460any headers from libraries other than @theglibc{} yourself after installing the 461library. 462 463You can install @theglibc{} somewhere other than where you configured 464it to go by setting the @code{DESTDIR} GNU standard make variable on 465the command line for @samp{make install}. The value of this variable 466is prepended to all the paths for installation. This is useful when 467setting up a chroot environment or preparing a binary distribution. 468The directory should be specified with an absolute file name. Installing 469with the @code{prefix} and @code{exec_prefix} GNU standard make variables 470set is not supported. 471 472@Theglibc{} includes a daemon called @code{nscd}, which you 473may or may not want to run. @code{nscd} caches name service lookups; it 474can dramatically improve performance with NIS+, and may help with DNS as 475well. 476 477One auxiliary program, @file{/usr/libexec/pt_chown}, is installed setuid 478@code{root} if the @samp{--enable-pt_chown} configuration option is used. 479This program is invoked by the @code{grantpt} function; it sets the 480permissions on a pseudoterminal so it can be used by the calling process. 481If you are using a Linux kernel with the @code{devpts} filesystem enabled 482and mounted at @file{/dev/pts}, you don't need this program. 483 484After installation you should configure the timezone and install locales 485for your system. The time zone configuration ensures that your system 486time matches the time for your current timezone. The locales ensure that 487the display of information on your system matches the expectations of 488your language and geographic region. 489 490@Theglibc{} is able to use two kinds of localization information sources, the 491first is a locale database named @file{locale-archive} which is generally 492installed as @file{/usr/lib/locale/locale-archive}. The locale archive has the 493benefit of taking up less space and being very fast to load, but only if you 494plan to install sixty or more locales. If you plan to install one or two 495locales you can instead install individual locales into their self-named 496directories e.g.@: @file{/usr/lib/locale/en_US.utf8}. For example to install 497the German locale using the character set for UTF-8 with name @code{de_DE} into 498the locale archive issue the command @samp{localedef -i de_DE -f UTF-8 de_DE}, 499and to install just the one locale issue the command @samp{localedef 500--no-archive -i de_DE -f UTF-8 de_DE}. To configure all locales that are 501supported by @theglibc{}, you can issue from your build directory the command 502@samp{make localedata/install-locales} to install all locales into the locale 503archive or @samp{make localedata/install-locale-files} to install all locales 504as files in the default configured locale installation directory (derived from 505@samp{--prefix} or @code{--localedir}). To install into an alternative system 506root use @samp{DESTDIR} e.g.@: @samp{make localedata/install-locale-files 507DESTDIR=/opt/glibc}, but note that this does not change the configured prefix. 508 509To configure the locally used timezone, set the @code{TZ} environment 510variable. The script @code{tzselect} helps you to select the right value. 511As an example, for Germany, @code{tzselect} would tell you to use 512@samp{TZ='Europe/Berlin'}. For a system wide installation (the given 513paths are for an installation with @samp{--prefix=/usr}), link the 514timezone file which is in @file{/usr/share/zoneinfo} to the file 515@file{/etc/localtime}. For Germany, you might execute @samp{ln -s 516/usr/share/zoneinfo/Europe/Berlin /etc/localtime}. 517 518@node Tools for Compilation 519@appendixsec Recommended Tools for Compilation 520@cindex installation tools 521@cindex tools, for installing library 522 523We recommend installing the following GNU tools before attempting to 524build @theglibc{}: 525 526@itemize @bullet 527@item 528GNU @code{make} 4.0 or newer 529 530As of relase time, GNU @code{make} 4.3 is the newest verified to work 531to build @theglibc{}. 532 533@item 534GCC 6.2 or newer 535 536GCC 6.2 or higher is required. In general it is recommended to use 537the newest version of the compiler that is known to work for building 538@theglibc{}, as newer compilers usually produce better code. As of 539release time, GCC 11.2 is the newest compiler verified to work to build 540@theglibc{}. 541 542For PowerPC 64-bits little-endian (powerpc64le), a GCC version with support 543for @option{-mno-gnu-attribute}, @option{-mabi=ieeelongdouble}, and 544@option{-mabi=ibmlondouble} is required. Likewise, the compiler must also 545support passing @option{-mlong-double-128} with the preceding options. As 546of release, this implies GCC 7.4 and newer (excepting GCC 7.5.0, see GCC 547PR94200). These additional features are required for building the GNU C 548Library with support for IEEE long double. 549 550@c powerpc64le performs an autoconf test to verify the compiler compiles with 551@c commands like "$CC -c foo.c -mabi=ibmlongdouble -mlong-double-128". 552 553For ARC architecture builds, GCC 8.3 or higher is needed. 554 555For s390x architecture builds, GCC 7.1 or higher is needed (See gcc Bug 98269). 556 557For multi-arch support it is recommended to use a GCC which has been built with 558support for GNU indirect functions. This ensures that correct debugging 559information is generated for functions selected by IFUNC resolvers. This 560support can either be enabled by configuring GCC with 561@samp{--enable-gnu-indirect-function}, or by enabling it by default by setting 562@samp{default_gnu_indirect_function} variable for a particular architecture in 563the GCC source file @file{gcc/config.gcc}. 564 565You can use whatever compiler you like to compile programs that use 566@theglibc{}. 567 568Check the FAQ for any special compiler issues on particular platforms. 569 570@item 571GNU @code{binutils} 2.25 or later 572 573You must use GNU @code{binutils} (as and ld) to build @theglibc{}. 574No other assembler or linker has the necessary functionality at the 575moment. As of release time, GNU @code{binutils} 2.35.1 is the newest 576verified to work to build @theglibc{}. 577 578For PowerPC 64-bits little-endian (powerpc64le), @command{objcopy} is required 579to support @option{--update-section}. This option requires binutils 2.26 or 580newer. 581 582ARC architecture needs @code{binutils} 2.32 or higher for TLS related fixes. 583 584@item 585GNU @code{texinfo} 4.7 or later 586 587To correctly translate and install the Texinfo documentation you need 588this version of the @code{texinfo} package. Earlier versions do not 589understand all the tags used in the document, and the installation 590mechanism for the info files is not present or works differently. 591As of release time, @code{texinfo} 6.7 is the newest verified to work 592to build @theglibc{}. 593 594@item 595GNU @code{awk} 3.1.2, or higher 596 597@code{awk} is used in several places to generate files. 598Some @code{gawk} extensions are used, including the @code{asorti} 599function, which was introduced in version 3.1.2 of @code{gawk}. 600As of release time, @code{gawk} version 5.1 is the newest verified 601to work to build @theglibc{}. 602 603@item 604GNU @code{bison} 2.7 or later 605 606@code{bison} is used to generate the @code{yacc} parser code in the @file{intl} 607subdirectory. As of release time, @code{bison} version 3.7.4 is the newest 608verified to work to build @theglibc{}. 609 610@item 611Perl 5 612 613Perl is not required, but if present it is used in some tests and the 614@code{mtrace} program, to build the @glibcadj{} manual. As of release 615time @code{perl} version 5.32.1 is the newest verified to work to 616build @theglibc{}. 617 618@item 619GNU @code{sed} 3.02 or newer 620 621@code{Sed} is used in several places to generate files. Most scripts work 622with any version of @code{sed}. As of release time, @code{sed} version 6234.8 is the newest verified to work to build @theglibc{}. 624 625@item 626Python 3.4 or later 627 628Python is required to build @theglibc{}. As of release time, Python 6293.9.6 is the newest verified to work for building and testing 630@theglibc{}. 631 632@item PExpect 4.0 633 634The pretty printer tests drive GDB through test programs and compare 635its output to the printers'. PExpect is used to capture the output of 636GDB, and should be compatible with the Python version in your system. 637As of release time PExpect 4.8 is the newest verified to work to test 638the pretty printers. 639 640@item 641GDB 7.8 or later with support for Python 2.7/3.4 or later 642 643GDB itself needs to be configured with Python support in order to use 644the pretty printers. Notice that your system having Python available 645doesn't imply that GDB supports it, nor that your system's Python and 646GDB's have the same version. As of release time GNU @code{debugger} 64710.2 is the newest verified to work to test the pretty printers. 648 649Unless Python, PExpect and GDB with Python support are present, the 650printer tests will report themselves as @code{UNSUPPORTED}. Notice 651that some of the printer tests require @theglibc{} to be compiled with 652debugging symbols. 653@end itemize 654 655@noindent 656If you change any of the @file{configure.ac} files you will also need 657 658@itemize @bullet 659@item 660GNU @code{autoconf} 2.69 (exactly) 661@end itemize 662 663@noindent 664and if you change any of the message translation files you will need 665 666@itemize @bullet 667@item 668GNU @code{gettext} 0.10.36 or later 669 670As of release time, GNU @code{gettext} version 0.21 is the newest 671version verified to work to build @theglibc{}. 672@end itemize 673 674 675@noindent 676You may also need these packages if you upgrade your source tree using 677patches, although we try to avoid this. 678 679@node Linux 680@appendixsec Specific advice for @gnulinuxsystems{} 681@cindex kernel header files 682 683If you are installing @theglibc{} on @gnulinuxsystems{}, you need to have 684the header files from a 3.2 or newer kernel around for reference. 685(For the ia64 architecture, you need version 3.2.18 or newer because this 686is the first version with support for the @code{accept4} system call.) 687These headers must be installed using @samp{make headers_install}; the 688headers present in the kernel source directory are not suitable for 689direct use by @theglibc{}. You do not need to use that kernel, just have 690its headers installed where @theglibc{} can access them, referred to here as 691@var{install-directory}. The easiest way to do this is to unpack it 692in a directory such as @file{/usr/src/linux-@var{version}}. In that 693directory, run @samp{make headers_install 694INSTALL_HDR_PATH=@var{install-directory}}. Finally, configure @theglibc{} 695with the option @samp{--with-headers=@var{install-directory}/include}. 696Use the most recent kernel you can get your hands on. (If you are 697cross-compiling @theglibc{}, you need to specify 698@samp{ARCH=@var{architecture}} in the @samp{make headers_install} 699command, where @var{architecture} is the architecture name used by the 700Linux kernel, such as @samp{x86} or @samp{powerpc}.) 701 702After installing @theglibc{}, you may need to remove or rename 703directories such as @file{/usr/include/linux} and 704@file{/usr/include/asm}, and replace them with copies of directories 705such as @file{linux} and @file{asm} from 706@file{@var{install-directory}/include}. All directories present in 707@file{@var{install-directory}/include} should be copied, except that 708@theglibc{} provides its own version of @file{/usr/include/scsi}; the 709files provided by the kernel should be copied without replacing those 710provided by @theglibc{}. The @file{linux}, @file{asm} and 711@file{asm-generic} directories are required to compile programs using 712@theglibc{}; the other directories describe interfaces to the kernel but 713are not required if not compiling programs using those interfaces. 714You do not need to copy kernel headers if you did not specify an 715alternate kernel header source using @samp{--with-headers}. 716 717The Filesystem Hierarchy Standard for @gnulinuxsystems{} expects some 718components of the @glibcadj{} installation to be in 719@file{/lib} and some in @file{/usr/lib}. This is handled automatically 720if you configure @theglibc{} with @samp{--prefix=/usr}. If you set some other 721prefix or allow it to default to @file{/usr/local}, then all the 722components are installed there. 723 724@node Reporting Bugs 725@appendixsec Reporting Bugs 726@cindex reporting bugs 727@cindex bugs, reporting 728 729There are probably bugs in @theglibc{}. There are certainly 730errors and omissions in this manual. If you report them, they will get 731fixed. If you don't, no one will ever know about them and they will 732remain unfixed for all eternity, if not longer. 733 734It is a good idea to verify that the problem has not already been 735reported. Bugs are documented in two places: The file @file{BUGS} 736describes a number of well known bugs and the central @glibcadj{} 737bug tracking system has a 738WWW interface at 739@url{https://sourceware.org/bugzilla/}. The WWW 740interface gives you access to open and closed reports. A closed report 741normally includes a patch or a hint on solving the problem. 742 743To report a bug, first you must find it. With any luck, this will be the 744hard part. Once you've found a bug, make sure it's really a bug. A 745good way to do this is to see if @theglibc{} behaves the same way 746some other C library does. If so, probably you are wrong and the 747libraries are right (but not necessarily). If not, one of the libraries 748is probably wrong. It might not be @theglibc{}. Many historical 749Unix C libraries permit things that we don't, such as closing a file 750twice. 751 752If you think you have found some way in which @theglibc{} does not 753conform to the ISO and POSIX standards (@pxref{Standards and 754Portability}), that is definitely a bug. Report it! 755 756Once you're sure you've found a bug, try to narrow it down to the 757smallest test case that reproduces the problem. In the case of a C 758library, you really only need to narrow it down to one library 759function call, if possible. This should not be too difficult. 760 761The final step when you have a simple test case is to report the bug. 762Do this at @value{REPORT_BUGS_TO}. 763 764If you are not sure how a function should behave, and this manual 765doesn't tell you, that's a bug in the manual. Report that too! If the 766function's behavior disagrees with the manual, then either the library 767or the manual has a bug, so report the disagreement. If you find any 768errors or omissions in this manual, please report them to the 769bug database. If you refer to specific 770sections of the manual, please include the section names for easier 771identification. 772