mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-04-28 16:17:38 -07:00
This version is no longer packaged in the tree. It contains a runtime dependency on typing_extensions, and triggers pathological dependency graph bugs due to its nature as a setuptools plugin. The issue trivially manifests when changing PYTHON_TARGETS. The ONLY way to fix this is to update/uninstall setuptools-rust before recompiling setuptools itself. Uninstalling is reasonably cheap, since the package is only ever used as a bdep for other packages. This also means it may end up not getting upgraded in a timely fashion. Strong blockers are a strong tool to use here, but: - it is an old version so panicking and refusing to do anything until it gets manually removed may be warranted - it does in fact prevent even successfully running src_compile() for setuptools itself, if setuptools-rust is in partially-merged state due to typing_extensions being queued before setuptools and setuptools-rust being queued *after* setuptools This "fixes" world updates by telling people exactly which package to manually remove rather than inscrutably failing at compile time with python tracebacks and leaving them to guess which package to manually remove. It could be wished that users would be aided through the power of automatically resolved dependency graphs, but there's no good options here and at least the error message is clear. No revbump, because existing packages that successfully compiled don't have the issue and it only occurs during certain world updates. Bug: https://bugs.gentoo.org/933553 Signed-off-by: Eli Schwartz <eschwartz93@gmail.com> Signed-off-by: Sam James <sam@gentoo.org>
137 lines
4.5 KiB
Bash
137 lines
4.5 KiB
Bash
# Copyright 1999-2024 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
# please keep this ebuild at EAPI 8 -- sys-apps/portage dep
|
|
EAPI=8
|
|
|
|
# please bump dev-python/ensurepip-setuptools along with this package!
|
|
|
|
DISTUTILS_USE_PEP517=standalone
|
|
PYTHON_TESTED=( python3_{10..13} pypy3 )
|
|
PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
|
|
PYTHON_REQ_USE="xml(+)"
|
|
|
|
inherit distutils-r1 pypi
|
|
|
|
DESCRIPTION="Collection of extensions to Distutils"
|
|
HOMEPAGE="
|
|
https://github.com/pypa/setuptools/
|
|
https://pypi.org/project/setuptools/
|
|
"
|
|
|
|
LICENSE="MIT"
|
|
SLOT="0"
|
|
KEYWORDS="amd64 arm arm64 ~hppa ~ia64 ~loong ~m68k ppc ppc64 ~riscv ~s390 sparc x86"
|
|
IUSE="test"
|
|
RESTRICT="!test? ( test )"
|
|
|
|
# check */_vendor/vendored.txt
|
|
RDEPEND="
|
|
!!<dev-python/setuptools-rust-1.8.0
|
|
>=dev-python/jaraco-text-3.7.0-r1[${PYTHON_USEDEP}]
|
|
>=dev-python/more-itertools-8.12.0-r1[${PYTHON_USEDEP}]
|
|
>=dev-python/ordered-set-4.0.2-r1[${PYTHON_USEDEP}]
|
|
>=dev-python/packaging-24[${PYTHON_USEDEP}]
|
|
>=dev-python/platformdirs-2.6.2-r1[${PYTHON_USEDEP}]
|
|
>=dev-python/wheel-0.37.1-r1[${PYTHON_USEDEP}]
|
|
$(python_gen_cond_dep '
|
|
>=dev-python/tomli-2.0.1[${PYTHON_USEDEP}]
|
|
' 3.10)
|
|
"
|
|
BDEPEND="
|
|
${RDEPEND}
|
|
test? (
|
|
$(python_gen_cond_dep '
|
|
>=dev-python/build-1.0.3[${PYTHON_USEDEP}]
|
|
>=dev-python/ini2toml-0.14[${PYTHON_USEDEP}]
|
|
>=dev-python/filelock-3.4.0[${PYTHON_USEDEP}]
|
|
>=dev-python/jaraco-envs-2.2[${PYTHON_USEDEP}]
|
|
>=dev-python/jaraco-path-3.2.0[${PYTHON_USEDEP}]
|
|
dev-python/pip[${PYTHON_USEDEP}]
|
|
dev-python/pip-run[${PYTHON_USEDEP}]
|
|
dev-python/pyproject-hooks[${PYTHON_USEDEP}]
|
|
dev-python/pytest[${PYTHON_USEDEP}]
|
|
>=dev-python/pytest-home-0.5[${PYTHON_USEDEP}]
|
|
dev-python/pytest-subprocess[${PYTHON_USEDEP}]
|
|
dev-python/pytest-timeout[${PYTHON_USEDEP}]
|
|
dev-python/pytest-xdist[${PYTHON_USEDEP}]
|
|
dev-python/tomli[${PYTHON_USEDEP}]
|
|
>=dev-python/virtualenv-20[${PYTHON_USEDEP}]
|
|
' "${PYTHON_TESTED[@]}")
|
|
$(python_gen_cond_dep '
|
|
>=dev-python/tomli-w-1.0.0[${PYTHON_USEDEP}]
|
|
' 3.10)
|
|
)
|
|
"
|
|
# setuptools-scm is here because installing plugins apparently breaks stuff at
|
|
# runtime, so let's pull it early. See bug #663324.
|
|
PDEPEND="
|
|
dev-python/setuptools-scm[${PYTHON_USEDEP}]
|
|
"
|
|
|
|
src_prepare() {
|
|
local PATCHES=(
|
|
# TODO: remove this when we're 100% PEP517 mode
|
|
"${FILESDIR}/setuptools-62.4.0-py-compile.patch"
|
|
)
|
|
|
|
distutils-r1_src_prepare
|
|
|
|
# breaks tests
|
|
sed -i -e '/--import-mode/d' pytest.ini || die
|
|
|
|
# remove bundled dependencies
|
|
rm -r */_vendor || die
|
|
|
|
# remove the ugly */extern hack that breaks on unvendored deps
|
|
rm -r */extern || die
|
|
find -name '*.py' -exec sed \
|
|
-e 's:from \w*[.]\+extern ::' -e 's:\w*[.]\+extern[.]::' \
|
|
-i {} + || die
|
|
}
|
|
|
|
python_test() {
|
|
if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
|
|
return
|
|
fi
|
|
|
|
local EPYTEST_DESELECT=(
|
|
# network
|
|
# TODO: see if PRE_BUILT_SETUPTOOLS_* helps
|
|
setuptools/tests/config/test_apply_pyprojecttoml.py::test_apply_pyproject_equivalent_to_setupcfg
|
|
setuptools/tests/integration/test_pip_install_sdist.py::test_install_sdist
|
|
setuptools/tests/test_build_meta.py::test_legacy_editable_install
|
|
setuptools/tests/test_distutils_adoption.py
|
|
setuptools/tests/test_editable_install.py
|
|
setuptools/tests/test_setuptools.py::test_its_own_wheel_does_not_contain_tests
|
|
setuptools/tests/test_virtualenv.py::test_clean_env_install
|
|
setuptools/tests/test_virtualenv.py::test_no_missing_dependencies
|
|
setuptools/tests/test_virtualenv.py::test_test_command_install_requirements
|
|
# TODO
|
|
setuptools/tests/config/test_setupcfg.py::TestConfigurationReader::test_basic
|
|
setuptools/tests/config/test_setupcfg.py::TestConfigurationReader::test_ignore_errors
|
|
setuptools/tests/test_extern.py::test_distribution_picklable
|
|
# expects bundled deps in virtualenv
|
|
setuptools/tests/config/test_apply_pyprojecttoml.py::TestMeta::test_example_file_in_sdist
|
|
setuptools/tests/config/test_apply_pyprojecttoml.py::TestMeta::test_example_file_not_in_wheel
|
|
# fails if python-xlib is installed
|
|
setuptools/tests/test_easy_install.py::TestSetupRequires::test_setup_requires_with_allow_hosts
|
|
# TODO, probably some random package
|
|
setuptools/tests/config/test_setupcfg.py::TestOptions::test_cmdclass
|
|
# Internet, sigh
|
|
setuptools/tests/test_integration.py
|
|
)
|
|
|
|
case ${EPYTHON} in
|
|
python3.12)
|
|
EPYTEST_DESELECT+=(
|
|
# TODO
|
|
setuptools/tests/test_easy_install.py::TestSetupRequires::test_setup_requires_with_distutils_command_dep
|
|
setuptools/tests/test_easy_install.py::TestSetupRequires::test_setup_requires_with_transitive_extra_dependency
|
|
)
|
|
esac
|
|
|
|
local EPYTEST_XDIST=1
|
|
epytest -o tmp_path_retention_policy=all setuptools
|
|
}
|