Skip to content

Commit f684d83

Browse files
authored
bpo-36142: Exclude coreconfig.h from Py_LIMITED_API (pythonGH-12111)
The whole coreconfig.h header is now excluded from Py_LIMITED_API. Move functions definitions into a new internal pycore_coreconfig.h header. * Move Include/coreconfig.h to Include/cpython/coreconfig.h * coreconfig.h header is now excluded from Py_LIMITED_API * Move functions to pycore_coreconfig.h
1 parent ab71f8b commit f684d83

14 files changed

Lines changed: 57 additions & 31 deletions

File tree

Include/Python.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
#include "codecs.h"
129129
#include "pyerrors.h"
130130

131-
#include "coreconfig.h"
131+
#include "cpython/coreconfig.h"
132132
#include "pystate.h"
133133
#include "context.h"
134134

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#ifndef Py_PYCORECONFIG_H
22
#define Py_PYCORECONFIG_H
3+
#ifndef Py_LIMITED_API
34
#ifdef __cplusplus
45
extern "C" {
56
#endif
67

8+
/* _PyInitError */
79

8-
#ifndef Py_LIMITED_API
910
typedef struct {
1011
const char *prefix;
1112
const char *msg;
@@ -32,8 +33,7 @@ typedef struct {
3233
#define _Py_INIT_FAILED(err) \
3334
(err.msg != NULL)
3435

35-
#endif /* !defined(Py_LIMITED_API) */
36-
36+
/* _PyCoreConfig */
3737

3838
typedef struct {
3939
/* Install signal handlers? Yes by default. */
@@ -339,32 +339,12 @@ typedef struct {
339339
/* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */
340340

341341

342-
#ifndef Py_LIMITED_API
343-
PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *config);
344-
PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *);
345-
PyAPI_FUNC(int) _PyCoreConfig_Copy(
346-
_PyCoreConfig *config,
347-
const _PyCoreConfig *config2);
348-
PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(_PyCoreConfig *config);
349-
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPathConfig(
350-
const _PyCoreConfig *config);
351-
PyAPI_FUNC(void) _PyCoreConfig_GetGlobalConfig(_PyCoreConfig *config);
352-
PyAPI_FUNC(void) _PyCoreConfig_SetGlobalConfig(const _PyCoreConfig *config);
353-
PyAPI_FUNC(const char*) _PyCoreConfig_GetEnv(
354-
const _PyCoreConfig *config,
355-
const char *name);
356-
PyAPI_FUNC(int) _PyCoreConfig_GetEnvDup(
357-
const _PyCoreConfig *config,
358-
wchar_t **dest,
359-
wchar_t *wname,
360-
char *name);
361-
362-
/* Used by _testcapi.get_global_config() and _testcapi.get_core_config() */
342+
/* Functions used for testing */
363343
PyAPI_FUNC(PyObject *) _Py_GetGlobalVariablesAsDict(void);
364344
PyAPI_FUNC(PyObject *) _PyCoreConfig_AsDict(const _PyCoreConfig *config);
365-
#endif
366345

367346
#ifdef __cplusplus
368347
}
369348
#endif
349+
#endif /* !Py_LIMITED_API */
370350
#endif /* !Py_PYCORECONFIG_H */

Include/cpython/pystate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
extern "C" {
77
#endif
88

9+
#include "cpython/coreconfig.h"
10+
911
/* Placeholders while working on the new configuration API
1012
*
1113
* See PEP 432 for final anticipated contents
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#ifndef Py_INTERNAL_CORECONFIG_H
2+
#define Py_INTERNAL_CORECONFIG_H
3+
#ifdef __cplusplus
4+
extern "C" {
5+
#endif
6+
7+
#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN)
8+
# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN defined"
9+
#endif
10+
11+
PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *config);
12+
PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *);
13+
PyAPI_FUNC(int) _PyCoreConfig_Copy(
14+
_PyCoreConfig *config,
15+
const _PyCoreConfig *config2);
16+
PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(_PyCoreConfig *config);
17+
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPathConfig(
18+
const _PyCoreConfig *config);
19+
PyAPI_FUNC(void) _PyCoreConfig_GetGlobalConfig(_PyCoreConfig *config);
20+
PyAPI_FUNC(void) _PyCoreConfig_SetGlobalConfig(const _PyCoreConfig *config);
21+
PyAPI_FUNC(const char*) _PyCoreConfig_GetEnv(
22+
const _PyCoreConfig *config,
23+
const char *name);
24+
PyAPI_FUNC(int) _PyCoreConfig_GetEnvDup(
25+
const _PyCoreConfig *config,
26+
wchar_t **dest,
27+
wchar_t *wname,
28+
char *name);
29+
30+
#ifdef __cplusplus
31+
}
32+
#endif
33+
#endif /* !Py_INTERNAL_CORECONFIG_H */

Include/pystate.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ extern "C" {
88
#endif
99

1010
#include "pythread.h"
11-
#include "coreconfig.h"
1211

1312
/* This limitation is for performance and simplicity. If needed it can be
1413
removed (with effort). */

Makefile.pre.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -994,7 +994,6 @@ PYTHON_HEADERS= \
994994
$(srcdir)/Include/codecs.h \
995995
$(srcdir)/Include/compile.h \
996996
$(srcdir)/Include/complexobject.h \
997-
$(srcdir)/Include/coreconfig.h \
998997
$(srcdir)/Include/descrobject.h \
999998
$(srcdir)/Include/dictobject.h \
1000999
$(srcdir)/Include/dtoa.h \
@@ -1071,6 +1070,7 @@ PYTHON_HEADERS= \
10711070
$(srcdir)/Include/Python-ast.h \
10721071
\
10731072
$(srcdir)/Include/cpython/abstract.h \
1073+
$(srcdir)/Include/cpython/coreconfig.h \
10741074
$(srcdir)/Include/cpython/dictobject.h \
10751075
$(srcdir)/Include/cpython/object.h \
10761076
$(srcdir)/Include/cpython/objimpl.h \
@@ -1085,6 +1085,7 @@ PYTHON_HEADERS= \
10851085
$(srcdir)/Include/internal/pycore_ceval.h \
10861086
$(srcdir)/Include/internal/pycore_condvar.h \
10871087
$(srcdir)/Include/internal/pycore_context.h \
1088+
$(srcdir)/Include/internal/pycore_coreconfig.h \
10881089
$(srcdir)/Include/internal/pycore_fileutils.h \
10891090
$(srcdir)/Include/internal/pycore_getopt.h \
10901091
$(srcdir)/Include/internal/pycore_gil.h \
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
The whole coreconfig.h header is now excluded from Py_LIMITED_API. Move
2+
functions definitions into a new internal pycore_coreconfig.h header.

Modules/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "Python.h"
44
#include "osdefs.h"
5+
#include "pycore_coreconfig.h"
56
#include "pycore_getopt.h"
67
#include "pycore_pathconfig.h"
78
#include "pycore_pylifecycle.h"

PCbuild/pythoncore.vcxproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@
110110
<ClInclude Include="..\Include\compile.h" />
111111
<ClInclude Include="..\Include\complexobject.h" />
112112
<ClInclude Include="..\Include\context.h" />
113-
<ClInclude Include="..\Include\coreconfig.h" />
114113
<ClInclude Include="..\Include\cpython\abstract.h" />
114+
<ClInclude Include="..\Include\cpython\coreconfig.h" />
115115
<ClInclude Include="..\Include\cpython\dictobject.h" />
116116
<ClInclude Include="..\Include\cpython\object.h" />
117117
<ClInclude Include="..\Include\cpython\objimpl.h" />
@@ -141,6 +141,7 @@
141141
<ClInclude Include="..\Include\internal\pycore_ceval.h" />
142142
<ClInclude Include="..\Include\internal\pycore_condvar.h" />
143143
<ClInclude Include="..\Include\internal\pycore_context.h" />
144+
<ClInclude Include="..\Include\internal\pycore_coreconfig.h" />
144145
<ClInclude Include="..\Include\internal\pycore_fileutils.h" />
145146
<ClInclude Include="..\Include\internal\pycore_getopt.h" />
146147
<ClInclude Include="..\Include\internal\pycore_gil.h" />

PCbuild/pythoncore.vcxproj.filters

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@
8181
<ClInclude Include="..\Include\context.h">
8282
<Filter>Include</Filter>
8383
</ClInclude>
84-
<ClInclude Include="..\Include\coreconfig.h">
84+
<ClInclude Include="..\Include\cpython\abstract.h">
8585
<Filter>Include</Filter>
8686
</ClInclude>
87-
<ClInclude Include="..\Include\cpython\abstract.h">
87+
<ClInclude Include="..\Include\cpython\coreconfig.h">
8888
<Filter>Include</Filter>
8989
</ClInclude>
9090
<ClInclude Include="..\Include\cpython\dictobject.h">
@@ -174,6 +174,9 @@
174174
<ClInclude Include="..\Include\internal\pycore_context.h">
175175
<Filter>Include</Filter>
176176
</ClInclude>
177+
<ClInclude Include="..\Include\internal\pycore_coreconfig.h">
178+
<Filter>Include</Filter>
179+
</ClInclude>
177180
<ClInclude Include="..\Include\internal\pycore_fileutils.h">
178181
<Filter>Include</Filter>
179182
</ClInclude>

0 commit comments

Comments
 (0)