void-packages/srcpkgs/zbar/patches/python-3.11.patch

54 lines
1.8 KiB
Diff

From 3d9cb93e3e23624baf2b36acd0d1cd2e2ca03b2b Mon Sep 17 00:00:00 2001
From: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Date: Wed, 21 Sep 2022 10:32:11 +0700
Subject: [PATCH] python: enum: fix build for Python 3.11
Python 3.9 introduced Py_SET_SIZE function to set size instead of
relying on Py_SIZE() as a macro [3.9].
Python 3.10 started to encourage to use Py_SET_SIZE instead of
assigning into return value of Py_SIZE [3.10].
Python 3.11 flips the switch, turn Py_SIZE into a function [3.11],
thus Py_SIZE(obj) will be a rvalue. We need to use Py_SET_SIZE
to set size now.
[3.9]: https://docs.python.org/3.9/c-api/structures.html#c.Py_SET_SIZE
[3.10]: https://docs.python.org/3.10/c-api/structures.html#c.Py_SIZE
[3.11]: https://docs.python.org/3.11/c-api/structures.html#c.Py_SIZE
---
python/enum.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/python/enum.c b/python/enum.c
index a113553..a034a35 100644
--- a/python/enum.c
+++ b/python/enum.c
@@ -52,7 +52,11 @@ enumitem_new (PyTypeObject *type,
/* we assume the "fast path" for a single-digit ints (see longobject.c) */
/* this also holds if we get a small_int preallocated long */
+#if PY_MINOR_VERSION >= 9
+ Py_SET_SIZE(&self->val, Py_SIZE(longval));
+#else
Py_SIZE(&self->val) = Py_SIZE(longval);
+#endif
self->val.ob_digit[0] = longval->ob_digit[0];
Py_DECREF(longval);
#else
@@ -138,7 +142,11 @@ zbarEnumItem_New (PyObject *byname,
/* we assume the "fast path" for a single-digit ints (see longobject.c) */
/* this also holds if we get a small_int preallocated long */
+#if PY_MINOR_VERSION >= 9
+ Py_SET_SIZE(&self->val, Py_SIZE(longval));
+#else
Py_SIZE(&self->val) = Py_SIZE(longval);
+#endif
self->val.ob_digit[0] = longval->ob_digit[0];
Py_DECREF(longval);
--
2.38.0.rc0