[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Can't compile on Windows
From: |
Bruno Haible |
Subject: |
Re: Can't compile on Windows |
Date: |
Sat, 18 May 2019 14:44:02 +0200 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-145-generic; KDE/5.18.0; x86_64; ; ) |
> > > > error: expected identifier or '(' before numeric constant
> > > > pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask)
> > > > ^
I'm reproducing this error now, by compiling gettext-0.20.1 with
--enable-threads=windows.
Or, more simply, with a testdir:
./gnulib-tool --create-testdir --dir=/tmp/testdir --single-configure \
pthread_sigmask lock
configured with --enable-threads=windows.
On 2015-06-01 a patch was added that was meant to fix it, but it has an effect
only in some, not in all cases. This patch should fix it for real.
2019-05-18 Bruno Haible <address@hidden>
pthread_sigmask: Fix compilation error with --enable-threads=windows.
Reported by Tim Rühsen in
<https://lists.gnu.org/archive/html/bug-gnulib/2018-01/msg00018.html>
and Michele Locati in
<https://lists.gnu.org/archive/html/bug-gettext/2019-04/msg00057.html>.
* m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Revert change from
2015-06-01. Test whether pthread_sigmask is a macro, regardless of
$LIBMULTITHREAD. Consider it regardless whether module 'threadlib' is
in use and regardless which threads API is chosen.
diff -w --git a/m4/pthread_sigmask.m4 b/m4/pthread_sigmask.m4
index cadc239..648edf9 100644
--- a/m4/pthread_sigmask.m4
+++ b/m4/pthread_sigmask.m4
@@ -1,4 +1,4 @@
-# pthread_sigmask.m4 serial 16
+# pthread_sigmask.m4 serial 17
dnl Copyright (C) 2011-2019 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -9,8 +9,29 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
AC_CHECK_FUNCS_ONCE([pthread_sigmask])
+
+ 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.
+ AC_CACHE_CHECK([whether pthread_sigmask is a macro],
+ [gl_cv_func_pthread_sigmask_macro],
+ [AC_EGREP_CPP([headers_define_pthread_sigmask], [
+#include <pthread.h>
+#include <signal.h>
+#ifdef pthread_sigmask
+ headers_define_pthread_sigmask
+#endif],
+ [gl_cv_func_pthread_sigmask_macro=yes],
+ [gl_cv_func_pthread_sigmask_macro=no])
+ ])
+
LIB_PTHREAD_SIGMASK=
+ if test $gl_cv_func_pthread_sigmask_macro = yes; then
+ dnl pthread_sigmask is a dummy macro.
+ HAVE_PTHREAD_SIGMASK=0
+ dnl Make sure to '#undef pthread_sigmask' before defining it.
+ REPLACE_PTHREAD_SIGMASK=1
+ else
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
@@ -40,30 +61,6 @@ 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
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
@@ -80,8 +77,8 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
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 pthread_sigmask with sigprocmask also in this case. This yields
+ dnl fewer link dependencies.
if test $ac_cv_func_pthread_sigmask = yes; then
REPLACE_PTHREAD_SIGMASK=1
else
@@ -91,8 +88,8 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
], [
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.
+ dnl The package either has prepared CPPFLAGS and LIBS for use of
+ dnl POSIX:2008 threads, or wants to build single-threaded programs.
if test $ac_cv_func_pthread_sigmask = yes; then
dnl pthread_sigmask exists and does not require extra libraries.
dnl Assume that it is declared.
@@ -106,6 +103,7 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
REPLACE_PTHREAD_SIGMASK=1
fi
])
+ fi
AC_SUBST([LIB_PTHREAD_SIGMASK])
dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when