diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst index bbc1fecf496..b0a0d89c8d9 100644 --- a/Doc/whatsnew/3.13.rst +++ b/Doc/whatsnew/3.13.rst @@ -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 ````. + (Contributed by Victor Stinner in :gh:`85283`.) + Deprecated ---------- diff --git a/Include/pyport.h b/Include/pyport.h index 40d580a870f..d30fcd7f6cb 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -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 diff --git a/Misc/NEWS.d/next/C API/2023-10-11-17-29-52.gh-issue-85283.OsqIBF.rst b/Misc/NEWS.d/next/C API/2023-10-11-17-29-52.gh-issue-85283.OsqIBF.rst new file mode 100644 index 00000000000..c89a02985f4 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2023-10-11-17-29-52.gh-issue-85283.OsqIBF.rst @@ -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 ````. Patch by Victor Stinner.