Merge Trond
[awesomized/libmemcached] / m4 / pandora_pthread.m4
index 92bdfc44f5e3e93f20689591d20590e6180cca62..78af2ba516637098b6c0a40b176cefe6bb56542f 100644 (file)
@@ -14,12 +14,56 @@ dnl --------------------------------------------------------------------
 dnl  Check for libpthread
 dnl --------------------------------------------------------------------
 
+AC_DEFUN([PANDORA_PTHREAD_YIELD],[
+  AC_REQUIRE([ACX_PTHREAD])
+
+  save_CFLAGS="${CFLAGS}"
+  save_CXXFLAGS="${CXXFLAGS}"
+  CFLAGS="${PTHREAD_CFLAGS} ${CFLAGS}"
+  CXXFLAGS="${PTHREAD_CFLAGS} ${CXXFLAGS}"
+  dnl Some OSes like Mac OS X have that as a replacement for pthread_yield()
+  AC_CHECK_FUNCS(pthread_yield_np)
+  AC_CACHE_CHECK([if pthread_yield takes zero arguments],
+    [pandora_cv_pthread_yield_zero_arg],
+    [AC_LINK_IFELSE([
+      AC_LANG_PROGRAM([[
+#include <pthread.h>
+        ]],[[
+  pthread_yield();
+        ]])],
+      [pandora_cv_pthread_yield_zero_arg=yes],
+      [pandora_cv_pthread_yield_zero_arg=no])])
+  AS_IF([test "$pandora_cv_pthread_yield_zero_arg" = "yes"],[
+    AC_DEFINE([HAVE_PTHREAD_YIELD_ZERO_ARG], [1],
+              [pthread_yield that doesn't take any arguments])
+  ])
+
+  AC_CACHE_CHECK([if pthread_yield takes one argument],
+    [pandora_cv_pthread_yield_one_arg],
+    [AC_LINK_IFELSE([
+      AC_LANG_PROGRAM([[
+#include <pthread.h>
+        ]],[[
+  pthread_yield(0);
+        ]])],
+      [pandora_cv_pthread_yield_one_arg=yes],
+      [pandora_cv_pthread_yield_one_arg=no])])
+  AS_IF([test "$pandora_cv_pthread_yield_one_arg" = "yes"],[
+    AC_DEFINE([HAVE_PTHREAD_YIELD_ONE_ARG], [1],
+              [pthread_yield function with one argument])
+  ])
+
+  CFLAGS="${save_CFLAGS}"
+  CXXFLAGS="${save_CXXFLAGS}"
+])
+
+
 AC_DEFUN([_PANDORA_SEARCH_PTHREAD],[
-  ACX_PTHREAD
+  AC_REQUIRE([ACX_PTHREAD])
   LIBS="${PTHREAD_LIBS} ${LIBS}"
   AM_CFLAGS="${PTHREAD_CFLAGS} ${AM_CFLAGS}"
   AM_CXXFLAGS="${PTHREAD_CFLAGS} ${AM_CXXFLAGS}"
-  CC="$PTHREAD_CC"
+  PANDORA_PTHREAD_YIELD
 ])