]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-85283: If Py_LIMITED_API is defined, undefine Py_BUILD_CORE (#110725)
authorVictor Stinner <vstinner@python.org>
Wed, 11 Oct 2023 20:47:54 +0000 (22:47 +0200)
committerGitHub <noreply@github.com>
Wed, 11 Oct 2023 20:47:54 +0000 (20:47 +0000)
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.

Doc/whatsnew/3.13.rst
Include/pyport.h
Misc/NEWS.d/next/C API/2023-10-11-17-29-52.gh-issue-85283.OsqIBF.rst [new file with mode: 0644]

index bbc1fecf4964d8479872d53a67bb957b07f5064a..b0a0d89c8d95195021965a260071d9c62f67b7d2 100644 (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
 ----------
 
index 40d580a870fc75b6b6aae7d26ef1708ba3265c2e..d30fcd7f6cb7da880f9b76a7f44e118ca0c7ced7 100644 (file)
 #  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 (file)
index 0000000..c89a029
--- /dev/null
@@ -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.