X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fpthread.m4;h=4e5aac59ce2b3aeb2dc021f178599995a6b5d6b8;hb=533101a268dc5015a140ff4695d8eeb04fbe57b6;hp=1ac8027dda9ee18ae38895295f2b18dc65ad9595;hpb=a6322904ea944ba119aaa62c0c3ee7cfade8b59c;p=gnulib.git diff --git a/m4/pthread.m4 b/m4/pthread.m4 index 1ac8027dd..4e5aac59c 100644 --- a/m4/pthread.m4 +++ b/m4/pthread.m4 @@ -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_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_join (pthread_self (), (void **) 0);]])], - [gl_cv_search_pthread_join="-lpthread"]) - fi + [[#include + 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]) ])