]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-137210: Move PYTHON_API_VERSION & PYTHON_ABI_VERSION to patchlevel.h (GH-138545)
authorPetr Viktorin <encukou@gmail.com>
Mon, 8 Sep 2025 10:02:13 +0000 (12:02 +0200)
committerGitHub <noreply@github.com>
Mon, 8 Sep 2025 10:02:13 +0000 (12:02 +0200)
Move PYTHON_API_VERSION & PYTHON_ABI_VERSION to patchlevel.h

This allows removing #include "modsupport.h" from python_ver_rc.h,
which allows modsupport.h to use common helpers from Python.h --
specifically, `_Py_PACK_VERSION` for defining limited API.

Include/modsupport.h
Include/patchlevel.h
PC/python_ver_rc.h

index 45aea017dfe83855fddd9e0cbdfb54ab86ccead2..094b9ff0e5ccf808bac3e01842ce913f208ad673 100644 (file)
@@ -56,58 +56,6 @@ PyAPI_FUNC(int) PyModule_ExecDef(PyObject *module, PyModuleDef *def);
 
 #define Py_CLEANUP_SUPPORTED 0x20000
 
-#define PYTHON_API_VERSION 1013
-#define PYTHON_API_STRING "1013"
-/* The API version is maintained (independently from the Python version)
-   so we can detect mismatches between the interpreter and dynamically
-   loaded modules.  These are diagnosed by an error message but
-   the module is still loaded (because the mismatch can only be tested
-   after loading the module).  The error message is intended to
-   explain the core dump a few seconds later.
-
-   The symbol PYTHON_API_STRING defines the same value as a string
-   literal.  *** PLEASE MAKE SURE THE DEFINITIONS MATCH. ***
-
-   Please add a line or two to the top of this log for each API
-   version change:
-
-   22-Feb-2006  MvL     1013    PEP 353 - long indices for sequence lengths
-
-   19-Aug-2002  GvR     1012    Changes to string object struct for
-                                interning changes, saving 3 bytes.
-
-   17-Jul-2001  GvR     1011    Descr-branch, just to be on the safe side
-
-   25-Jan-2001  FLD     1010    Parameters added to PyCode_New() and
-                                PyFrame_New(); Python 2.1a2
-
-   14-Mar-2000  GvR     1009    Unicode API added
-
-   3-Jan-1999   GvR     1007    Decided to change back!  (Don't reuse 1008!)
-
-   3-Dec-1998   GvR     1008    Python 1.5.2b1
-
-   18-Jan-1997  GvR     1007    string interning and other speedups
-
-   11-Oct-1996  GvR     renamed Py_Ellipses to Py_Ellipsis :-(
-
-   30-Jul-1996  GvR     Slice and ellipses syntax added
-
-   23-Jul-1996  GvR     For 1.4 -- better safe than sorry this time :-)
-
-   7-Nov-1995   GvR     Keyword arguments (should've been done at 1.3 :-( )
-
-   10-Jan-1995  GvR     Renamed globals to new naming scheme
-
-   9-Jan-1995   GvR     Initial version (incompatible with older API)
-*/
-
-/* The PYTHON_ABI_VERSION is introduced in PEP 384. For the lifetime of
-   Python 3, it will stay at the value of 3; changes to the limited API
-   must be performed in a strictly backwards-compatible manner. */
-#define PYTHON_ABI_VERSION 3
-#define PYTHON_ABI_STRING "3"
-
 PyAPI_FUNC(PyObject *) PyModule_Create2(PyModuleDef*, int apiver);
 
 #ifdef Py_LIMITED_API
@@ -135,7 +83,7 @@ PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def,
 #endif /* New in 3.5 */
 
 /* ABI info & checking (new in 3.15) */
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030f0000
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= _Py_PACK_VERSION(3, 15)
 typedef struct PyABIInfo {
     uint8_t abiinfo_major_version;
     uint8_t abiinfo_minor_version;
index 532873b51e65bba779b1923fd3c55778abbed1ac..63ebbb32d06fa2ea9afb451ee67afc931bcf75d4 100644 (file)
@@ -6,6 +6,9 @@
    configure.ac must also be changed.
 
    There is also (independent) API version information in modsupport.h.
+
+   This header should self-contained; PC/python_ver_rc.h includes it
+   without the rest of Python.h.
 */
 
 /* Values for PY_RELEASE_LEVEL */
 
 // Public Py_PACK_VERSION is declared in pymacro.h; it needs <inttypes.h>.
 
+
+/* The API and ABI versions are left for backwards compatibility.
+   They've not been updated since 2006 and 2010, respectively.
+   API/ABI versioning is now tied to the CPython version.
+   The *_VERSION and *_STRING symbols should define the same value; as
+   number and string literal respectively. Make sure the definitions match.
+*/
+#define PYTHON_API_VERSION 1013
+#define PYTHON_API_STRING "1013"
+#define PYTHON_ABI_VERSION 3
+#define PYTHON_ABI_STRING "3"
+
 #endif //_Py_PATCHLEVEL_H
index bb98144cd03f15d988e54659be01a637a4ad0ecd..70c805d3da8427662b01608f795892e36790dd44 100644 (file)
@@ -8,7 +8,6 @@
 #define PYTHON_COPYRIGHT "Copyright \xA9 2001 Python Software Foundation. Copyright \xA9 2000 BeOpen.com. Copyright \xA9 1995-2001 CNRI. Copyright \xA9 1991-1995 SMC."
 
 #define MS_WINDOWS
-#include "modsupport.h"
 #include "patchlevel.h"
 #ifdef Py_DEBUG
 #   define PYTHON_DEBUG_EXT "_d"