python-binding: Fix Python 3.13+ compatibility
PyEval_InitThreads and PyEval_CallObject were deprecated since Python 3.9 and removed in Python 3.12+ and 3.13+ respectively. These APIs are unavailable on Debian 13 which ships Python 3.13. Refer to: https://github.com/eclipse/mraa/issues/1135 Signed-off-by: Chun Jiao Zhao <chunjiao.zhao@siemens.com>
This commit is contained in:
committed by
Tom Ingleby
parent
81ecdb68ee
commit
28fa501b6c
@@ -25,9 +25,13 @@ mraa_python_isr(void (*isr)(void*), void* isr_args)
|
|||||||
if (arglist == NULL) {
|
if (arglist == NULL) {
|
||||||
syslog(LOG_ERR, "gpio: Py_BuildValue NULL");
|
syslog(LOG_ERR, "gpio: Py_BuildValue NULL");
|
||||||
} else {
|
} else {
|
||||||
|
#if PY_VERSION_HEX >= 0x03090000
|
||||||
|
ret = PyObject_CallObject((PyObject*) isr, arglist);
|
||||||
|
#else
|
||||||
ret = PyEval_CallObject((PyObject*) isr, arglist);
|
ret = PyEval_CallObject((PyObject*) isr, arglist);
|
||||||
|
#endif
|
||||||
if (ret == NULL) {
|
if (ret == NULL) {
|
||||||
syslog(LOG_ERR, "gpio: PyEval_CallObject failed");
|
syslog(LOG_ERR, "gpio: Python call failed");
|
||||||
PyObject *pvalue, *ptype, *ptraceback;
|
PyObject *pvalue, *ptype, *ptraceback;
|
||||||
PyObject *pvalue_pystr, *ptype_pystr, *ptraceback_pystr;
|
PyObject *pvalue_pystr, *ptype_pystr, *ptraceback_pystr;
|
||||||
PyObject *pvalue_ustr, *ptype_ustr, *ptraceback_ustr;
|
PyObject *pvalue_ustr, *ptype_ustr, *ptraceback_ustr;
|
||||||
|
|||||||
@@ -151,7 +151,13 @@ class Spi;
|
|||||||
// Initialise python threads, this allows use to grab the GIL when we are
|
// Initialise python threads, this allows use to grab the GIL when we are
|
||||||
// required to do so
|
// required to do so
|
||||||
Py_InitializeEx(0);
|
Py_InitializeEx(0);
|
||||||
|
#if PY_VERSION_HEX < 0x03090000
|
||||||
|
// PyEval_InitThreads() is deprecated since Python 3.9 and removed in Python 3.12
|
||||||
|
// In Python 3.7+, the GIL is initialized automatically by Py_Initialize()
|
||||||
|
// Only call PyEval_InitThreads() for Python < 3.9
|
||||||
|
// Reference: https://docs.python.org/3/c-api/init.html#c.PyEval_InitThreads
|
||||||
PyEval_InitThreads();
|
PyEval_InitThreads();
|
||||||
|
#endif
|
||||||
// Add mraa_init() to the module initialisation process and set isr function
|
// Add mraa_init() to the module initialisation process and set isr function
|
||||||
mraa_result_t res = mraa_init();
|
mraa_result_t res = mraa_init();
|
||||||
if (res == MRAA_SUCCESS) {
|
if (res == MRAA_SUCCESS) {
|
||||||
|
|||||||
Reference in New Issue
Block a user