From: Tianling Shen Date: Mon, 17 Nov 2025 12:54:43 +0000 (+0800) Subject: libmraa: add Python 3.13 compatibility X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=e8eabdd77eb659a7e8e19b3954c1e84f10b483d7;p=feed%2Fpackages.git libmraa: add Python 3.13 compatibility Upstream backport. Add python-setuptools/host as build dependency to fix libmraa-python3 build. Signed-off-by: Tianling Shen --- diff --git a/libs/libmraa/Makefile b/libs/libmraa/Makefile index 2f18f9329f..678c11c019 100644 --- a/libs/libmraa/Makefile +++ b/libs/libmraa/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libmraa PKG_VERSION:=2.2.0 -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/eclipse/mraa/tar.gz/v$(PKG_VERSION)? @@ -20,7 +20,7 @@ PKG_MAINTAINER:=John Crispin , Hirokazu MORIKAWA +Date: Tue, 2 Sep 2025 16:09:53 +0800 +Subject: [PATCH] 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 +--- + src/python/mraapy.c | 6 +++++- + src/python/mraapython.i | 6 ++++++ + 2 files changed, 11 insertions(+), 1 deletion(-) + +--- a/src/python/mraapy.c ++++ b/src/python/mraapy.c +@@ -25,9 +25,13 @@ mraa_python_isr(void (*isr)(void*), void + if (arglist == NULL) { + syslog(LOG_ERR, "gpio: Py_BuildValue NULL"); + } else { ++#if PY_VERSION_HEX >= 0x03090000 ++ ret = PyObject_CallObject((PyObject*) isr, arglist); ++#else + ret = PyEval_CallObject((PyObject*) isr, arglist); ++#endif + if (ret == NULL) { +- syslog(LOG_ERR, "gpio: PyEval_CallObject failed"); ++ syslog(LOG_ERR, "gpio: Python call failed"); + PyObject *pvalue, *ptype, *ptraceback; + PyObject *pvalue_pystr, *ptype_pystr, *ptraceback_pystr; + PyObject *pvalue_ustr, *ptype_ustr, *ptraceback_ustr; +--- a/src/python/mraapython.i ++++ b/src/python/mraapython.i +@@ -151,7 +151,13 @@ class Spi; + // Initialise python threads, this allows use to grab the GIL when we are + // required to do so + 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(); ++#endif + // Add mraa_init() to the module initialisation process and set isr function + mraa_result_t res = mraa_init(); + if (res == MRAA_SUCCESS) {