blob: 7aeb91f938c1ef7860426754873233c44e38cdc6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_EXT=1
DISTUTILS_USE_PEP517=setuptools
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
DESCRIPTION="A Python to C compiler"
HOMEPAGE="
https://cython.org/
https://github.com/cython/cython/
https://pypi.org/project/Cython/
"
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 test-full"
RESTRICT="!test? ( test )"
BDEPEND="
${RDEPEND}
test? (
test-full? (
$(python_gen_cond_dep '
dev-python/numpy[${PYTHON_USEDEP}]
' "${PYTHON_FULLY_TESTED[@]}")
)
)
"
PATCHES=(
"${FILESDIR}/${PN}-0.29.22-spawn-multiprocessing.patch"
"${FILESDIR}/${PN}-0.29.23-pythran-parallel-install.patch"
# https://github.com/cython/cython/pull/6957
"${FILESDIR}/${P}-odr.patch"
)
distutils_enable_sphinx docs \
dev-python/jinja2 \
dev-python/sphinx-issues \
dev-python/sphinx-tabs
python_compile() {
# Python gets confused when it is in sys.path before build.
local -x PYTHONPATH=
if use elibc_musl ; then
# Workaround for bug #925318
local -x LDFLAGS="${LDFLAGS} -Wl,-z,stack-size=2097152"
fi
distutils-r1_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
fi
# Needed to avoid confusing cache tests
unset CYTHON_FORCE_REGEN
tc-export CC
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'
# The fix for https://github.com/cython/cython/issues/6938
# changes these tests s.t. they break with our build layout.
--exclude 'build.depfile*'
)
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() {
local DOCS=( CHANGES.rst README.rst ToDo.txt USAGE.txt )
distutils-r1_python_install_all
}
|