Issue 17120: Mishandled _POSIX_C_SOURCE and _XOPEN_SOURCE in pyconfig.h (original) (raw)
Created on 2013-02-04 05:39 by RAW, last changed 2022-04-11 14:57 by admin.
Messages (8)
Author: RAW (RAW)
Date: 2013-02-04 05:39
The header file pyconfig.h mishandles the _POSIX_C_SOURCE and _XOPEN_SOURCE preprocessor macros.
For older versions of Python, the pyconfig.h header specifies:
#define _POSIX_C_SOURCE 200112L
and:
#define _XOPEN_SOURCE 600
For newer versions of Python, the pyconfig.h header specifies:
#define _POSIX_C_SOURCE 200809L
and:
#define _XOPEN_SOURCE 700
The Open Group has documentation about these symbols:
http://pubs.opengroup.org/onlinepubs/007904975/functions/xsh_chap02_02.html
In particular, the documentation states:
A POSIX-conforming application should ensure that the feature test macro _POSIX_C_SOURCE is defined before inclusion of any header.
So, having a header file attempting to set _POSIX_C_SOURCE violates this intention.
Yes, I am well aware that the Python documentation says to include Python.h before any standard headers are included. However, this is still problematic.
In particular, it causes trouble for source code that wishes to include the Python headers and wishes to use declarations that are made visible by setting later values for _POSIX_C_SOURCE and _XOPEN_SOURCE.
I would suggest the pyconfig.h be updated to have something like this:
#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L #ifdef _POSIX_C_SOURCE #warning Python expects -D_POSIX_C_SOURCE=200112L or later #undef _POSIX_C_SOURCE #endif #define _POSIX_C_SOURCE 200112L #endif
and this:
#if !defined(_XOPEN_SOURCE) || _XOPEN_SOURCE < 600 #ifdef _XOPEN_SOURCE #warning Python expects -D_XOPEN_SOURCE=600 or later #undef _XOPEN_SOURCE #endif #define _XOPEN_SOURCE 600 #endif
Author: RAW (RAW)
Date: 2013-03-11 02:11
Any response?
Author: RAW (RAW)
Date: 2013-03-25 23:53
Does anyone ever respond to reported issues here?
Author: Kubilay Kocak (koobs)
Date: 2014-09-12 22:44
See also:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192365
Author: Kubilay Kocak (koobs)
Date: 2015-04-17 10:40
@RAW, can you attach a patch against the default branch please so we can move this forward?
Author: Irit Katriel (iritkatriel) *
Date: 2021-08-27 23:17
I can't find pyconfig.h or "#define _POSIX_C_SOURCE" or "#define _XOPEN_SOURCE".
If nobody will object I will soon close this issue as out of date.
Author: RAW (RAW)
Date: 2021-08-29 22:11
Please look at configure.ac which is used to create configure which will generate pyconfig.h from pyconfig.h.in according to what features are detected in the system.
Author: STINNER Victor (vstinner) *
Date: 2021-08-30 15:01
On my Fedora 34, running ./configure creates pyconfig.h with these values:
$ grep -E '_POSIX_C_SOURCE|_XOPEN_SOURCE' -B1 pyconfig.h /* Define to activate features from IEEE Stds 1003.1-2008 */ #define _POSIX_C_SOURCE 200809L
/* Define to the level of X/Open that your system supports */ #define _XOPEN_SOURCE 700
/* Define to activate Unix95-and-earlier features */ #define _XOPEN_SOURCE_EXTENDED 1
Relevant lines in configure.ac:
if test $define_xopen_source = yes then
X/Open 7, incorporating POSIX.1-2008
AC_DEFINE(_XOPEN_SOURCE, 700, Define to the level of X/Open that your system supports)
On Tru64 Unix 4.0F, defining _XOPEN_SOURCE also requires
definition of _XOPEN_SOURCE_EXTENDED and _POSIX_C_SOURCE, or else
several APIs are not declared. Since this is also needed in some
cases for HP-UX, we define it globally.
AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, Define to activate Unix95-and-earlier features)
AC_DEFINE(_POSIX_C_SOURCE, 200809L, Define to activate features from IEEE Stds 1003.1-2008) fi
History
Date
User
Action
Args
2022-04-11 14:57:41
admin
set
github: 61322
2021-12-12 19:07:28
iritkatriel
set
versions: + Python 3.9, Python 3.10, Python 3.11, - Python 2.7, Python 3.2, Python 3.3, Python 3.4
2021-08-30 15:01:21
vstinner
set
messages: +
2021-08-29 22:12:58
RAW
set
resolution: out of date ->
2021-08-29 22:11:50
RAW
set
status: pending -> open
messages: +
2021-08-27 23:17:57
iritkatriel
set
status: open -> pending
nosy: + iritkatriel
messages: +
resolution: out of date
2015-04-17 10:40:12
koobs
set
messages: +
2014-09-16 09:52:25
pitrou
set
nosy: + loewis
2014-09-12 22:44:05
koobs
set
nosy: + koobs
messages: +
2013-03-25 23:57:18
ezio.melotti
set
stage: needs patch
versions: - Python 2.6, Python 3.1, Python 3.5
2013-03-25 23:54:22
vstinner
set
nosy: + vstinner
2013-03-25 23:53:05
RAW
set
messages: +
2013-03-25 23:51:31
RAW
set
status: languishing -> open
2013-03-11 02:11:18
RAW
set
status: open -> languishing
messages: +
2013-02-04 05:39:07
RAW
create