Skip to content

Commit

Permalink
gh-85283: If Py_LIMITED_API is defined, undefine Py_BUILD_CORE
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
vstinner committed Oct 11, 2023
1 parent 01481f2 commit 105fce1
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`,

Check warning on line 1078 in Doc/whatsnew/3.13.rst

View workflow job for this annotation

GitHub Actions / Docs / Docs

c:macro reference target not found: Py_BUILD_CORE

Check warning on line 1078 in Doc/whatsnew/3.13.rst

View workflow job for this annotation

GitHub Actions / Docs / Docs

c:macro reference target not found: Py_BUILD_CORE_BUILTIN

Check warning on line 1078 in Doc/whatsnew/3.13.rst

View workflow job for this annotation

GitHub Actions / Docs / Docs

c:macro reference target not found: Py_BUILD_CORE_MODULE
: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 105fce1

Please sign in to comment.