aboutsummarylogtreecommitdiffstats
path: root/python3.8.patch
blob: a372e84019f08c19ed6f6cb5c220c9816978f185 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
From 4b663ecf264020b1d7003a137ce84b06d7ec4ce6 Mon Sep 17 00:00:00 2001
From: bartus <szczepaniak.bartek+github@gmail.com>
Date: Sat, 16 Nov 2019 20:29:30 +0100
Subject: [PATCH] Add python 3.8 support.

---
 source/blender/python/generic/py_capi_utils.c | 27 +++++++++++++++----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
index 545e0506f84..a7eab70600b 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -696,9 +696,16 @@ PyObject *PyC_UnicodeFromByte(const char *str)
  ****************************************************************************/
 PyObject *PyC_DefaultNameSpace(const char *filename)
 {
+  #if PY_VERSION_HEX >= 0x03080000
+  PyObject *modules = PyImport_GetModuleDict();
+  PyObject *builtins = PyEval_GetBuiltins();
+  #else
   PyInterpreterState *interp = PyThreadState_GET()->interp;
+  PyObject *modules = interp->modules;
+  PyObject *builtins = interp->builtins;
+  #endif
   PyObject *mod_main = PyModule_New("__main__");
-  PyDict_SetItemString(interp->modules, "__main__", mod_main);
+  PyDict_SetItemString(modules, "__main__", mod_main);
   Py_DECREF(mod_main); /* sys.modules owns now */
   PyModule_AddStringConstant(mod_main, "__name__", "__main__");
   if (filename) {
@@ -706,8 +713,8 @@ PyObject *PyC_DefaultNameSpace(const char *filename)
      * note: this wont map to a real file when executing text-blocks and buttons. */
     PyModule_AddObject(mod_main, "__file__", PyC_UnicodeFromByte(filename));
   }
-  PyModule_AddObject(mod_main, "__builtins__", interp->builtins);
-  Py_INCREF(interp->builtins); /* AddObject steals a reference */
+  PyModule_AddObject(mod_main, "__builtins__", builtins);
+  Py_INCREF(builtins); /* AddObject steals a reference */
   return PyModule_GetDict(mod_main);
 }
 
@@ -734,15 +741,25 @@ bool PyC_NameSpace_ImportArray(PyObject *py_dict, const char *imports[])
 /* restore MUST be called after this */
 void PyC_MainModule_Backup(PyObject **main_mod)
 {
+  #if PY_VERSION_HEX >= 0x03080000
+  PyObject *modules = PyImport_GetModuleDict();
+  #else
   PyInterpreterState *interp = PyThreadState_GET()->interp;
-  *main_mod = PyDict_GetItemString(interp->modules, "__main__");
+  PyObject *modules = interp->modules;
+  #endif
+  *main_mod = PyDict_GetItemString(modules, "__main__");
   Py_XINCREF(*main_mod); /* don't free */
 }
 
 void PyC_MainModule_Restore(PyObject *main_mod)
 {
+  #if PY_VERSION_HEX >= 0x03080000
+  PyObject *modules = PyImport_GetModuleDict();
+  #else
   PyInterpreterState *interp = PyThreadState_GET()->interp;
-  PyDict_SetItemString(interp->modules, "__main__", main_mod);
+  PyObject *modules = interp->modules;
+  #endif
+  PyDict_SetItemString(modules, "__main__", main_mod);
   Py_XDECREF(main_mod);
 }
 
-- 
2.24.0