bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: status of new 'c++defs' module?


From: Bruno Haible
Subject: Re: status of new 'c++defs' module?
Date: Sun, 21 Mar 2010 01:48:30 +0100
User-agent: KMail/1.9.9

John W. Eaton wrote:
> An additional problem showed up on OS X systems:
> 
>   libtool: compile:  g++-4.2 -DHAVE_CONFIG_H -I. -I.. -I/sw/lib/flex/include 
> -I/sw/include -O0 -g -m32 -I/sw/include/freetype2 -I/sw/include/qhull 
> -I/usr/include -I../libgnu -I../libgnu -I../libcruft/misc -I../liboctave 
> -I../liboctave -I. -I. -I/sw/lib/flex/include -I/sw/include -O0 -g -m32 
> -I/sw/include/freetype2 -I/sw/include/qhull -I/usr/include -I/sw/include -O0 
> -g -m32 -D_THREAD_SAFE -D_REENTRANT -DHAVE_CONFIG_H -mieee-fp -I/sw/include 
> -I/sw/include/freetype2 -I/sw/include -I/usr/X11/include -Wall -W -Wshadow 
> -Wold-style-cast -Wformat -I/sw/include -O0 -g -m32 -D_THREAD_SAFE 
> -D_REENTRANT -D_THREAD_SAFE -pthread -I/sw/include -O0 -g -m32 -D_THREAD_SAFE 
> -D_REENTRANT -MT liboctinterp_la-sighandlers.lo -MD -MP -MF 
> .deps/liboctinterp_la-sighandlers.Tpo -c sighandlers.cc  -fno-common -DPIC -o 
> .libs/liboctinterp_la-sighandlers.o
>   sighandlers.cc: In function ‘void my_friendly_exit(const char*, int, bool)’:
>   sighandlers.cc:132: warning: use of old-style cast
>   sighandlers.cc:158: warning: use of old-style cast
>   sighandlers.cc: In function ‘void (* octave_set_signal_handler(int, void 
> (*)(int), bool))(int)’:
>   sighandlers.cc:198: error: expected unqualified-id before ‘(’ token
>   sighandlers.cc:199: error: expected unqualified-id before ‘(’ token
>   sighandlers.cc: In function ‘void sigchld_handler(int)’:
>   sighandlers.cc:232: error: expected unqualified-id before ‘(’ token
>   sighandlers.cc:232: error: expected unqualified-id before ‘(’ token
>   sighandlers.cc:232: error: expected unqualified-id before ‘(’ token
>   sighandlers.cc: In function ‘octave_interrupt_handler 
> octave_ignore_interrupts()’:
>   sighandlers.cc:506: warning: use of old-style cast
>   sighandlers.cc: In function ‘void install_signal_handlers()’:
>   sighandlers.cc:646: warning: use of old-style cast
>   make[3]: *** [liboctinterp_la-sighandlers.lo] Error 1
>   make[2]: *** [all] Error 2
>   make[1]: *** [all-recursive] Error 1
>   make: *** [all] Error 2
> 
> Lines 198 and 199 of Octave's sighandlers.cc file are
> 
>   gnulib::sigemptyset (&act.sa_mask);
>   gnulib::sigemptyset (&oact.sa_mask);
> 
> and looking at the preprocessed source file, I see they are being
> transformed to
> 
>   gnulib::(*(&act.sa_mask) = 0, 0);
>   gnulib::(*(&oact.sa_mask) = 0, 0);
> 
> So apparently, sigemptyset is a macro on OS X systems.  Likewise for
> sigaddset.

I agree that your program should not need to have
  #undef sigemptyset
in order to use the gnulib::sigemptyset function. So let's fix it in gnulib.
This is a guess. Please report if it does not work.


2010-03-20  Bruno Haible  <address@hidden>

        signal: Undefine macro definitions in C++ mode.
        * lib/signal.in.h (sigismember, sigemptyset, sigaddset, sigdelset,
        sigfillset): Undefine macro definitions from the system header in C++
        mode.
        Reported by John W. Eaton <address@hidden>.

--- lib/signal.in.h.orig        Sun Mar 21 01:42:59 2010
+++ lib/signal.in.h     Sun Mar 21 01:42:52 2010
@@ -85,7 +85,12 @@
 # endif
 
 /* Test whether a given signal is contained in a signal set.  */
-# if address@hidden@
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on MacOS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigismember
+#  endif
+# else
 _GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig)
                                     _GL_ARG_NONNULL ((1)));
 # endif
@@ -93,14 +98,24 @@
 _GL_CXXALIASWARN (sigismember);
 
 /* Initialize a signal set to the empty set.  */
-# if address@hidden@
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on MacOS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigemptyset
+#  endif
+# else
 _GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
 # endif
 _GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set));
 _GL_CXXALIASWARN (sigemptyset);
 
 /* Add a signal to a signal set.  */
-# if address@hidden@
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on MacOS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigaddset
+#  endif
+# else
 _GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig)
                                   _GL_ARG_NONNULL ((1)));
 # endif
@@ -108,7 +123,12 @@
 _GL_CXXALIASWARN (sigaddset);
 
 /* Remove a signal from a signal set.  */
-# if address@hidden@
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on MacOS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigdelset
+#  endif
+# else
 _GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig)
                                   _GL_ARG_NONNULL ((1)));
 # endif
@@ -116,7 +136,12 @@
 _GL_CXXALIASWARN (sigdelset);
 
 /* Fill a signal set with all possible signals.  */
-# if address@hidden@
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on MacOS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigfillset
+#  endif
+# else
 _GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
 # endif
 _GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set));




reply via email to

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