From abd923dbf2d828612e00a07d47365040b5218d33 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Mon, 27 Feb 2012 20:52:30 +0000 Subject: Require Linux kernel headers from "make headers_install", >= 2.6.19.1. --- ChangeLog | 12 +++++++ INSTALL | 62 +++++++++++++++++----------------- manual/install.texi | 65 ++++++++++++++++++------------------ sysdeps/unix/sysv/linux/configure | 18 +++++----- sysdeps/unix/sysv/linux/configure.in | 2 +- 5 files changed, 84 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e785da60f..3f64fd8262 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2012-02-27 Joseph Myers + + * manual/install.texi (--with-headers): Describe headers as + interface headers, not private headers. + (Specific advice for GNU/Linux systems): Describe use of headers + from "make headers_install", not private headers from older + kernels. + * INSTALL: Regenerated. + * sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): + Change to 2.6.19. + * sysdeps/unix/sysv/linux/configure: Regenerated. + 2012-02-27 Joseph Myers * manual/llio.texi (fclean): Remove documentation. diff --git a/INSTALL b/INSTALL index 0b86eea709..ba75a5bd3a 100644 --- a/INSTALL +++ b/INSTALL @@ -59,9 +59,10 @@ will be used, and CFLAGS sets optimization options for the compiler. `--with-headers=DIRECTORY' Look for kernel header files in DIRECTORY, not `/usr/include'. - Glibc needs information from the kernel's private header files. - Glibc will normally look in `/usr/include' for them, but if you - specify this option, it will look in DIRECTORY instead. + Glibc needs information from the kernel's header files describing + the interface to the kernel. Glibc will normally look in + `/usr/include' for them, but if you specify this option, it will + look in DIRECTORY instead. This option is primarily of use on a system where the headers in `/usr/include' come from an older version of glibc. Conflicts can @@ -347,37 +348,34 @@ Specific advice for GNU/Linux systems ===================================== If you are installing GNU libc on a GNU/Linux system, you need to have -the header files from a 2.2 or newer kernel around for reference. For -some architectures, like ia64, sh and hppa, you need at least headers -from kernel 2.3.99 (sh and hppa) or 2.4.0 (ia64). You do not need to -use that kernel, just have its headers where glibc can access at them. -The easiest way to do this is to unpack it in a directory such as -`/usr/src/linux-2.2.1'. In that directory, run `make config' and -accept all the defaults. Then run `make include/linux/version.h'. -Finally, configure glibc with the option -`--with-headers=/usr/src/linux-2.2.1/include'. Use the most recent -kernel you can get your hands on. - - An alternate tactic is to unpack the 2.2 kernel and run `make -config' as above; then, rename or delete `/usr/include', create a new -`/usr/include', and make symbolic links of `/usr/include/linux' and -`/usr/include/asm' into the kernel sources. You can then configure -glibc with no special options. +the header files from a 2.6.19.1 or newer kernel around for reference. +These headers must be installed using `make headers_install'; the +headers present in the kernel source directory are not suitable for +direct use by GNU libc. You do not need to use that kernel, just have +its headers installed where glibc can access them, referred to here as +INSTALL-DIRECTORY. The easiest way to do this is to unpack it in a +directory such as `/usr/src/linux-VERSION'. In that directory, run +`make headers_install INSTALL_HDR_PATH=INSTALL-DIRECTORY'. Finally, +configure glibc with the option +`--with-headers=INSTALL-DIRECTORY/include'. Use the most recent kernel +you can get your hands on. (If you are cross-compiling GNU libc, you +need to specify `ARCH=ARCHITECTURE' in the `make headers_install' +command, where ARCHITECTURE is the architecture name used by the Linux +kernel, such as `x86' or `powerpc'.) After installing GNU libc, you may need to remove or rename -`/usr/include/linux' and `/usr/include/asm', and replace them with -copies of `include/linux' and `include/asm-$ARCHITECTURE' taken from -the Linux source package which supplied kernel headers for building the -library. ARCHITECTURE will be the machine architecture for which the -library was built, such as `i386' or `alpha'. You do not need to do -this if you did not specify an alternate kernel header source using -`--with-headers'. The intent here is that these directories should be -copies of, *not* symlinks to, the kernel headers used to build the -library. - - Note that `/usr/include/net' and `/usr/include/scsi' should *not* be -symlinks into the kernel sources. GNU libc provides its own versions -of these files. +directories such as `/usr/include/linux' and `/usr/include/asm', and +replace them with copies of directories such as `linux' and `asm' from +`INSTALL-DIRECTORY/include'. All directories present in +`INSTALL-DIRECTORY/include' should be copied, except that GNU libc +provides its own version of `/usr/include/scsi'; the files provided by +the kernel should be copied without replacing those provided by GNU +libc. The `linux', `asm' and `asm-generic' directories are required to +compile programs using GNU libc; the other directories describe +interfaces to the kernel but are not required if not compiling programs +using those interfaces. You do not need to copy kernel headers if you +did not specify an alternate kernel header source using +`--with-headers'. GNU/Linux expects some components of the libc installation to be in `/lib' and some in `/usr/lib'. This is handled automatically if you diff --git a/manual/install.texi b/manual/install.texi index 1656c5e052..793cc8dc12 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -79,8 +79,9 @@ directory if that option is specified, or @file{/usr/local} otherwise. @item --with-headers=@var{directory} Look for kernel header files in @var{directory}, not -@file{/usr/include}. Glibc needs information from the kernel's private -header files. Glibc will normally look in @file{/usr/include} for them, +@file{/usr/include}. Glibc needs information from the kernel's header +files describing the interface to the kernel. Glibc will normally +look in @file{/usr/include} for them, but if you specify this option, it will look in @var{DIRECTORY} instead. This option is primarily of use on a system where the headers in @@ -393,39 +394,37 @@ patches, although we try to avoid this. @appendixsec Specific advice for GNU/Linux systems @cindex kernel header files -If you are installing GNU libc on a GNU/Linux system, you need to have the -header files from a 2.2 or newer kernel around for reference. For some -architectures, like ia64, sh and hppa, you need at least headers from -kernel 2.3.99 (sh and hppa) or 2.4.0 (ia64). You do not need to use -that kernel, just have its headers where glibc can access at them. The -easiest way to do this is to unpack it in a directory such as -@file{/usr/src/linux-2.2.1}. In that directory, run @samp{make config} -and accept all the defaults. Then run @samp{make -include/linux/version.h}. Finally, configure glibc with the option -@samp{--with-headers=/usr/src/linux-2.2.1/include}. Use the most recent -kernel you can get your hands on. - -An alternate tactic is to unpack the 2.2 kernel and run @samp{make -config} as above; then, rename or delete @file{/usr/include}, create a -new @file{/usr/include}, and make symbolic links of -@file{/usr/include/linux} and @file{/usr/include/asm} into the kernel -sources. You can then configure glibc with no special options. +If you are installing GNU libc on a GNU/Linux system, you need to have +the header files from a 2.6.19.1 or newer kernel around for reference. +These headers must be installed using @samp{make headers_install}; the +headers present in the kernel source directory are not suitable for +direct use by GNU libc. You do not need to use that kernel, just have +its headers installed where glibc can access them, referred to here as +@var{install-directory}. The easiest way to do this is to unpack it +in a directory such as @file{/usr/src/linux-@var{version}}. In that +directory, run @samp{make headers_install +INSTALL_HDR_PATH=@var{install-directory}}. Finally, configure glibc +with the option @samp{--with-headers=@var{install-directory}/include}. +Use the most recent kernel you can get your hands on. (If you are +cross-compiling GNU libc, you need to specify +@samp{ARCH=@var{architecture}} in the @samp{make headers_install} +command, where @var{architecture} is the architecture name used by the +Linux kernel, such as @samp{x86} or @samp{powerpc}.) After installing GNU libc, you may need to remove or rename -@file{/usr/include/linux} and @file{/usr/include/asm}, and replace them -with copies of @file{include/linux} and -@file{include/asm-$@var{ARCHITECTURE}} taken from the Linux source -package which supplied kernel headers for building the library. -@var{ARCHITECTURE} will be the machine architecture for which the -library was built, such as @samp{i386} or @samp{alpha}. You do not need -to do this if you did not specify an alternate kernel header source -using @samp{--with-headers}. The intent here is that these directories -should be copies of, @strong{not} symlinks to, the kernel headers used to -build the library. - -Note that @file{/usr/include/net} and @file{/usr/include/scsi} should -@strong{not} be symlinks into the kernel sources. GNU libc provides its -own versions of these files. +directories such as @file{/usr/include/linux} and +@file{/usr/include/asm}, and replace them with copies of directories +such as @file{linux} and @file{asm} from +@file{@var{install-directory}/include}. All directories present in +@file{@var{install-directory}/include} should be copied, except that +GNU libc provides its own version of @file{/usr/include/scsi}; the +files provided by the kernel should be copied without replacing those +provided by GNU libc. The @file{linux}, @file{asm} and +@file{asm-generic} directories are required to compile programs using +GNU libc; the other directories describe interfaces to the kernel but +are not required if not compiling programs using those interfaces. +You do not need to copy kernel headers if you did not specify an +alternate kernel header source using @samp{--with-headers}. GNU/Linux expects some components of the libc installation to be in @file{/lib} and some in @file{/usr/lib}. This is handled automatically diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure index c5fd66b778..33821c0bb6 100644 --- a/sysdeps/unix/sysv/linux/configure +++ b/sysdeps/unix/sysv/linux/configure @@ -242,33 +242,33 @@ $as_echo "$ac_cv_path_EGREP" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking installed Linux kernel header files" >&5 $as_echo_n "checking installed Linux kernel header files... " >&6; } -if ${libc_cv_linux2010+:} false; then : +if ${libc_cv_linux2619+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < (2 *65536+ 0 *256+ 10) /* 2.0.10 */ +#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < (2 *65536+ 6 *256+ 19) /* 2.6.19 */ eat flaming death #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "eat flaming death" >/dev/null 2>&1; then : - libc_cv_linux2010='TOO OLD!' + libc_cv_linux2619='TOO OLD!' else - libc_cv_linux2010='2.0.10 or later' + libc_cv_linux2619='2.6.19 or later' fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_linux2010" >&5 -$as_echo "$libc_cv_linux2010" >&6; } -if test "$libc_cv_linux2010" != '2.0.10 or later'; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_linux2619" >&5 +$as_echo "$libc_cv_linux2619" >&6; } +if test "$libc_cv_linux2619" != '2.6.19 or later'; then as_fn_error $? "GNU libc requires kernel header files from -Linux 2.0.10 or later to be installed before configuring. +Linux 2.6.19 or later to be installed before configuring. The kernel header files are found usually in /usr/include/asm and /usr/include/linux; make sure these directories use files from -Linux 2.0.10 or later. This check uses , so +Linux 2.6.19 or later. This check uses , so make sure that file was built correctly when installing the kernel header files. To use kernel headers not from /usr/include/linux, use the configure option --with-headers." "$LINENO" 5 diff --git a/sysdeps/unix/sysv/linux/configure.in b/sysdeps/unix/sysv/linux/configure.in index a73c3e51e1..59a13112b2 100644 --- a/sysdeps/unix/sysv/linux/configure.in +++ b/sysdeps/unix/sysv/linux/configure.in @@ -5,7 +5,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. # existing system library, because we are the only system library. inhibit_glue=yes -define([LIBC_LINUX_VERSION],[2.0.10])dnl +define([LIBC_LINUX_VERSION],[2.6.19])dnl if test -n "$sysheaders"; then OLD_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $SYSINCLUDES" -- cgit 1.4.1