Require Linux kernel headers from "make headers_install", >= 2.6.19.1.

This commit is contained in:
Joseph Myers 2012-02-27 20:52:30 +00:00
parent 6664049b71
commit abd923dbf2
5 changed files with 84 additions and 75 deletions

View File

@ -1,3 +1,15 @@
2012-02-27 Joseph Myers <joseph@codesourcery.com>
* 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 <joseph@codesourcery.com>
* manual/llio.texi (fclean): Remove documentation.

62
INSTALL
View File

@ -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

View File

@ -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

View File

@ -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 <linux/version.h>
#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 <linux/version.h>, so
Linux 2.6.19 or later. This check uses <linux/version.h>, 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

View File

@ -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"