changeset 15435:ca6931d3b78b

pthread_sigmask: assume POSIX threads if --avoid=threadlib * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): If gl_THREADLIB is not defined, assume POSIX threads and look for pthread_sigmask in $LIBS, without changing $CPPFLAGS.
author Paul Eggert <eggert@cs.ucla.edu>
date Wed, 20 Jul 2011 02:57:20 +0200
parents 2cf9eb4a011c
children 904d3cee5cc3
files ChangeLog m4/pthread_sigmask.m4
diffstat 2 files changed, 70 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-07-19  Paul Eggert  <eggert@cs.ucla.edu>
+	    Bruno Haible  <bruno@clisp.org>
+
+	pthread_sigmask: assume POSIX threads if --avoid=threadlib
+	* m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): If gl_THREADLIB is
+	not defined, assume POSIX threads and look for pthread_sigmask in
+	$LIBS, without changing $CPPFLAGS.
+
 2011-07-19  Bruno Haible  <bruno@clisp.org>
 
 	strstr: Update cross-compilation guess.
--- a/m4/pthread_sigmask.m4
+++ b/m4/pthread_sigmask.m4
@@ -1,4 +1,4 @@
-# pthread_sigmask.m4 serial 10
+# pthread_sigmask.m4 serial 11
 dnl Copyright (C) 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,
@@ -6,56 +6,81 @@
 
 AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
 [
-  AC_REQUIRE([gl_THREADLIB])
-
   AC_CHECK_FUNCS_ONCE([pthread_sigmask])
   LIB_PTHREAD_SIGMASK=
-  if test "$gl_threads_api" = posix; then
-    if test $ac_cv_func_pthread_sigmask = yes; then
-      dnl pthread_sigmask is available without -lpthread.
-      :
-    else
-      if test -n "$LIBMULTITHREAD"; then
-        AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD],
-          [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD],
-          [gl_save_LIBS="$LIBS"
-           LIBS="$LIBS $LIBMULTITHREAD"
-           AC_LINK_IFELSE(
-             [AC_LANG_PROGRAM(
-                [[#include <pthread.h>
-                  #include <signal.h>
-                ]],
-                [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]])
-             ],
-             [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes],
-             [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no])
-           LIBS="$gl_save_LIBS"
-          ])
-        if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
-          dnl pthread_sigmask is available with -lpthread.
-          LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD"
+
+  dnl Test whether the gnulib module 'threadlib' is in use.
+  dnl Some packages like Emacs use --avoid=threadlib.
+  dnl Write the symbol in such a way that it does not cause 'aclocal' to pick
+  dnl the threadlib.m4 file that is installed in $PREFIX/share/aclocal/.
+  m4_ifdef([gl_[]THREADLIB], [
+    AC_REQUIRE([gl_[]THREADLIB])
+
+    if test "$gl_threads_api" = posix; then
+      if test $ac_cv_func_pthread_sigmask = yes; then
+        dnl pthread_sigmask is available without -lpthread.
+        :
+      else
+        if test -n "$LIBMULTITHREAD"; then
+          AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD],
+            [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD],
+            [gl_save_LIBS="$LIBS"
+             LIBS="$LIBS $LIBMULTITHREAD"
+             AC_LINK_IFELSE(
+               [AC_LANG_PROGRAM(
+                  [[#include <pthread.h>
+                    #include <signal.h>
+                  ]],
+                  [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]])
+               ],
+               [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes],
+               [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no])
+             LIBS="$gl_save_LIBS"
+            ])
+          if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
+            dnl pthread_sigmask is available with -lpthread.
+            LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD"
+          else
+            dnl pthread_sigmask is not available at all.
+            HAVE_PTHREAD_SIGMASK=0
+          fi
         else
           dnl pthread_sigmask is not available at all.
           HAVE_PTHREAD_SIGMASK=0
         fi
+      fi
+    else
+      dnl pthread_sigmask may exist but does not interoperate with the chosen
+      dnl multithreading facility.
+      dnl If "$gl_threads_api" = pth, we could use the function pth_sigmask,
+      dnl but it is equivalent to sigprocmask, so we choose to emulate
+      dnl pthread_sigmask with sigprocmask also in this case. This yields fewer
+      dnl link dependencies.
+      if test $ac_cv_func_pthread_sigmask = yes; then
+        REPLACE_PTHREAD_SIGMASK=1
       else
-        dnl pthread_sigmask is not available at all.
         HAVE_PTHREAD_SIGMASK=0
       fi
     fi
-  else
-    dnl pthread_sigmask may exist but does not interoperate with the chosen
-    dnl multithreading facility.
-    dnl If "$gl_threads_api" = pth, we could use the function pth_sigmask,
-    dnl but it is equivalent to sigprocmask, so we choose to emulate
-    dnl pthread_sigmask with sigprocmask also in this case. This yields fewer
-    dnl link dependencies.
+  ], [
+    dnl The module 'threadlib' is not in use, due to --avoid=threadlib being
+    dnl specified.
+    dnl The package either has prepared CPPFLAGS and LIBS for use of POSIX:2008
+    dnl threads, or wants to build single-threaded programs.
     if test $ac_cv_func_pthread_sigmask = yes; then
-      REPLACE_PTHREAD_SIGMASK=1
+      dnl pthread_sigmask exists and does not require extra libraries.
+      dnl Assume that it is declared.
+      :
     else
+      dnl pthread_sigmask either does not exist or needs extra libraries.
       HAVE_PTHREAD_SIGMASK=0
+      dnl Define the symbol rpl_pthread_sigmask, not pthread_sigmask,
+      dnl so as to not accidentally override the system's pthread_sigmask
+      dnl symbol from libpthread. This is necessary on IRIX 6.5.
+      REPLACE_PTHREAD_SIGMASK=1
     fi
-  fi
+  ])
+
   AC_SUBST([LIB_PTHREAD_SIGMASK])
   dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when
   dnl "$gl_threads_api" = posix, $LTLIBMULTITHREAD and $LIBMULTITHREAD are the