# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!

# Local configure fragment for sysdeps/gnu.

# The Filesystem Hierarchy 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,
  # libc_cv_rtlddir, 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
    case $machine in
    s390/s390-64)
      libc_cv_rtlddir=/lib
      ;;
    esac
    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
  # Allow the user to override the path with --localstatedir.
  if test "$localstatedir" = '${prefix}/var'; then
    libc_cv_localstatedir=/var
  else
    libc_cv_localstatedir=$localstatedir
   fi
  libc_cv_rootsbindir=/sbin
  ;;
esac
