[Python-Dev] A bug in pyconfig.h under Linux?

Fernando Perez fperez.net at gmail.com
Tue Jun 14 16:07:12 CEST 2005


Hi all,

sorry for posting to this list, but I'm not even 100% sure this is a bug.  If it
is, I'll gladly post it to SF if you folks want it there.

I use scipy a lot, and the weave.inline component in there allows dynamic
inclusion of C/C++ code in Python sources.  In particular, it supports Blitz++
array expressions for access to Numeric arrays.  However, whenever I use
blitz-based code, I get these annoying warnings:

================================================================================
In file included from /usr/include/python2.3/Python.h:8,
                 from sc_weave.cpp:5:
/usr/include/python2.3/pyconfig.h:850:1: warning: "_POSIX_C_SOURCE" redefined
In file included
from /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/i386-redhat-linux/bits/os_defines.h:39,
                
from /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/i386-redhat-linux/bits/c++config.h:35,
                
from /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/string:45,
                
from /usr/lib/python2.3/site-packages/weave/blitz-20001213/blitz/blitz.h:153,
                
from /usr/lib/python2.3/site-packages/weave/blitz-20001213/blitz/array-impl.h:154,
                
from /usr/lib/python2.3/site-packages/weave/blitz-20001213/blitz/array.h:94,
                 from sc_weave.cpp:4:
/usr/include/features.h:150:1: warning: this is the location of the previous
definition
================================================================================

This is on a Fedora Core 3 box, using glibc-headers.i386 version 2.3.5.

The source of the problem seems to be that in
file /usr/include/python2.3/pyconfig.h, line 850, I have:

/* Define to activate features from IEEE Stds 1003.1-2001 */
#define _POSIX_C_SOURCE 200112L

But the system headers, in /usr/include/features.h, line 150 give:

# define _POSIX_C_SOURCE        199506L

Hence the double-define.  Now, I noticed that the system headers all use the
following approach to defining these constants:

# undef  _POSIX_SOURCE
# define _POSIX_SOURCE  1
# undef  _POSIX_C_SOURCE
# define _POSIX_C_SOURCE        199506L

etc.  That is, they undef everything before defining their value.  I applied the
same change manually to pyconfig.h:

/* Define to activate features from IEEE Stds 1003.1-2001 */
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200112L

and my spurious warnings went away.  But I realize that pyconfig.h is
auto-generated, so the right solution, if this is indeed a bug, has to be
applied somewhere else, at the code generation source.  I am unfortunately not
familiar enough with Python's build system and the autoconf toolset to do that. 
Furthermore, I am not even 100% sure this is really a bug, though the spurious
warning is very annoying.

If this is indeed a bug, do you folks want it reported on SF as such?  In that
case, is this explanation enough/correct?  Any advice would be much
appreciated.

Regards,

Fernando.



More information about the Python-Dev mailing list