[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Check whether pthread_sigmask is a simple macro
From: |
Pavel Fedin |
Subject: |
[PATCH] Check whether pthread_sigmask is a simple macro |
Date: |
Mon, 25 May 2015 09:40:21 +0300 |
GNULib's pthread_sigmask() is configured and builds incorrectly on MinGW64.
Configure
script detects it as
present, and this is technically correct, but:
--- cut ---
/* Windows has rudimentary signals support. */
#define pthread_sigmask(H, S1, S2) 0
--- cut ---
(see
http://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-libraries/winpthread
s/include/pthread_signal.h)
And this causes failure building gnulib's pthread_sigmask.c, because it tries
to refer to
original pthread_sigmask()
after #undef'ing it.
This patch recognizes that pthread_sigmask is a simple macro and there's no
real function
behind it, and in this case it produces the following settings:
HAVE_PTHREAD_SIGMASK=0
LIB_PTHREAD_SIGMASK=''
REPLACE_PTHREAD_SIGMASK=1
so that pthread_sigmask() is entirely emulated by GNULib.
Related topic:
http://lists.gnu.org/archive/html/bug-gnulib/2015-04/msg00065.html
Signed-off-by: Pavel Fedin <address@hidden>
m4/pthread_sigmask.m4 | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/m4/pthread_sigmask.m4 b/m4/pthread_sigmask.m4
index 5c17dfc..a974848 100644
--- a/m4/pthread_sigmask.m4
+++ b/m4/pthread_sigmask.m4
@@ -40,6 +40,30 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
LIBS="$gl_save_LIBS"
])
if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
+ 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 return
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
--
Kind regards,
Pavel Fedin
Expert Engineer
Samsung Electronics Research center Russia
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Check whether pthread_sigmask is a simple macro,
Pavel Fedin <=