GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/unix/sysv/linux.

# Don't bother trying to generate any glue code to be compatible with the
# existing system library, because we are the only system library.
inhibit_glue=yes

define([LIBC_LINUX_VERSION],[2.0.10])dnl
if test -n "$sysheaders"; then
  OLD_CPPFLAGS=$CPPFLAGS
  CPPFLAGS="$CPPFLAGS $SYSINCLUDES"
fi
define([libc_cv_linuxVER], [libc_cv_linux]patsubst(LIBC_LINUX_VERSION,[\.]))dnl
AC_CACHE_CHECK(installed Linux kernel header files, libc_cv_linuxVER, [dnl
AC_EGREP_CPP([eat flaming death], [#include <linux/version.h>
#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < ]dnl
patsubst(LIBC_LINUX_VERSION,[^\([^.]*\)\.\([^.]*\)\.\([^.]*\)$],dnl
[ (\1 *65536+ \2 *256+ \3) /* \1.\2.\3 */])[
eat flaming death
#endif],
	     libc_cv_linuxVER='TOO OLD!',
	     libc_cv_linuxVER='LIBC_LINUX_VERSION or later')])
if test "$libc_cv_linuxVER" != 'LIBC_LINUX_VERSION or later'; then
  AC_MSG_ERROR([GNU libc requires kernel header files from
Linux LIBC_LINUX_VERSION 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 LIBC_LINUX_VERSION 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.])
fi

# If the user gave a minimal version number test whether the available
# kernel headers are young enough.  Additionally we have minimal
# kernel versions for some architectures.  If a previous configure fragment
# set arch_minimum_kernel already, let that override our defaults here.
# Note that we presume such a fragment has set libc_cv_gcc_unwind_find_fde
# if appropriate too.
test -n "$arch_minimum_kernel" ||
case "$machine" in
  alpha*)
    arch_minimum_kernel=2.1.100
    libc_cv_gcc_unwind_find_fde=yes
    ;;
  arm*)
    arch_minimum_kernel=2.0.10
    libc_cv_gcc_unwind_find_fde=yes
    ;;
  i386*)
    libc_cv_gcc_unwind_find_fde=yes
    arch_minimum_kernel=2.0.10
    ;;
  ia64*)
    arch_minimum_kernel=2.4.0
    ;;
  hppa*)
    libc_cv_gcc_unwind_find_fde=yes
    arch_minimum_kernel=2.4.19
    ;;
  m68k*)
    arch_minimum_kernel=2.0.10
    libc_cv_gcc_unwind_find_fde=yes
    ;;
  powerpc/powerpc32)
    libc_cv_gcc_unwind_find_fde=yes
    arch_minimum_kernel=2.0.10
    ;;
  powerpc/powerpc64)
    arch_minimum_kernel=2.4.21
    ;;
  s390/s390-32)
    libc_cv_gcc_unwind_find_fde=yes
    arch_minimum_kernel=2.2.10
    ;;
  s390/s390-64)
    libc_cv_gcc_unwind_find_fde=yes
    arch_minimum_kernel=2.4.0
    ;;
  sh*)
    arch_minimum_kernel=2.3.99
    libc_cv_gcc_unwind_find_fde=yes
    ;;
  sparc/sparc64*)
    libc_cv_gcc_unwind_find_fde=yes
    arch_minimum_kernel=2.4.21
    ;;
  sparc*)
    libc_cv_gcc_unwind_find_fde=yes
    arch_minimum_kernel=2.0.10
    ;;
  x86_64*)
    arch_minimum_kernel=2.4.0
    ;;
  *)
    arch_minimum_kernel=2.0.10
    ;;
esac
if test -n "$minimum_kernel"; then
  changequote(,)
  user_version=$((`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`))
  arch_version=$((`echo "$arch_minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`))
  changequote([,])
  if test $user_version -lt $arch_version; then
    AC_MSG_WARN([minimum kernel version reset to $arch_minimum_kernel])
    minimum_kernel=$arch_minimum_kernel
  fi
else
  if test $arch_minimum_kernel != '2.0.10'; then
    minimum_kernel=$arch_minimum_kernel
  fi
fi

if test -n "$minimum_kernel"; then
  AC_MSG_CHECKING(for kernel header at least $minimum_kernel)
changequote(,)dnl
  decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
  abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
changequote([,])dnl
  AC_EGREP_CPP([eat flaming death], [#include <linux/version.h>
#if LINUX_VERSION_CODE < $decnum
eat flaming death
#endif], libc_minimum_kernel='too old!', libc_minimum_kernel=ok)
  AC_MSG_RESULT($libc_minimum_kernel)
  if test "$libc_minimum_kernel" = ok; then
    AC_DEFINE_UNQUOTED(__LINUX_KERNEL_VERSION, $decnum)
    AC_DEFINE_UNQUOTED(__ABI_TAG_VERSION, $abinum)
  else
    AC_MSG_ERROR([*** The available kernel headers are older than the requested
*** compatible kernel version])
  fi
fi

# The result of the above test for the use of the FDE code is invalid if
# the user overrides the decision about the minimum ABI.
if test "$oldest_abi" != default && test "2.2.4" \< "$oldest_abi"; then
  libc_cv_gcc_unwind_find_fde=no
fi

if test -n "$sysheaders"; then
  CPPFLAGS=$OLD_CPPFLAGS
fi
# The Linux filesystem standard prescribes where to place "essential"
# files.  I.e., when the installation prefix is "/usr" we have to place
# shared library objects and the configuration files on the root partition
# in /lib and /etc.
case "$prefix" in
/usr | /usr/)
  # 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib.
  # Allow earlier configure scripts to handle libc_cv_slibdir, libdir,
  # and libc_cv_localedir.
  test -n "$libc_cv_slibdir" || \
  case $machine in
  sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64)
    libc_cv_slibdir="/lib64"
    if test "$libdir" = '${exec_prefix}/lib'; then
      libdir='${exec_prefix}/lib64';
      # Locale data can be shared between 32bit and 64bit libraries
      libc_cv_localedir='${exec_prefix}/lib/locale'
    fi
    ;;
  *)
    libc_cv_slibdir="/lib"
    ;;
  esac
  # Allow the user to override the path with --sysconfdir
  if test $sysconfdir = '${prefix}/etc'; then
    libc_cv_sysconfdir=/etc
  else
    libc_cv_sysconfdir=$sysconfdir
   fi
  libc_cv_rootsbindir="/sbin"
  ;;
esac

# Under Linux the NPTL add-on should be available.
case $add_ons in
  # It is available.  Good.
  *nptl*)
    nptl_missing=
    ;;
  *)
    nptl_missing=yes
    ;;
esac

if test "$nptl_missing"; then
  if test $enable_sanity = yes; then
    echo "\
*** On GNU/Linux systems it is normal to compile GNU libc with the
*** \`nptl' add-on.  Without that, the library will be
*** incompatible with normal GNU/Linux systems.
*** If you really mean to not use this add-on, run configure again
*** using the extra parameter \`--disable-sanity-checks'."
    exit 1
  else
    echo "\
*** WARNING: Are you sure you do not want to use the \`nptl'
*** add-on?"
  fi
fi

if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/" -o "$prefix" = "NONE"; then
  if test $enable_sanity = yes; then
    echo "\
*** On GNU/Linux systems the GNU C Library should not be installed into
*** /usr/local since this might make your system totally unusable.
*** We strongly advise to use a different prefix.  For details read the FAQ.
*** If you really mean to do this, run configure again using the extra
*** parameter \`--disable-sanity-checks'."
    exit 1
  else
    echo "\
*** WARNING: Do you really want to install the GNU C Library into /usr/local?
*** This might make your system totally unusable, for details read the FAQ."
  fi
fi


# One Linux we use ldconfig.
use_ldconfig=yes

# We need some extensions to the `ldd' script.
changequote(,)
case "$machine" in
  i[3456]86* | m68*)
    ldd_rewrite_script=../sysdeps/unix/sysv/linux/ldd-rewrite.sed
    ;;
  ia64*)
    ldd_rewrite_script=../sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed
    ;;
  s390*)
    ldd_rewrite_script=../sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed
    ;;
  sparc*)
    ldd_rewrite_script=../sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed
    ;;
  x86_64*)
    ldd_rewrite_script=../sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
    ;;
  powerpc*)
    ldd_rewrite_script=../sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed
    ;;
  *)
    ;;
esac
changequote([,])

if test $host = $build; then
  # If $prefix/include/{net,scsi} are symlinks, make install will
  # clobber what they're linked to (probably a kernel tree).
  # test -L ought to work on all Linux boxes.
  if test "x$prefix" != xNONE; then
    ac_prefix=$prefix
  else
    ac_prefix=$ac_default_prefix
  fi
  AC_MSG_CHECKING([for symlinks in ${ac_prefix}/include])
  ac_message=
  if test -L ${ac_prefix}/include/net; then
    ac_message="$ac_message
   ${ac_prefix}/include/net is a symlink"
  fi
  if test -L ${ac_prefix}/include/scsi; then
    ac_message="$ac_message
   ${ac_prefix}/include/scsi is a symlink"
  fi
  if test -n "$ac_message"; then
    AC_MSG_ERROR([$ac_message
\`make install' will destroy the target of the link(s).
Delete the links and re-run configure, or better still, move the entire
${ac_prefix}/include directory out of the way.])
  else
    AC_MSG_RESULT(ok)
  fi
fi

# We have inlined syscalls.
AC_DEFINE(HAVE_INLINED_SYSCALLS)
