unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* Missing braces around pthread initializer macros
@ 2007-10-07 20:55 Ludovic Courtès
  2007-10-10 16:52 ` Ludovic Courtès
  0 siblings, 1 reply; 2+ messages in thread
From: Ludovic Courtès @ 2007-10-07 20:55 UTC (permalink / raw)
  To: guile-devel

[-- Attachment #1: Type: text/plain, Size: 909 bytes --]

Hi,

Unless something turns out to be wrong, I'm going to apply the attached
patch that (hopefully) fixes the "missing braces around initializer"
problem with GCC on Solaris/IRIX [0,1].  I tested it on GNU/Linux as
well as on Solaris 2.8 (SunOS 5.8) with GCC 2.95.2.

The previous configure machinery failed to detect situations where
braces are needed because GCC only issues a warning, not an error.
Thus, `-Werror' must be used for this test.

The patch also adds a similar test for `PTHREAD_MUTEX_INITIALIZER',
needed on IRIX with GCC.  Evidence suggests that similar problems may
exist on other proprietary Unices, with other initializer macros [2],
but let's just focus on those that have been reported so far.

Thanks,
Ludovic.

[0] http://article.gmane.org/gmane.lisp.guile.bugs/3600
[1] http://article.gmane.org/gmane.lisp.guile.bugs/3608
[2] http://gcc.gnu.org/ml/gcc-patches/2004-11/msg01683.html


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: The patch --]
[-- Type: text/x-patch, Size: 3882 bytes --]

--- orig/configure.in
+++ mod/configure.in
@@ -1090,6 +1090,7 @@
             , with_threads=yes)
 
 AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT, 0)
+AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER, 0)
 
 case "$with_threads" in
   "yes" | "pthread" | "pthreads" | "pthread-threads" | "")
@@ -1113,23 +1114,42 @@
 
     # On past versions of Solaris, believe 8 through 10 at least, you
     # had to write "pthread_once_t foo = { PTHREAD_ONCE_INIT };".
-    # This is contrary to posix:
+    # This is contrary to POSIX:
     # http://www.opengroup.org/onlinepubs/000095399/functions/pthread_once.html
     # Check here if this style is required.
     #
     # glibc (2.3.6 at least) works both with or without braces, so the
     # test checks whether it works without.
     #
+
+    if test "$GCC" = "yes"; then
+      # Since GCC only issues a warning for missing braces, so we need
+      # `-Werror' to catch it.
+      CFLAGS="-Werror -Wmissing-braces $CFLAGS"
+    fi
+
     AC_CACHE_CHECK([whether PTHREAD_ONCE_INIT needs braces],
       guile_cv_need_braces_on_pthread_once_init,
-      [AC_TRY_COMPILE([#include <pthread.h>],
-        [pthread_once_t foo = PTHREAD_ONCE_INIT;],
+      [AC_COMPILE_IFELSE([#include <pthread.h>
+         pthread_once_t foo = PTHREAD_ONCE_INIT;],
         [guile_cv_need_braces_on_pthread_once_init=no],
         [guile_cv_need_braces_on_pthread_once_init=yes])])
     if test "$guile_cv_need_braces_on_pthread_once_init" = yes; then
       SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT=1
     fi
 
+    # Same problem with `PTHREAD_MUTEX_INITIALIZER', e.g., on IRIX
+    # 6.5.30m with GCC 3.3.
+    AC_CACHE_CHECK([whether PTHREAD_MUTEX_INITIALIZER needs braces],
+      guile_cv_need_braces_on_pthread_mutex_initializer,
+      [AC_COMPILE_IFELSE([#include <pthread.h>
+         pthread_mutex_t foo = PTHREAD_MUTEX_INITIALIZER;],
+        [guile_cv_need_braces_on_pthread_mutex_initializer=no],
+        [guile_cv_need_braces_on_pthread_mutex_initializer=yes])])
+    if test "$guile_cv_need_braces_on_pthread_mutex_initializer" = yes; then
+      SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER=1
+    fi
+
     CFLAGS="$old_CFLAGS"
 
     # On Solaris, sched_yield lives in -lrt.


--- orig/libguile/gen-scmconfig.c
+++ mod/libguile/gen-scmconfig.c
@@ -382,6 +382,11 @@
   pf ("#define SCM_NEED_BRACES_ON_PTHREAD_ONCE_INIT %d /* 0 or 1 */\n",
       SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT);
 
+  pf ("/* Define to 1 if need braces around PTHREAD_MUTEX_INITIALIZER\n"
+      "   (for IRIX with GCC)  */\n");
+  pf ("#define SCM_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER %d /* 0 or 1 */\n",
+      SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER);
+
 #if USE_DLL_IMPORT
   pf ("\n");
   pf ("/* Define some additional CPP macros on Win32 platforms. */\n");


--- orig/libguile/gen-scmconfig.h.in
+++ mod/libguile/gen-scmconfig.h.in
@@ -29,6 +29,7 @@
 #define SCM_I_GSC_USE_PTHREAD_THREADS @SCM_I_GSC_USE_PTHREAD_THREADS@
 #define SCM_I_GSC_USE_NULL_THREADS @SCM_I_GSC_USE_NULL_THREADS@
 #define SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT @SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT@
+#define SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER @SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER@
 
 /*
   Local Variables:


--- orig/libguile/pthread-threads.h
+++ mod/libguile/pthread-threads.h
@@ -43,7 +43,11 @@
 
 /* Mutexes
  */
-#define SCM_I_PTHREAD_MUTEX_INITIALIZER     PTHREAD_MUTEX_INITIALIZER
+#if SCM_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER
+# define SCM_I_PTHREAD_MUTEX_INITIALIZER     { PTHREAD_MUTEX_INITIALIZER }
+#else
+# define SCM_I_PTHREAD_MUTEX_INITIALIZER     PTHREAD_MUTEX_INITIALIZER
+#endif
 #define scm_i_pthread_mutex_t               pthread_mutex_t
 #define scm_i_pthread_mutex_init            pthread_mutex_init
 #define scm_i_pthread_mutex_destroy         pthread_mutex_destroy




[-- Attachment #3: Type: text/plain, Size: 143 bytes --]

_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Missing braces around pthread initializer macros
  2007-10-07 20:55 Missing braces around pthread initializer macros Ludovic Courtès
@ 2007-10-10 16:52 ` Ludovic Courtès
  0 siblings, 0 replies; 2+ messages in thread
From: Ludovic Courtès @ 2007-10-10 16:52 UTC (permalink / raw)
  To: guile-devel

ludo@gnu.org (Ludovic Courtès) writes:

> Unless something turns out to be wrong, I'm going to apply the attached
> patch that (hopefully) fixes the "missing braces around initializer"
> problem with GCC on Solaris/IRIX [0,1].

Done!

Ludovic.



_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-10-10 16:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-07 20:55 Missing braces around pthread initializer macros Ludovic Courtès
2007-10-10 16:52 ` Ludovic Courtès

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).