The gnu11 patch broke Solaris 10 and 11 bootstrap: <sys/feature_test.h>
has

/*
 * It is invalid to compile an XPG3, XPG4, XPG4v2, or XPG5 application
 * using c99.  The same is true for POSIX.1-1990, POSIX.2-1992, POSIX.1b,
 * and POSIX.1c applications. Likewise, it is invalid to compile an XPG6
 * or a POSIX.1-2001 application with anything other than a c99 or later
 * compiler.  Therefore, we force an error in both cases.
 */
#if defined(_STDC_C99) && (defined(__XOPEN_OR_POSIX) && !defined(_XPG6))
#error "Compiler or options invalid for pre-UNIX 03 X/Open applications \
        and pre-2001 POSIX applications"
#elif !defined(_STDC_C99) && \
        (defined(__XOPEN_OR_POSIX) && defined(_XPG6))
#error "Compiler or options invalid; UNIX 03 and POSIX.1-2001 applications \
        require the use of c99"
#endif

so the headers now error out for any definition of (say) _XOPEN_SOURCE < 600.

Obviously, the gnu11 patch is going to cause lots of trouble once GCC 5
is released.

The following patch handles this situation, using the most conservative
(and most ugly since using platform-specific code) approach of defining
the necessary feature test macros only for Solaris.  I suppose the two
_XOPEN_SOURCE defines (both present from when the code was added) could
easily be changed to 600 instead; not sure why _POSIX_SOURCE would be
necessary in sigsetmask.c (also present from day one).

Anyway, this patch restores bootstrap, as verified on
i386-pc-solaris2.11 and sparc-sun-solaris2.11.

Ok for mainline?

        Rainer


2014-10-22  Rainer Orth  <r...@cebitec.uni-bielefeld.de>

        libobjc:
        * thr.c (_XOPEN_SOURCE) [__sun__ && __svr4__]: Define as 600.

        libiberty:
        * sigsetmask.c (_POSIX_C_SOURCE) [__sun__ && __svr4__ &&
        __STDC_VERSION__ >= 200112L]: Define as 200112L.

        libgomp:
        * config/posix/lock.c (_XOPEN_SOURCE) [__sun__ && __svr4__]:
        Define as 600.

# HG changeset patch
# Parent 0dac6e8c4aa188f94c5502cf106a5aa12e266d5b
Fix gnu11 fallout on Solaris 10+

diff --git a/libgomp/config/posix/lock.c b/libgomp/config/posix/lock.c
--- a/libgomp/config/posix/lock.c
+++ b/libgomp/config/posix/lock.c
@@ -31,7 +31,11 @@
    of the types exported.  */
 
 /* We need Unix98 extensions to get recursive locks.  */
+#if defined __sun__ && defined __svr4__
+#define _XOPEN_SOURCE 600
+#else
 #define _XOPEN_SOURCE 500
+#endif
 
 #include "libgomp.h"
 
diff --git a/libiberty/sigsetmask.c b/libiberty/sigsetmask.c
--- a/libiberty/sigsetmask.c
+++ b/libiberty/sigsetmask.c
@@ -15,7 +15,12 @@ be the value @code{1}).
 
 */
 
+#if defined __sun__ && defined __svr4__ && __STDC_VERSION__ >= 200112L
+#define _POSIX_C_SOURCE 200112L
+#else
 #define _POSIX_SOURCE
+#endif
+
 #include <ansidecl.h>
 /* Including <sys/types.h> seems to be needed by ISC. */
 #include <sys/types.h>
diff --git a/libobjc/thr.c b/libobjc/thr.c
--- a/libobjc/thr.c
+++ b/libobjc/thr.c
@@ -28,7 +28,11 @@ see the files COPYING3 and COPYING.RUNTI
 /* The line below is needed for declarations of functions such as
    pthread_mutexattr_settype, without which gthr-posix.h may fail to
    compile within libobjc.  */
+#if defined __sun__ && defined __svr4__
+#define _XOPEN_SOURCE 600
+#else
 #define _XOPEN_SOURCE 500
+#endif
 #include "config.h"
 #include "tconfig.h"
 #include "coretypes.h"
-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

Reply via email to