update NEWS.stable
[gnulib.git] / m4 / pthread.m4
index b9a250c..1ac8027 100644 (file)
@@ -1,4 +1,4 @@
-# pthread.m4
+# pthread.m4 serial 3
 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,7 +7,6 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_PTHREAD_CHECK],
 [
    AC_REQUIRE([gl_PTHREAD_DEFAULTS])
-   AC_CHECK_HEADERS_ONCE([pthread.h])
    gl_CHECK_NEXT_HEADERS([pthread.h])
    if test $ac_cv_header_pthread_h = yes; then
      HAVE_PTHREAD_H=1
@@ -31,16 +30,39 @@ AC_DEFUN([gl_PTHREAD_CHECK],
       test $ac_cv_type_pthread_t != yes ||
       test $ac_cv_type_pthread_spinlock_t != yes; then
      PTHREAD_H='pthread.h'
+   else
+     PTHREAD_H=
    fi
+   AC_SUBST([PTHREAD_H])
+   AM_CONDITIONAL([GL_GENERATE_PTHREAD_H], [test -n "$PTHREAD_H"])
 
    LIB_PTHREAD=
    if test $ac_cv_header_pthread_h = yes; then
-     gl_saved_libs=$LIBS
-     AC_SEARCH_LIBS([pthread_create], [pthread],
-       [if test "$ac_cv_search_pthread_create" != "none required"; then
-          LIB_PTHREAD="$ac_cv_search_pthread_create"
-        fi])
-     LIBS="$gl_saved_libs"
+     dnl We cannot use AC_SEARCH_LIBS here, because on OSF/1 5.1 pthread_join
+     dnl is defined as a macro which expands to __phread_join, and libpthread
+     dnl contains a definition for __phread_join but none for pthread_join.
+     AC_CACHE_CHECK([for library containing pthread_join],
+       [gl_cv_search_pthread_join],
+       [gl_saved_libs="$LIBS"
+        gl_cv_search_pthread_join=
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[#include <pthread.h>]],
+             [[pthread_join (pthread_self (), (void **) 0);]])],
+          [gl_cv_search_pthread_join="none required"])
+        if test -z "$gl_cv_search_pthread_join"; then
+          LIBS="-lpthread $gl_saved_libs"
+          AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <pthread.h>]],
+               [[pthread_join (pthread_self (), (void **) 0);]])],
+            [gl_cv_search_pthread_join="-lpthread"])
+        fi
+        LIBS="$gl_saved_libs"
+       ])
+     if test "$gl_cv_search_pthread_join" != "none required"; then
+       LIB_PTHREAD="$gl_cv_search_pthread_join"
+     fi
    fi
    AC_SUBST([LIB_PTHREAD])
 
@@ -54,5 +76,4 @@ AC_DEFUN([gl_PTHREAD_DEFAULTS],
   HAVE_PTHREAD_H=1;              AC_SUBST([HAVE_PTHREAD_H])
   HAVE_PTHREAD_T=1;              AC_SUBST([HAVE_PTHREAD_T])
   HAVE_PTHREAD_SPINLOCK_T=1;     AC_SUBST([HAVE_PTHREAD_SPINLOCK_T])
-  PTHREAD_H='';                  AC_SUBST([PTHREAD_H])
 ])