X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fpthread.m4;h=42a2a69c573a08b70758ea29d8496964809a5832;hb=a02ba4bf889fee4622db87f185c3d0af84d74ae7;hp=31d2b2264ecb7ed0518643d6e6bca4251133c1cc;hpb=b2e2010c7c902235b5efb5bd3c6529f61b093aa4;p=gnulib.git diff --git a/m4/pthread.m4 b/m4/pthread.m4 index 31d2b2264..42a2a69c5 100644 --- a/m4/pthread.m4 +++ b/m4/pthread.m4 @@ -1,27 +1,79 @@ -# pthread.m4 -dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# pthread.m4 serial 3 +dnl Copyright (C) 2009-2012 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. AC_DEFUN([gl_PTHREAD_CHECK], - [AC_CHECK_HEADERS_ONCE([pthread.h]) - - LIB_PTHREAD= - PTHREAD_H= - 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" +[ + AC_REQUIRE([gl_PTHREAD_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([pthread.h]) + if test $ac_cv_header_pthread_h = yes; then + HAVE_PTHREAD_H=1 else + HAVE_PTHREAD_H=0 + fi + + AC_CHECK_TYPES([pthread_t, pthread_spinlock_t], [], [], + [AC_INCLUDES_DEFAULT[ + #if HAVE_PTHREAD_H + #include + #endif]]) + if test $ac_cv_type_pthread_t != yes; then + HAVE_PTHREAD_T=0 + fi + if test $ac_cv_type_pthread_spinlock_t != yes; then + HAVE_PTHREAD_SPINLOCK_T=0 + fi + + if test $ac_cv_header_pthread_h != yes || + 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 + 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" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[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]) - AC_SUBST([PTHREAD_H]) + AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) ]) + +AC_DEFUN([gl_PTHREAD_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. + 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]) +])