[
pthread_t pt;
pthread_create(&pt, NULL, NULL, NULL);
- pthread_spinlock_t lock;
- pthread_spin_lock(&lock);
]
)
],
CFLAGS="$bird_tmp_cflags"
])
+dnl ** Android API before version 24 doesn't implement spinlocks.
+AC_DEFUN([BIRD_CHECK_PTHREAD_SPINLOCK],
+[
+ AC_CACHE_CHECK(
+ [whether POSIX threads provide spinlocks],
+ [bird_cv_lib_pthread_spinlock],
+ [
+ AC_LINK_IFELSE(
+ [
+ AC_LANG_PROGRAM(
+ [ #include <pthread.h> ],
+ [
+ pthread_spinlock_t lock;
+ pthread_spin_lock(&lock);
+ ]
+ )
+ ],
+ [bird_cv_lib_pthread_spinlock=yes],
+ [bird_cv_lib_pthread_spinlock=no]
+ )
+ ]
+ )
+])
+
AC_DEFUN([BIRD_CHECK_MPLS_KERNEL],
[
AC_CACHE_CHECK(
AC_DEFINE([USE_PTHREADS], [1], [Define to 1 if pthreads are enabled])
CFLAGS="$CFLAGS -pthread"
LDFLAGS="$LDFLAGS -pthread"
- proto_bfd=bfd
+
+ BIRD_CHECK_PTHREAD_SPINLOCK
+ if test "$bird_cv_lib_pthread_spinlock" = yes ; then
+ AC_DEFINE([USE_PTHREAD_SPINLOCK], [1], [Define to 1 if pthreads provide spinlocks])
+ proto_bfd=bfd
+ fi
+
elif test "$enable_pthreads" = yes ; then
AC_MSG_ERROR([POSIX threads not available.])
fi