maint: update all copyright year number ranges
[gnulib.git] / m4 / pthread.m4
index 1ac8027..4e5aac5 100644 (file)
@@ -1,5 +1,5 @@
-# pthread.m4 serial 3
-dnl Copyright (C) 2009-2011 Free Software Foundation, Inc.
+# pthread.m4 serial 7
+dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -30,6 +30,7 @@ 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'
+     AC_LIBOBJ([pthread])
    else
      PTHREAD_H=
    fi
@@ -41,32 +42,37 @@ AC_DEFUN([gl_PTHREAD_CHECK],
      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"
+     dnl Also, FreeBSD 9 puts pthread_create in libpthread and pthread_join
+     dnl in libc, whereas on IRIX 6.5 the reverse is true; so check for both.
+     AC_CACHE_CHECK([for library containing pthread_create and pthread_join],
+       [gl_cv_lib_pthread],
+       [gl_saved_libs=$LIBS
+        gl_cv_lib_pthread=
+        for gl_lib_prefix in '' '-lpthread'; do
+          LIBS="$gl_lib_prefix $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
+               [[#include <pthread.h>
+                 void *noop (void *p) { return p; }]],
+               [[pthread_t pt;
+                 void *arg = 0;
+                 pthread_create (&pt, 0, noop, arg);
+                 pthread_join (pthread_self (), &arg);]])],
+            [if test -z "$gl_lib_prefix"; then
+               gl_cv_lib_pthread="none required"
+             else
+               gl_cv_lib_pthread=$gl_lib_prefix
+             fi])
+          test -n "$gl_cv_lib_pthread" && break
+        done
         LIBS="$gl_saved_libs"
        ])
-     if test "$gl_cv_search_pthread_join" != "none required"; then
-       LIB_PTHREAD="$gl_cv_search_pthread_join"
+     if test "$gl_cv_lib_pthread" != "none required"; then
+       LIB_PTHREAD="$gl_cv_lib_pthread"
      fi
    fi
    AC_SUBST([LIB_PTHREAD])
 
-   AC_REQUIRE([AC_C_INLINE])
    AC_REQUIRE([AC_C_RESTRICT])
 ])