blob: e86f197574bc78c8c7ba87fa8fca20a9010a8d69 (
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-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_EXT=1
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{10..13} )
inherit distutils-r1
DESCRIPTION="Optional static typing for Python"
HOMEPAGE="
https://www.mypy-lang.org/
https://github.com/python/mypy/
https://pypi.org/project/mypy/
"
SRC_URI="
https://github.com/python/mypy/archive/v${PV}.tar.gz
-> ${P}.gh.tar.gz
"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
IUSE="+native-extensions"
# stubgen collides with this package: https://bugs.gentoo.org/585594
RDEPEND="
!dev-util/stubgen
>=dev-python/psutil-4[${PYTHON_USEDEP}]
>=dev-python/typing-extensions-4.6.0[${PYTHON_USEDEP}]
>=dev-python/mypy-extensions-1.0.0[${PYTHON_USEDEP}]
$(python_gen_cond_dep '
dev-python/tomli[${PYTHON_USEDEP}]
' 3.10)
"
BDEPEND="
native-extensions? (
${RDEPEND}
dev-python/types-psutil[${PYTHON_USEDEP}]
dev-python/types-setuptools[${PYTHON_USEDEP}]
)
test? (
>=dev-python/attrs-18.0[${PYTHON_USEDEP}]
>=dev-python/filelock-3.3.0[${PYTHON_USEDEP}]
>=dev-python/lxml-4.9.1[${PYTHON_USEDEP}]
)
"
EPYTEST_XDIST=1
distutils_enable_tests pytest
# frustratingly, mypyc produces non-deterministic output. If ccache is enabled it will be a waste of time,
# but simultaneously it might trash your system and fill up the cache with a giant wave of non-reproducible
# test files (https://github.com/mypyc/mypyc/issues/1014)
export CCACHE_DISABLE=1
PATCHES=(
"${FILESDIR}"/${PN}-1.14.0-no-werror.patch
)
src_prepare() {
distutils-r1_src_prepare
# don't force pytest-xdist, in case user asked for EPYTEST_JOBS=1
sed -i -e '/addopts/s:-nauto::' pyproject.toml || die
}
python_compile() {
local -x MYPY_USE_MYPYC=$(usex native-extensions 1 0)
case ${EPYTHON} in
python3.13)
# https://github.com/mypyc/mypyc/issues/1056
MYPY_USE_MYPYC=0
;;
esac
distutils-r1_python_compile
}
python_test() {
local EPYTEST_DESELECT=(
# the majority of them require Internet (via pip)
mypy/test/testpep561.py
# known broken with assertions enabled
# https://github.com/python/mypy/issues/16043
mypyc/test/test_run.py::TestRun::run-i64.test::testI64GlueMethodsAndInheritance
mypyc/test/test_run.py::TestRun::run-floats.test::testFloatOps
mypyc/test/test_run.py::TestRunStrictDunderTyping::run-floats.test::testFloatOps_dunder_typing
# these assume that types-docutils are not installed
mypy/test/testpythoneval.py::PythonEvaluationSuite::pythoneval.test::testIgnoreImportIfNoPython3StubAvailable
mypy/test/testpythoneval.py::PythonEvaluationSuite::pythoneval.test::testNoPython3StubAvailable
# TODO
mypy/test/meta/test_parse_data.py
mypy/test/meta/test_update_data.py
)
case ${EPYTHON} in
python3.13)
;&
python3.12)
EPYTEST_DESELECT+=(
# more assertions, sigh
mypyc/test/test_run.py::TestRun::run-bools.test::testBoolOps
mypyc/test/test_run.py::TestRun::run-i64.test::testI64BasicOps
mypyc/test/test_run.py::TestRun::run-i64.test::testI64DefaultArgValues
mypyc/test/test_run.py::TestRun::run-i64.test::testI64ErrorValuesAndUndefined
)
;;
esac
# Some mypy/test/testcmdline.py::PythonCmdlineSuite tests
# fail with high COLUMNS values
local -x COLUMNS=80
# The tests depend on having in-source compiled extensions if you want to
# test those compiled extensions. Various crucial test dependencies aren't
# installed. Even pyproject.toml is needed because that's where pytest args
# are in. Hack them into the build directory and delete them afterwards.
# See: https://github.com/python/mypy/issues/16143
local -x MYPY_TEST_PREFIX="${S}"
cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
cp -r "${S}"/{conftest.py,pyproject.toml} . || die
local failed=
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
nonfatal epytest || failed=1
rm conftest.py pyproject.toml || die
[[ ${failed} ]] && die "epytest failed with ${EPYTHON}"
}
|