dnl configure fragment for new libpthread implementation.
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.

if test "x$libc_cv_gcc___thread" != xyes; then
  AC_MSG_ERROR(compiler support for __thread is required)
fi

if test "x${libc_cv_visibility_attribute}" != xyes ||
   test "x${libc_cv_broken_visibility_attribute}" != xno; then
  AC_MSG_ERROR(working compiler support for visibility attribute is required)
fi

if test "x$libc_cv_asm_cfi_directives" != xyes; then
  dnl We need this only for some architectures.
  case "$base_machine" in
    i386 | x86_64 | powerpc | s390)
      AC_MSG_ERROR(CFI directive support in assembler is required) ;;
    *) ;;
  esac
fi

dnl Iff <unwind.h> is available, make sure it is the right one and it
dnl contains struct _Unwind_Exception.
AC_CACHE_CHECK(dnl
for forced unwind support, libc_cv_forced_unwind, [dnl
AC_TRY_LINK([#include <unwind.h>], [
struct _Unwind_Exception exc;
struct _Unwind_Context *context;
_Unwind_GetCFA (context)],
libc_cv_forced_unwind=yes, libc_cv_forced_unwind=no)])
if test $libc_cv_forced_unwind = yes; then
  AC_DEFINE(HAVE_FORCED_UNWIND)
dnl Check for C cleanup handling.
  old_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -Werror -fexceptions"
  AC_CACHE_CHECK([for C cleanup handling], libc_cv_c_cleanup, [dnl
  AC_TRY_LINK([
#include <stdio.h>
void cl (void *a) { }], [
  int a __attribute__ ((cleanup (cl)));
  puts ("test")],
libc_cv_c_cleanup=yes, libc_cv_c_cleanup=no)])
  CFLAGS="$old_CFLAGS"
  if test $libc_cv_c_cleanup = no; then
    AC_MSG_ERROR([the compiler must support C cleanup handling])
  fi
else
  AC_MSG_ERROR(forced unwind support is required)
fi
