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

# GNU libc on the Hurd is always reentrant.
DEFINES="$DEFINES -D_LIBC_REENTRANT"

cat >>confdefs.h <<\_ACEOF
#define NO_HIDDEN 1
_ACEOF


# 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

if test "x$prefix" != x; then
  { $as_echo "$as_me:$LINENO: WARNING: --prefix= (empty) is required for GNU/Hurd to work normally" >&5
$as_echo "$as_me: WARNING: --prefix= (empty) is required for GNU/Hurd to work normally" >&2;}
fi

case "$machine" in
  i386*)
    # The default oldest ABI is 2.2.6.
    # We only need a "yes" here if the oldest ABI supported will be < 2.2.6.
    if test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6"; then
      libc_cv_gcc_unwind_find_fde=yes
    fi
    ;;
esac


{ $as_echo "$as_me:$LINENO: checking Hurd header version" >&5
$as_echo_n "checking Hurd header version... " >&6; }
if test "${libc_cv_hurd_version+set}" = set; then
  $as_echo_n "(cached) " >&6
else
  cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h.  */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h.  */
#include <hurd/version.h>
int
main ()
{

#define NEED_VERSION 20020609
#if HURD_INTERFACE_VERSION < NEED_VERSION
# error Hurd version too old: HURD_INTERFACE_VERSION < NEED_VERSION
#endif
  ;
  return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (ac_try="$ac_compile"
case "(($ac_try" in
  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  *) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
$as_echo "$ac_try_echo") >&5
  (eval "$ac_compile") 2>conftest.er1
  ac_status=$?
  grep -v '^ *+' conftest.er1 >conftest.err
  rm -f conftest.er1
  cat conftest.err >&5
  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
  (exit $ac_status); } && {
	 test -z "$ac_c_werror_flag" ||
	 test ! -s conftest.err
       } && test -s conftest.$ac_objext; then
  libc_cv_hurd_version=ok
else
  $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5

	libc_cv_hurd_version=bad
fi

rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $libc_cv_hurd_version" >&5
$as_echo "$libc_cv_hurd_version" >&6; }
if test "x$libc_cv_hurd_version" != xok; then
  { { $as_echo "$as_me:$LINENO: error: Hurd headers not installed or too old" >&5
$as_echo "$as_me: error: Hurd headers not installed or too old" >&2;}
   { (exit 1); exit 1; }; }
fi
