# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
 # Local configure fragment for sysdeps/sparc.

# Check for a GCC emitting GOTDATA relocations.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc gcc GOTDATA reloc support" >&5
$as_echo_n "checking for sparc gcc GOTDATA reloc support... " >&6; }
if ${libc_cv_sparc_gcc_gotdata+:} false; then :
  $as_echo_n "(cached) " >&6
else
  cat > conftest.c <<\EOF
int data;
int foo(void)
{
	return data;
}
EOF
libc_cv_sparc_gcc_gotdata=no
if { ac_try='${CC-cc} -S $CFLAGS -O2 -fPIC conftest.c 1>&5'
  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; }; then
  if grep -q 'gdop_hix22' conftest.s \
     && grep -q 'gdop_lox10' conftest.s; then
    libc_cv_sparc_gcc_gotdata=yes
  fi
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sparc_gcc_gotdata" >&5
$as_echo "$libc_cv_sparc_gcc_gotdata" >&6; }
if test $libc_cv_sparc_gcc_gotdata = yes; then
  $as_echo "#define HAVE_GCC_GOTDATA 1" >>confdefs.h

fi

if test $libc_cv_sparc_gcc_gotdata = yes; then
  $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

fi
