[Python-Dev] use of #pragma GCC system_header to suppress _XOPEN_SOURCE warnings (original) (raw)

Skip Montanaro skip at pobox.com
Fri Aug 6 21:45:43 CEST 2004


>> Unfortunately GCC also defines it, so a "macro redefined" warning is
>> emitted when compiling with GCC and including Python.h.

Martin> That is not true. GCC does not define that macro, on any
Martin> platform.

I was shown today that g++ defines that macro internally (I misspoke when I referred to gcc yesterday - I tend to lump them together and forget that C++ is a different language than C), at least 3.3.2 on Solaris/Intel does.

Given this small source file:

#include "Python.h"

int main() {
        printf("%x\n", PyList_GetItem);
        return 0;
}

compilation with gcc (we're using 3.3.2, but I also tried with 3.4.0) produces no warnings, but compilation with g++ it produces this output:

g++ -I/opt/lang/python/include/python2.3 -c example.c
In file included from /opt/lang/python/include/python2.3/Python.h:8,
                 from example.c:2:
/opt/lang/python/include/python2.3/pyconfig.h:862:1: warning: "_XOPEN_SOURCE" redefined
<built-in>:73:1: warning: this is the location of the previous definition

Sure enough, grepping through the gcc/g++ installation directory doesn't turn up an actual header file containing "#define _XOPEN_SOURCE". I did find a file (.../lib/gcc/i386-pc-solaris2.8/3.4.0/install-tools/ mkheaders.conf) that contains this line:

FIXPROTO_DEFINES="-D_XOPEN_SOURCE"

Martin> Some system header may define it, though. I believe this is a
Martin> bug in the system - the macro *should* be defined in the
Martin> application. What system are you referring to, and where does
Martin> that define _XOPEN_SOURCE? Is that definition conditional?

Does the fact that we're talking g++ and a built-in macro instead of gcc and a macro defined in a .h file suggest a different way to suppress this warning?

A little more searching located the standards(5) man page on the system. In part it says:

X/Open CAE To build or compile an application that conforms to one of the X/Open CAE specifications, use the following guidelines. Applications need not set the POSIX feature test macros if they require both CAE and POSIX functionality.

 ...

 SUSv2 The application must define _XOPEN_SOURCE=500.

This suggests that Sun expects the application or its build tools to define _XOPEN_SOURCE, not the compiler or its header files. That suggests a bug in g++.

Skip



More information about the Python-Dev mailing list