On Fri, Nov 9, 2012 at 10:20 AM, Karel Gardas <karel.gar...@centrum.cz> wrote: > On 11/ 9/12 11:34 AM, Gabriel Dos Reis wrote: >>> >>> commit 71f7ab6a05448e48a3b5741bb8a5ef57701e9c70 >>> Author: Karel Gardas<karel.gar...@centrum.cz> >>> Date: Thu Nov 8 22:04:44 2012 +0100 >>> >>> define own version of PRIdPTR on platform where its not available >>> >>> Note that PRIdPTR is considered as linux-ism so it's not available >>> on platforms >>> like Solaris, although some other free Unix(-like) OSes apparently >>> supports >>> it too. >> >> >> The log comment is not correct. >> In fact, it is ISO C99 standard; some old proprietary C system headers >> not have it (13 years later) but it is not linux-ism. > > > Hello, > > I've analyzed the issue and it looks like, Solaris is defining PRIdPTR in > sys/int_fmtio.h, this file is thorough sys/inttypes.h included into > inttypes.h when !defined(_XOPEN_SOURCE) || defined(_XPG6) || > defined(__EXTENSIONS__) -- unfortunately GHC's PosixSource.h which is > included before inttypes.h in mkDerivedconstants.c defines _XOPEN_SOURCE for > Solaris which means PRdPTR is not defined as the sys/int_fmtio.h is not > included under such conditions. > > Now, I'm not expert in C nor in C99, but what does it mean? That Solaris is > strict and does not consider _XOPEN_SOURCE to be C99?
yes. > > Small test: > > #define _XOPEN_SOURCE > > #include <stdio.h> > #include <inttypes.h> > > int > main() > { > printf("%s\n", PRIdPTR); > return 0; > } > > reveals that it cannot be compiled with gcc -std=c99 test.c due to following > error: > In file included from /usr/include/stdio.h:15:0, > from test.c:3: > /usr/include/sys/feature_tests.h:354:2: error: #error "Compiler or options > invalid for pre-UNIX 03 X/Open applications and pre-2001 POSIX > applications" > test.c: In function ‘main’: > test.c:9:16: error: ‘PRIdPTR’ undeclared (first use in this function) > test.c:9:16: note: each undeclared identifier is reported only once for each > function it appears in > > and of course it cannot be compiled with simple gcc test.c due to: > > test.c: In function ‘main’: > test.c:9:16: error: ‘PRIdPTR’ undeclared (first use in this function) > test.c:9:16: note: each undeclared identifier is reported only once for each > function it appears in > > > When I remove _XOPEN_SOURCE definition, then the compilation with or without > -std=c99 goes fine. To me it looks like _XOPEN_SOURCE is kind of in conflict > with C99 -- at least on Solaris. The question is if Solaris team is right > here or wrong here and how other platforms use/support this... > > But most important question is to undefine _XOPEN_SOURCE or define either > _XPG6 or __EXTENSION__ just on Solaris? What's the most cleanest solution? > > Thanks for any idea! > Karel Include <inttypes.h> before all other standard headers. -- Gaby _______________________________________________ Cvs-ghc mailing list Cvs-ghc@haskell.org http://www.haskell.org/mailman/listinfo/cvs-ghc