Skip to content

Commit

Permalink
pythongh-85283: If Py_LIMITED_API is defined, undefine Py_BUILD_CORE (p…
Browse files Browse the repository at this point in the history
…ython#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.
  • Loading branch information
vstinner authored and Glyphack committed Jan 27, 2024
1 parent ef55e5a commit f009ecf
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 4 deletions.
5 changes: 5 additions & 0 deletions Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
----------

Expand Down
13 changes: 9 additions & 4 deletions Include/pyport.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit f009ecf

Please sign in to comment.