commit: 6a2059bdf28fe8fe2d9639ea26c7ae1a5cc52c6e Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Mon May 19 13:55:18 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Mon May 19 14:00:04 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6a2059bd
dev-python/cython: rework tests * Make numpy conditional on USE=test-full numpy doesn't pass tests on some niche arches and maybe we'll even be able to destable it on the really niche arches at some point thanks to this. * Make numpy conditional on PYTHON_FULLY_TESTED numpy depends on cython and porting numpy to a new Python impl often takes a while, so let's make it easy to get partial coverage. * Fix numpy test dep (doesn't need to be <2 for a while now). Sent https://github.com/cython/cython/pull/6895 upstream as well. * Enable tests for py3.13, py3.14, and pypy3_11 * More robust skips for coverage tests which have had problems before They're not interesting for us in packaging. * Add some notes about other possible test deps we could add in future. Signed-off-by: Sam James <sam <AT> gentoo.org> dev-python/cython/cython-3.1.1.ebuild | 78 ++++++++++++++++++++++++++--------- dev-python/cython/metadata.xml | 6 +++ 2 files changed, 64 insertions(+), 20 deletions(-) diff --git a/dev-python/cython/cython-3.1.1.ebuild b/dev-python/cython/cython-3.1.1.ebuild index 3931c3e0fe2e..51b147eecc22 100644 --- a/dev-python/cython/cython-3.1.1.ebuild +++ b/dev-python/cython/cython-3.1.1.ebuild @@ -5,8 +5,9 @@ EAPI=8 DISTUTILS_EXT=1 DISTUTILS_USE_PEP517=setuptools -PYTHON_TESTED=( python3_{11..12} ) -PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" pypy3_11 python3_13{,t} python3_14{,t} ) +PYTHON_FULLY_TESTED=( python3_{11..14} ) +PYTHON_TESTED=( "${PYTHON_FULLY_TESTED[@]}" pypy3_11 ) +PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" python3_{13,14}t ) PYTHON_REQ_USE="threads(+)" inherit distutils-r1 multiprocessing pypi toolchain-funcs @@ -21,15 +22,17 @@ HOMEPAGE=" LICENSE="Apache-2.0" SLOT="0" KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris" -IUSE="test" +IUSE="test test-full" RESTRICT="!test? ( test )" BDEPEND=" ${RDEPEND} test? ( - $(python_gen_cond_dep ' - <dev-python/numpy-2[${PYTHON_USEDEP}] - ' "${PYTHON_TESTED[@]}") + test-full? ( + $(python_gen_cond_dep ' + dev-python/numpy[${PYTHON_USEDEP}] + ' "${PYTHON_FULLY_TESTED[@]}") + ) ) " @@ -43,13 +46,6 @@ distutils_enable_sphinx docs \ dev-python/sphinx-issues \ dev-python/sphinx-tabs -python_prepare_all() { - # Needs dev-python/pip and doesn't like 'externally-managed' (bug #927995) - rm tests/run/coverage_cmd_src_pkg_layout.srctree || die - - distutils-r1_python_prepare_all -} - python_compile() { # Python gets confused when it is in sys.path before build. local -x PYTHONPATH= @@ -58,6 +54,9 @@ python_compile() { } python_test() { + # PYTHON_TESTED controls whether we expect the testsuite to + # pass at all, while PYTHON_FULLY_TESTED allows skipping before + # numpy is ported (and possibly other deps in future). if ! has "${EPYTHON/./_}" "${PYTHON_TESTED[@]}"; then einfo "Skipping tests on ${EPYTHON} (xfail)" return @@ -67,13 +66,52 @@ python_test() { unset CYTHON_FORCE_REGEN tc-export CC - "${PYTHON}" runtests.py \ - -vv \ - -j "$(makeopts_jobs)" \ - --work-dir "${BUILD_DIR}"/tests \ - --no-examples \ - --no-code-style \ - || die "Tests fail with ${EPYTHON}" + + local testargs=( + -vv + -j "$(makeopts_jobs)" + --work-dir "${BUILD_DIR}"/tests + + --no-examples + --no-code-style + + # Fails to find embedded.c + --exclude 'embedded' + # coverage_installed_pkg needs dev-python/pip and doesn't like + # 'externally-managed' (bug #927995), but we don't really + # want automagic test dependencies at all, so just skip + # unimportant-for-us coverage tests entirely. + --exclude 'run.coverage*' + --exclude 'Cython.Coverage' + # Automagic on dev-python/python-tests, could add this in future + --exclude 'run.test_exceptions' + # TODO: Unpackaged dev-python/interpreters-pep-734 (interpreters_backport) + # This only shows up as a failure with >=3.13. + --exclude 'subinterpreters_threading_stress_test' + ) + + if [[ ${EPYTHON} == pypy3* ]] ; then + testargs+=( + # Recursion issue + --exclude 'run.if_else_expr' + --exclude 'run.test_patma*' + # Slight output difference (missing '<') + --exclude 'run.cpp_exception_ptr_just_handler' + + ) + fi + + # Keep test-full for numpy as it's large and doesn't pass tests itself + # on niche arches. + if ! use test-full || ! has "${EPYTHON/./_}" "${PYTHON_FULLY_TESTED[@]}"; then + testargs+=( + --exclude 'run.numpy*' + --exclude 'run.ufunc' + --exclude 'numpy*' + ) + fi + + "${PYTHON}" runtests.py "${testargs[@]}" || die "Tests fail with ${EPYTHON}" } python_install_all() { diff --git a/dev-python/cython/metadata.xml b/dev-python/cython/metadata.xml index 4960428b8c6b..fd01ff3d8380 100644 --- a/dev-python/cython/metadata.xml +++ b/dev-python/cython/metadata.xml @@ -10,6 +10,12 @@ language as easy as Python itself. It's based on Pyrex, but supports more cutting edge functionality and optimizations. </longdescription> + <use> + <flag name="test-full"> + Run test suite in full via additional (large) test + dependencies, like dev-python/numpy. + </flag> + </use> <upstream> <remote-id type="pypi">Cython</remote-id> <remote-id type="github">cython/cython</remote-id>
