gh-85283: If Py_LIMITED_API is defined, undefine Py_BUILD_CORE (#110725)

If the Py_LIMITED_API macro is defined, Py_BUILD_CORE,
Py_BUILD_CORE_BUILTIN and Py_BUILD_CORE_MODULE macros are now
undefined by Python.h.

Only undefine these 3 macros after including "exports.h" which uses
them to define PyAPI_FUNC(), PyAPI_DATA() and PyMODINIT_FUNC macros.

Remove hacks (undefine manually the 3 Py_BUILD_CORE macros) in
Modules/_testcapi/parts.h and Modules/_testclinic_limited.c.
This commit is contained in:
Victor Stinner 2023-10-11 22:47:54 +02:00 committed by GitHub
parent 718391f475
commit 6f4a49942b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 4 deletions

View File

@ -1075,6 +1075,11 @@ Porting to Python 3.13
:c:func:`!Py_TOLOWER`.
(Contributed by Victor Stinner in :gh:`108765`.)
* If the :c:macro:`Py_LIMITED_API` macro is defined, :c:macro:`!Py_BUILD_CORE`,
:c:macro:`!Py_BUILD_CORE_BUILTIN` and :c:macro:`!Py_BUILD_CORE_MODULE` macros
are now undefined by ``<Python.h>``.
(Contributed by Victor Stinner in :gh:`85283`.)
Deprecated
----------

View File

@ -48,10 +48,6 @@
# define Py_BUILD_CORE
#endif
#if defined(Py_LIMITED_API) && defined(Py_BUILD_CORE)
# error "Py_LIMITED_API is not compatible with Py_BUILD_CORE"
#endif
/**************************************************************************
Symbols and macros to supply platform-independent interfaces to basic
@ -361,6 +357,15 @@ extern "C" {
#include "exports.h"
#ifdef Py_LIMITED_API
// The internal C API must not be used with the limited C API: make sure
// that Py_BUILD_CORE macro is not defined in this case. These 3 macros are
// used by exports.h, so only undefine them afterwards.
# undef Py_BUILD_CORE
# undef Py_BUILD_CORE_BUILTIN
# undef Py_BUILD_CORE_MODULE
#endif
/* limits.h constants that may be missing */
#ifndef INT_MAX

View File

@ -0,0 +1,3 @@
If the :c:macro:`Py_LIMITED_API` macro is defined, :c:macro:`!Py_BUILD_CORE`,
:c:macro:`!Py_BUILD_CORE_BUILTIN` and :c:macro:`!Py_BUILD_CORE_MODULE` macros
are now undefined by ``<Python.h>``. Patch by Victor Stinner.