bug-gnulib
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]