- AC_SEARCH_LIBS(pthread_create, pthread c_r, [
- AM_CONDITIONAL(THREADS_PTHREAD, true)
- AC_DEFINE(HAVE_PTHREAD)
-
- # Need pthread_mutex_timedlock
- pthread_CFLAGS=""
- orig_CPPFLAGS=$CPPFLAGS
- # This is a gcc-specific error, but we already set
- # gcc-specific options in CFLAGS
- CPPFLAGS="$CPPFLAGS -Werror-implicit-function-declaration"
- AC_MSG_CHECKING(for pthread_mutex_timedlock)
- AC_TRY_COMPILE([ #include <pthread.h>], [
- pthread_mutex_t mut=PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_timedlock(&mut, NULL);
- ], [
- # Works!
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
- ], [
- AC_MSG_RESULT(no)
-
- # glibc requires -D_GNU_SOURCE before it will declare
- # this function
- AC_MSG_CHECKING(whether _GNU_SOURCE is needed for pthread_mutex_timedlock)
- CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
- AC_TRY_COMPILE([ #include <pthread.h>], [
- pthread_mutex_t mut=PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_timedlock(&mut, NULL);
- ], [
- AC_MSG_RESULT(yes)
- pthread_CFLAGS="-D_GNU_SOURCE"
- AC_DEFINE(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
- ], [
- AC_MSG_RESULT(no)
- dnl Add other variants here
- AC_MSG_WARN(Working around pthread_mutex_timedlock)
- ])
- ])
- CPPFLAGS=$orig_CPPFLAGS
- CPPFLAGS="$CPPFLAGS $pthread_CFLAGS"
-
- # Need PTHREAD_MUTEX_RECURSIVE
- pthread_CFLAGS=""
- orig_CPPFLAGS=$CPPFLAGS
- # This is a gcc-specific error, but we already set
- # gcc-specific options in CFLAGS
- CPPFLAGS="$CPPFLAGS -Werror-implicit-function-declaration"
- AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
- AC_TRY_COMPILE([ #include <pthread.h>], [
- pthread_mutexattr_t attr;
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
- ], [
- # Works!
- AC_MSG_RESULT(ok)
- ], [
- AC_MSG_RESULT(no)
-
- # glibc requires -D_GNU_SOURCE before it will declare
- # this macro
- AC_MSG_CHECKING(whether _GNU_SOURCE is needed for PTHREAD_MUTEX_RECURSIVE)
- CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
- AC_TRY_COMPILE([ #include <pthread.h>], [
- pthread_mutexattr_t attr;
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
- ], [
- AC_MSG_RESULT(ok)
- pthread_CFLAGS="-D_GNU_SOURCE"
- ], [
- AC_MSG_RESULT(no)
- dnl Add other variants here
- AC_MSG_WARN(Using mono_mutex_t for recursive mutexes)
- AC_DEFINE(USE_MONO_MUTEX)
- ])
- ])
- CPPFLAGS=$orig_CPPFLAGS
- CPPFLAGS="$CPPFLAGS $pthread_CFLAGS"