changeset 32786:bad5868957e4 v9.0.1709

patch 9.0.1709: dynamic build with python 3.12 breaks Commit: https://github.com/vim/vim/commit/e5e4709a6ac02dc2a17bd6e4d02e799269ba5ea9 Author: Zdenek Dohnal <zdohnal@redhat.com> Date: Sun Aug 13 19:37:09 2023 +0200 patch 9.0.1709: dynamic build with python 3.12 breaks Problem: dynamic build with python 3.12 breaks Solution: if_python3.c: Fix building dynamic Python3 interpreter There are new extern global variables defined in python3 development files, which types are within python3 library, so they break dynamic python3 interpret Vim plugin. Since the variables are used in macro `Py_SIZE` which is used in other python3 headers, the dummy variables have to defined before including Python.h. closes: #12660 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Zdenek Dohnal <zdohnal@redhat.com>
author Christian Brabandt <cb@256bit.org>
date Sun, 13 Aug 2023 19:45:04 +0200
parents 4e4dfedb6ed8
children e79ea0930857
files src/if_python3.c src/version.c
diffstat 2 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -68,6 +68,8 @@
 #endif
 
 #define PY_SSIZE_T_CLEAN
+#define PyLong_Type (*py3_PyLong_Type)
+#define PyBool_Type (*py3_PyBool_Type)
 
 #include <Python.h>
 
@@ -271,7 +273,6 @@ static HINSTANCE hinstPy3 = 0; // Instan
 # define PyFloat_Type (*py3_PyFloat_Type)
 # define PyNumber_Check (*py3_PyNumber_Check)
 # define PyNumber_Long (*py3_PyNumber_Long)
-# define PyBool_Type (*py3_PyBool_Type)
 # define PyErr_NewException py3_PyErr_NewException
 # ifdef Py_DEBUG
 #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
@@ -449,7 +450,10 @@ static PyTypeObject* py3_PyType_Type;
 static PyTypeObject* py3_PyStdPrinter_Type;
 static PyTypeObject* py3_PySlice_Type;
 static PyTypeObject* py3_PyFloat_Type;
-static PyTypeObject* py3_PyBool_Type;
+PyTypeObject* py3_PyBool_Type;
+# if PY_VERSION_HEX >= 0x030c00b0
+PyTypeObject* py3_PyLong_Type;
+# endif
 static int (*py3_PyNumber_Check)(PyObject *);
 static PyObject* (*py3_PyNumber_Long)(PyObject *);
 static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
@@ -625,6 +629,9 @@ static struct
     {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
     {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
     {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
+# if PY_VERSION_HEX >= 0x030c00b0
+    {"PyLong_Type", (PYTHON_PROC*)&py3_PyLong_Type},
+# endif
     {"PyNumber_Check", (PYTHON_PROC*)&py3_PyNumber_Check},
     {"PyNumber_Long", (PYTHON_PROC*)&py3_PyNumber_Long},
     {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1709,
+/**/
     1708,
 /**/
     1707,