-# pthread_sigmask.m4 serial 13
-dnl Copyright (C) 2011-2012 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.
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.
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
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
*)
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>
[:],
[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)