diff options
| author | Michał Górny <mgorny@gentoo.org> | 2025-07-31 18:04:24 +0200 |
|---|---|---|
| committer | Michał Górny <mgorny@gentoo.org> | 2025-07-31 18:35:28 +0200 |
| commit | 3be0919f3d3d1269af094878acee011511e6436f (patch) | |
| tree | 22852380927fc76182a7e54113e94d5284325e19 /dev-python | |
| parent | 2151ea0467138074571d5a214c261e6331eb4815 (diff) | |
| download | gentoo-3be0919f3d3d1269af094878acee011511e6436f.tar.gz gentoo-3be0919f3d3d1269af094878acee011511e6436f.tar.bz2 gentoo-3be0919f3d3d1269af094878acee011511e6436f.zip | |
dev-python/greenlet: Use a patch to avoid crashes on py3.12+
Use an upstreamable patch to avoid crashes on py3.12+ instead of sed.
This has the clear advantage of not skipping the test on older Python
versions.
Pull-Request: https://github.com/python-greenlet/greenlet/pull/457
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'dev-python')
| -rw-r--r-- | dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch | 71 | ||||
| -rw-r--r-- | dev-python/greenlet/greenlet-3.2.3.ebuild | 9 |
2 files changed, 76 insertions, 4 deletions
diff --git a/dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch b/dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch new file mode 100644 index 000000000000..21737aaf0362 --- /dev/null +++ b/dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch @@ -0,0 +1,71 @@ +From 739cc559ac42f41f6ccbc7d556d730fd424f3be8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org> +Date: Wed, 30 Jul 2025 12:17:47 +0200 +Subject: [PATCH] Fix py312+ crash test skips to correctly check for assertions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fix the skips for `test_trace_events_multiple_greenlets_switching*` +to correctly detect assertions being enabled independently of +`--with-pydebug`. Gentoo builds Python `--without-pydebug` but +`--with-assertions`, in order to benefit from assertion-implied safety +checks without the full cost of PyDEBUG. For the purpose of detecting +it, check for `-DNDEBUG` in optimization flags, as implied by disabling +assertions. Leave the existing code as a fallback for when build flags +are unavailable, e.g. in Windows packages. + +Signed-off-by: Michał Górny <mgorny@gentoo.org> +--- + src/greenlet/tests/test_tracing.py | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/greenlet/tests/test_tracing.py b/src/greenlet/tests/test_tracing.py +index c044d4b6..235fbcd6 100644 +--- a/src/greenlet/tests/test_tracing.py ++++ b/src/greenlet/tests/test_tracing.py +@@ -1,5 +1,6 @@ + from __future__ import print_function + import sys ++import sysconfig + import greenlet + import unittest + +@@ -7,9 +8,16 @@ + from . import PY312 + + # https://discuss.python.org/t/cpython-3-12-greenlet-and-tracing-profiling-how-to-not-crash-and-get-correct-results/33144/2 +-DEBUG_BUILD_PY312 = ( +- PY312 and hasattr(sys, 'gettotalrefcount'), +- "Broken on debug builds of Python 3.12" ++# When build variables are available, OPT is the best way of detecting ++# the build with assertions enabled. Otherwise, fallback to detecting PyDEBUG ++# build. ++ASSERTION_BUILD_PY312 = ( ++ PY312 and ( ++ "-DNDEBUG" not in sysconfig.get_config_var("OPT").split() ++ if sysconfig.get_config_var("OPT") is not None ++ else hasattr(sys, 'gettotalrefcount') ++ ), ++ "Broken on assertion-enabled builds of Python 3.12" + ) + + class SomeError(Exception): +@@ -198,7 +206,7 @@ def run(self): + + self._check_trace_events_from_greenlet_sets_profiler(X(), tracer) + +- @unittest.skipIf(*DEBUG_BUILD_PY312) ++ @unittest.skipIf(*ASSERTION_BUILD_PY312) + def test_trace_events_multiple_greenlets_switching(self): + tracer = PythonTracer() + +@@ -236,7 +244,7 @@ def g2_run(): + ('c_call', '__exit__'), + ]) + +- @unittest.skipIf(*DEBUG_BUILD_PY312) ++ @unittest.skipIf(*ASSERTION_BUILD_PY312) + def test_trace_events_multiple_greenlets_switching_siblings(self): + # Like the first version, but get both greenlets running first + # as "siblings" and then establish the tracing. diff --git a/dev-python/greenlet/greenlet-3.2.3.ebuild b/dev-python/greenlet/greenlet-3.2.3.ebuild index f66e566e03ff..43decd360058 100644 --- a/dev-python/greenlet/greenlet-3.2.3.ebuild +++ b/dev-python/greenlet/greenlet-3.2.3.ebuild @@ -35,14 +35,15 @@ distutils_enable_sphinx docs \ distutils_enable_tests unittest src_prepare() { + local PATCHES=( + # https://github.com/python-greenlet/greenlet/pull/457 + "${FILESDIR}/${P}-py312-assert.patch" + ) + distutils-r1_src_prepare # patch cflag manipulations out sed -i -e 's:global_compile_args[.]append.*:pass:' setup.py || die - # broken assertions on py3.12+ - # https://github.com/python-greenlet/greenlet/issues/368 - sed -e 's:test_trace_events_multiple_greenlets_switching:_&: ' \ - -i src/greenlet/tests/test_tracing.py || die } python_test() { |
