]> code.delx.au - gnu-emacs/blobdiff - m4/pthread_sigmask.m4
Remove now-inaccurate bytecode comments
[gnu-emacs] / m4 / pthread_sigmask.m4
index 15d41e4d860ded8206c73a1c0e1afbbb809b1718..5b3e1cad327deb4d044ac94e485cf958dcddaa6d 100644 (file)
@@ -1,5 +1,5 @@
-# pthread_sigmask.m4 serial 13
-dnl Copyright (C) 2011-2015 Free Software Foundation, Inc.
+# pthread_sigmask.m4 serial 16
+dnl Copyright (C) 2011-2016 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.
@@ -40,7 +40,31 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
              LIBS="$gl_save_LIBS"
             ])
           if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
-            dnl pthread_sigmask is available with -lpthread.
+            AC_CACHE_CHECK([whether pthread_sigmask is only a macro],
+              [gl_cv_func_pthread_sigmask_is_macro],
+              [gl_save_LIBS="$LIBS"
+               LIBS="$LIBS $LIBMULTITHREAD"
+               AC_LINK_IFELSE(
+                 [AC_LANG_PROGRAM(
+                    [[#include <pthread.h>
+                      #include <signal.h>
+                      #undef pthread_sigmask
+                    ]],
+                    [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]])
+                 ],
+                 [gl_cv_func_pthread_sigmask_is_macro=no],
+                 [gl_cv_func_pthread_sigmask_is_macro=yes])
+               LIBS="$gl_save_LIBS"
+              ])
+            if test $gl_cv_func_pthread_sigmask_is_macro = yes; then
+              dnl On MinGW pthread_sigmask is just a macro which always returns 0.
+              dnl It does not exist as a real function, which is required by POSIX.
+              REPLACE_PTHREAD_SIGMASK=1
+              gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no
+            fi
+          fi
+          if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
+            dnl pthread_sigmask is available with -pthread or -lpthread.
             LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD"
           else
             dnl pthread_sigmask is not available at all.
@@ -86,7 +110,7 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
   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
-  dnl same: either both empty or both "-lpthread".
+  dnl same.
 
   dnl Now test for some bugs in the system function.
   if test $HAVE_PTHREAD_SIGMASK = 1; then
@@ -97,39 +121,44 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
     dnl with -lpthread, the pthread_sigmask() function always returns 0 and has
     dnl no effect.
     if test -z "$LIB_PTHREAD_SIGMASK"; then
-      AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread],
-        [gl_cv_func_pthread_sigmask_in_libc_works],
-        [
-          AC_RUN_IFELSE(
-            [AC_LANG_SOURCE([[
-#include <pthread.h>
-#include <signal.h>
-#include <stddef.h>
-int main ()
-{
-  sigset_t set;
-  sigemptyset (&set);
-  return pthread_sigmask (1729, &set, NULL) != 0;
-}]])],
-            [gl_cv_func_pthread_sigmask_in_libc_works=no],
-            [gl_cv_func_pthread_sigmask_in_libc_works=yes],
-            [
-changequote(,)dnl
-             case "$host_os" in
-               freebsd* | hpux* | solaris | solaris2.[2-9]*)
-                 gl_cv_func_pthread_sigmask_in_libc_works="guessing no";;
-               *)
-                 gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";;
-             esac
-changequote([,])dnl
-            ])
-        ])
-      case "$gl_cv_func_pthread_sigmask_in_libc_works" in
-        *no)
-          REPLACE_PTHREAD_SIGMASK=1
-          AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1],
-            [Define to 1 if pthread_sigmask() may returns 0 and have no effect.])
-          ;;
+      case " $LIBS " in
+        *' -pthread '*) ;;
+        *' -lpthread '*) ;;
+       *)
+         AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread],
+           [gl_cv_func_pthread_sigmask_in_libc_works],
+           [
+             AC_RUN_IFELSE(
+               [AC_LANG_SOURCE([[
+                  #include <pthread.h>
+                  #include <signal.h>
+                  #include <stddef.h>
+                  int main ()
+                  {
+                    sigset_t set;
+                    sigemptyset (&set);
+                    return pthread_sigmask (1729, &set, NULL) != 0;
+                  }]])],
+               [gl_cv_func_pthread_sigmask_in_libc_works=no],
+               [gl_cv_func_pthread_sigmask_in_libc_works=yes],
+               [
+                changequote(,)dnl
+                case "$host_os" in
+                  freebsd* | hpux* | solaris | solaris2.[2-9]*)
+                    gl_cv_func_pthread_sigmask_in_libc_works="guessing no";;
+                  *)
+                    gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";;
+                esac
+                changequote([,])dnl
+               ])
+           ])
+         case "$gl_cv_func_pthread_sigmask_in_libc_works" in
+           *no)
+             REPLACE_PTHREAD_SIGMASK=1
+             AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1],
+               [Define to 1 if pthread_sigmask may return 0 and have no effect.])
+             ;;
+         esac;;
       esac
     fi
 
@@ -184,11 +213,12 @@ int main ()
           *)
             gl_cv_func_pthread_sigmask_unblock_works="guessing yes";;
         esac
-        dnl Here we link against $LIBMULTITHREAD, not only $LIB_PTHREAD_SIGMASK,
-        dnl otherwise we get a false positive on those platforms where
-        dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no".
-        gl_save_LIBS="$LIBS"
-        LIBS="$LIBS $LIBMULTITHREAD"
+        m4_ifdef([gl_][THREADLIB],
+          [dnl Link against $LIBMULTITHREAD, not only $LIB_PTHREAD_SIGMASK.
+           dnl Otherwise we get a false positive on those platforms where
+           dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no".
+           gl_save_LIBS=$LIBS
+           LIBS="$LIBS $LIBMULTITHREAD"])
         AC_RUN_IFELSE(
           [AC_LANG_SOURCE([[
 #include <pthread.h>
@@ -227,7 +257,7 @@ int main ()
           [:],
           [gl_cv_func_pthread_sigmask_unblock_works=no],
           [:])
-        LIBS="$gl_save_LIBS"
+        m4_ifdef([gl_][THREADLIB], [LIBS=$gl_save_LIBS])
       ])
     case "$gl_cv_func_pthread_sigmask_unblock_works" in
       *no)