summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-02-01 07:17:03 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-02-01 07:17:03 +0000
commit24e6b49e8a21980cabc19ea50b1820e0a7cb84fd (patch)
treee66b8ea173107ce084b1dee4d4ae932651f7cbd9 /dev-python
parent99f36064db93831496ebd7fd2e2a1ac76c064921 (diff)
downloadbaldeagleos-repo-24e6b49e8a21980cabc19ea50b1820e0a7cb84fd.tar.gz
baldeagleos-repo-24e6b49e8a21980cabc19ea50b1820e0a7cb84fd.tar.xz
baldeagleos-repo-24e6b49e8a21980cabc19ea50b1820e0a7cb84fd.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/clang/Manifest1
-rw-r--r--dev-python/clang/clang-23.0.0_pre20260131.ebuild53
-rw-r--r--dev-python/ensurepip-pip/Manifest1
-rw-r--r--dev-python/ensurepip-pip/ensurepip-pip-26.0.ebuild191
-rw-r--r--dev-python/ensurepip-pip/files/pip-26.0-test-wheels.patch74
-rw-r--r--dev-python/lit/Manifest1
-rw-r--r--dev-python/lit/lit-23.0.0_pre20260131.ebuild45
-rw-r--r--dev-python/numpy/Manifest2
-rw-r--r--dev-python/numpy/numpy-2.4.2.ebuild309
-rw-r--r--dev-python/pip/Manifest1
-rw-r--r--dev-python/pip/files/pip-26.0-test-wheels.patch74
-rw-r--r--dev-python/pip/pip-26.0.ebuild204
-rw-r--r--dev-python/pyproject-fmt/Manifest9
-rw-r--r--dev-python/pyproject-fmt/pyproject-fmt-2.12.1.ebuild (renamed from dev-python/pyproject-fmt/pyproject-fmt-2.11.0.ebuild)19
-rw-r--r--dev-python/rich-click/Manifest1
-rw-r--r--dev-python/rich-click/rich-click-1.9.7.ebuild41
-rw-r--r--dev-python/toml-fmt-common/Manifest2
-rw-r--r--dev-python/toml-fmt-common/toml-fmt-common-1.0.1.ebuild28
-rw-r--r--dev-python/toml-fmt-common/toml-fmt-common-1.2.0.ebuild1
-rw-r--r--dev-python/wcwidth/Manifest1
-rw-r--r--dev-python/wcwidth/wcwidth-0.5.3.ebuild32
-rw-r--r--dev-python/wrapt/Manifest1
-rw-r--r--dev-python/wrapt/wrapt-2.1.0.ebuild38
-rw-r--r--dev-python/zenlib/Manifest1
-rw-r--r--dev-python/zenlib/zenlib-3.2.0.ebuild26
-rw-r--r--dev-python/zenlib/zenlib-9999.ebuild2
26 files changed, 1118 insertions, 40 deletions
diff --git a/dev-python/clang/Manifest b/dev-python/clang/Manifest
index f69c7c75cb85..ef60b79d7e97 100644
--- a/dev-python/clang/Manifest
+++ b/dev-python/clang/Manifest
@@ -16,4 +16,5 @@ DIST llvm-project-22.1.0-rc1.src.tar.xz 166976000 BLAKE2B eec2cf8822aa6937c751d9
DIST llvm-project-22.1.0-rc1.src.tar.xz.sig 119 BLAKE2B e3d5a6c00d7960b0694919ff083e02f0273e97da6a40ad452fbb8261b9edfc52d4262733d82a59f03ad7d15b3b62de743b37a1b2e191417443ecb730520be376 SHA512 51326b9402d7719c491ac5c6ab80a678896743dd88e3f997245adb77e7b3f5e0f84f6389c75872aea268de8a7a049684c84cdf575c1f19c4971bb280a9374de6
DIST llvm-project-22.1.0-rc2.src.tar.xz 166979860 BLAKE2B d4d58b2615ce596f97ad743ba43a774a7b1e69f8aa394411cfdfdae6abf76ef23c9f483a8db590eac6012a965dbe720111c3c779cf20d1483bd216a3fe5111a0 SHA512 2690f582950a2b8b4dccfce849080b841b34068bbd07acd25ae7d18ef0bc6919f83cd57edda8b90a00327b73aa5cb3411d413ea800247cf541c89143ca26ef98
DIST llvm-project-22.1.0-rc2.src.tar.xz.sig 119 BLAKE2B 797d0fb36d5ff979504bf094c574ab6473d6d428b0ee0f80c95f6b700c534b8d390f0685e01bd9681fd0b33c0fe39af2d6a8b79372d05af1d87b0a602ba7ff2f SHA512 619a9ef733d7f89ed1e7564d027b4d1ad714dbe7912cd7ff258436e9ee6b878cc806d2856f00b600f982a472644cd9ba54739f8d034f5b5033c1036fcddf9a09
+DIST llvm-project-424bebd9c784b8490e63290feeeceb42dfdaeb49.tar.gz 259881041 BLAKE2B 3ad34527e65de98be5153d97c7604e0aa8187907f0361bcdf98d37eceaad3a2f152243f5a89ba65f76aba83a69ad3b51f98832095caa7845e7dd5d369611405e SHA512 023581069f5b1f29e1160567df5e365addcf3763829562f7b751d44e0bb0c7adb962101967ae69b2b6a01680af8c833077cd04285727f5fb0292ee7fc61789fc
DIST llvm-project-9eaa1ff11ccde52f2e3bf86f253b6b646548c7cc.tar.gz 259436517 BLAKE2B effc5d342ef8440834d03ca7f9d56dc9f5a0aaa10f62aa81fb3d468cfcd0f28a41b343dc12d91e087a5e509a8bb6aa00b477582f42b87efbf22ea580b48a981e SHA512 fda87f688a8a3626c3b025d2a783d7deb0c64ae83cb9c9c89adb73eba764435981545844eb654d7094361fb3786ea955101ba261f0e4af5ee4beffdd9c2449d7
diff --git a/dev-python/clang/clang-23.0.0_pre20260131.ebuild b/dev-python/clang/clang-23.0.0_pre20260131.ebuild
new file mode 100644
index 000000000000..bdbb6bbefa8b
--- /dev/null
+++ b/dev-python/clang/clang-23.0.0_pre20260131.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..14} )
+inherit llvm.org python-r1
+
+DESCRIPTION="Python bindings for llvm-core/clang"
+HOMEPAGE="https://llvm.org/"
+
+LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# The module is opening libclang.so directly, and doing some blasphemy
+# on top of it.
+DEPEND="
+ >=llvm-core/clang-${PV}:*
+ !llvm-core/llvm:0[clang(-),python(-)]
+ !llvm-core/clang:0[python(-)]
+"
+RDEPEND="
+ ${DEPEND}
+ ${PYTHON_DEPS}
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ test? (
+ llvm-core/clang:${LLVM_MAJOR}
+ )
+"
+
+LLVM_COMPONENTS=( clang/{bindings/python,include} )
+llvm.org_set_globals
+
+python_test() {
+ # tests rely on results from a specific clang version, so override
+ # the search path
+ local -x CLANG_LIBRARY_PATH=${BROOT}/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)
+ local -x CLANG_NO_DEFAULT_CONFIG=1
+ "${EPYTHON}" -m unittest discover -v || die "Tests fail with ${EPYTHON}"
+}
+
+src_test() {
+ python_foreach_impl python_test
+}
+
+src_install() {
+ python_foreach_impl python_domodule clang
+}
diff --git a/dev-python/ensurepip-pip/Manifest b/dev-python/ensurepip-pip/Manifest
index 5d4d976f3427..c3f4a5b3d483 100644
--- a/dev-python/ensurepip-pip/Manifest
+++ b/dev-python/ensurepip-pip/Manifest
@@ -1,2 +1,3 @@
DIST flit_core-3.12.0-py3-none-any.whl 45594 BLAKE2B 7c6cb6eb03d45bbba27f27b3728881b57fe82dd38e03f884d3b7c46116eb2b9dd76f92bdaf7f594ef8ccbe12ec8f9a56424ff9e9fc7a839c4818a113fdf0c3d3 SHA512 790c12b1f43201e365fb3f8f2f0a54e1a578876799dfdf8bfeea679a25ea096bf62946d006618c1458ae6e37ce6d00998f37e9aba426d5ab80d32ef2d75da4e0
DIST pip-25.3.gh.tar.gz 9115712 BLAKE2B 87d848c497163a45ee3de8f6f75c80b5051b07062c5a15450ae98b59a6cebc6bf03ca8525d57929493f2cfeb28d5623401eba69f0bdfc734389efbb84eafdf53 SHA512 f50db092213ec3bb819d3da5669f73d119b5ec7f7ac5e8a587a17c27eafa32bc17a057df09389c526a3769ef3577f5553187d54ceffa89aed63f4b4498ff044e
+DIST pip-26.0.gh.tar.gz 9226836 BLAKE2B fe24bd8fca7fa2b64ed865a880a430c420a9e73e35a9f1f2405473d4778467f48a8bc0607c1423760ff23706d3e11ddfeb20cd5a7f6522530a679994278ee1d8 SHA512 62a62b2db4e7a6c795cf01ab553b94068f0d1c62470c1f5c2b3164344a84fa68f7854eec99d93b9f56193c61276d95d8af21a3cb6b78f0db4f013d9997e78199
diff --git a/dev-python/ensurepip-pip/ensurepip-pip-26.0.ebuild b/dev-python/ensurepip-pip/ensurepip-pip-26.0.ebuild
new file mode 100644
index 000000000000..723df9e4771f
--- /dev/null
+++ b/dev-python/ensurepip-pip/ensurepip-pip-26.0.ebuild
@@ -0,0 +1,191 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+# PYTHON_COMPAT is used only for testing
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE="ssl(+),threads(+)"
+
+inherit distutils-r1 pypi
+
+FLIT_CORE_PV=3.12.0
+
+MY_P=${P#ensurepip-}
+DESCRIPTION="Shared pip wheel for ensurepip Python module"
+HOMEPAGE="
+ https://pip.pypa.io/en/stable/
+ https://pypi.org/project/pip/
+ https://github.com/pypa/pip/
+"
+SRC_URI="
+ https://github.com/pypa/pip/archive/${PV}.tar.gz -> ${MY_P}.gh.tar.gz
+ test? (
+ $(pypi_wheel_url flit-core "${FLIT_CORE_PV}")
+ )
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+IUSE="test test-rust"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ <dev-python/ensurepip-setuptools-80
+ dev-python/ensurepip-wheel
+ dev-python/freezegun[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/scripttest[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ dev-python/werkzeug[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ test-rust? (
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ )
+ dev-vcs/git
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_RERUNS=5
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+declare -A VENDOR_LICENSES=(
+ [cachecontrol]=Apache-2.0
+ [certifi]=MPL-2.0
+ [dependency_groups]=MIT
+ [distlib]=PSF-2
+ [distro]=Apache-2.0
+ [idna]=BSD
+ [msgpack]=Apache-2.0
+ [packaging]="|| ( Apache-2.0 MIT )"
+ [pkg_resources]=MIT
+ [platformdirs]=MIT
+ [pygments]=BSD-2
+ [pyproject_hooks]=MIT
+ [requests]=Apache-2.0
+ [resolvelib]=ISC
+ [rich]=MIT
+ [tomli]=MIT
+ [tomli_w]=MIT
+ [truststore]=MIT
+ [urllib3]=MIT
+)
+LICENSE+=" ${VENDOR_LICENSES[*]}"
+
+python_prepare_all() {
+ local PATCHES=(
+ # remove coverage & pytest-subket wheel expectation from test suite
+ # (from dev-python/pip)
+ "${FILESDIR}/pip-26.0-test-wheels.patch"
+ )
+
+ distutils-r1_python_prepare_all
+
+ if use test; then
+ local wheels=(
+ "${BROOT}"/usr/lib/python/ensurepip/{setuptools,wheel}-*.whl
+ "${DISTDIR}/$(pypi_wheel_name flit-core "${FLIT_CORE_PV}")"
+ )
+ mkdir tests/data/common_wheels/ || die
+ cp "${wheels[@]}" tests/data/common_wheels/ || die
+ fi
+
+ # Verify that we've covered licenses for all vendored packages
+ cd src/pip/_vendor || die
+ local packages=( */ )
+ local pkg missing=()
+ for pkg in "${packages[@]%/}"; do
+ if [[ ! -v "VENDOR_LICENSES[${pkg}]" ]]; then
+ missing+=( "${pkg}" )
+ else
+ unset "VENDOR_LICENSES[${pkg}]"
+ fi
+ done
+
+ if [[ ${missing[@]} || ${VENDOR_LICENSES[@]} ]]; then
+ [[ ${missing[@]} ]] &&
+ eerror "License missing for packages: ${missing[*]}"
+ [[ ${VENDOR_LICENSES[@]} ]] &&
+ eerror "Vendored packages removed: ${!VENDOR_LICENSES[*]}"
+ die "VENDOR_LICENSES outdated"
+ fi
+
+ local upstream_count=$(wc -l < vendor.txt || die)
+ if [[ ${#packages[@]} -ne ${upstream_count} ]]; then
+ eerror "VENDOR_LICENSES: ${#packages[@]}"
+ eerror "vendor.txt: ${upstream_count}"
+ die "Not all vendored packages matched"
+ fi
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ tests/functional/test_inspect.py::test_inspect_basic
+ # Internet
+ tests/functional/test_config_settings.py::test_backend_sees_config_via_sdist
+ tests/functional/test_install.py::test_double_install_fail
+ tests/functional/test_install.py::test_install_sdist_links
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ tests/functional/test_lock.py::test_lock_archive
+ tests/functional/test_lock.py::test_lock_vcs
+ # broken by system site-packages use
+ tests/functional/test_freeze.py::test_freeze_with_setuptools
+ tests/functional/test_pip_runner_script.py::test_runner_work_in_environments_with_no_pip
+ tests/functional/test_uninstall.py::test_basic_uninstall_distutils
+ tests/unit/test_base_command.py::test_base_command_global_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_local_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_provides_tempdir_helpers
+ )
+ local EPYTEST_IGNORE=(
+ # from upstream options
+ src/pip/_vendor
+ tests/tests_cache
+ # requires proxy.py
+ tests/functional/test_proxy.py
+ )
+
+ case ${EPYTHON} in
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ # unexpected tempfiles?
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ # wrong path
+ tests/functional/test_install.py::test_install_editable_with_prefix_setup_py
+ # wrong exception assumptions
+ tests/unit/test_utils_datetime.py::test_parse_iso_datetime_invalid
+ )
+ ;;
+ esac
+
+ if ! has_version "dev-python/cryptography[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ tests/functional/test_install.py::test_install_sends_client_cert
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ )
+ fi
+
+ local -x PIP_DISABLE_PIP_VERSION_CHECK=1
+ # rerunfailures because test suite breaks if packages are installed
+ # in parallel
+ epytest -m "not network" -o addopts= -o tmp_path_retention_policy=all \
+ --use-venv
+}
+
+src_install() {
+ if [[ ${DISTUTILS_WHEEL_PATH} != *py3-none-any.whl ]]; then
+ die "Non-pure wheel produced?! ${DISTUTILS_WHEEL_PATH}"
+ fi
+ # TODO: compress it?
+ insinto /usr/lib/python/ensurepip
+ doins "${DISTUTILS_WHEEL_PATH}"
+}
diff --git a/dev-python/ensurepip-pip/files/pip-26.0-test-wheels.patch b/dev-python/ensurepip-pip/files/pip-26.0-test-wheels.patch
new file mode 100644
index 000000000000..55fb04f8f65f
--- /dev/null
+++ b/dev-python/ensurepip-pip/files/pip-26.0-test-wheels.patch
@@ -0,0 +1,74 @@
+From f8f2b7760bfc8d64607b3bf2cdc9867fcce8276a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 31 Jul 2025 05:10:08 +0200
+Subject: [PATCH] Disable coverage & socket plugins inside test venvs
+
+---
+ tests/conftest.py | 33 ---------------------------------
+ 1 file changed, 33 deletions(-)
+
+diff --git a/tests/conftest.py b/tests/conftest.py
+index 1b65e9d57..69b6f38c9 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -440,25 +440,6 @@ def setuptools_install(
+ return _common_wheel_editable_install(tmpdir_factory, common_wheels, "setuptools")
+
+
+-@pytest.fixture(scope="session")
+-def coverage_install(
+- tmpdir_factory: pytest.TempPathFactory, common_wheels: Path
+-) -> Path:
+- return _common_wheel_editable_install(tmpdir_factory, common_wheels, "coverage")
+-
+-
+-@pytest.fixture(scope="session")
+-def socket_install(tmpdir_factory: pytest.TempPathFactory, common_wheels: Path) -> Path:
+- lib_dir = _common_wheel_editable_install(
+- tmpdir_factory, common_wheels, "pytest_subket"
+- )
+- # pytest-subket is only included so it can intercept and block unexpected
+- # network requests. It should NOT be visible to the pip under test.
+- dist_info = next(lib_dir.glob("*.dist-info"))
+- shutil.rmtree(dist_info)
+- return lib_dir
+-
+-
+ def install_pth_link(
+ venv: VirtualEnvironment, project_name: str, lib_dir: Path
+ ) -> None:
+@@ -474,8 +455,6 @@ def virtualenv_template(
+ pip_src: Path,
+ pip_editable_parts: tuple[Path, ...],
+ setuptools_install: Path,
+- coverage_install: Path,
+- socket_install: Path,
+ ) -> VirtualEnvironment:
+ venv_type: VirtualEnvironmentType
+ if request.config.getoption("--use-venv"):
+@@ -489,10 +468,6 @@ def virtualenv_template(
+
+ # Install setuptools, pytest-subket, and pip.
+ install_pth_link(venv, "setuptools", setuptools_install)
+- install_pth_link(venv, "pytest_subket", socket_install)
+- # Also copy pytest-subket's .pth file so it can intercept socket calls.
+- with open(venv.site / "pytest_socket.pth", "w") as f:
+- f.write(socket_install.joinpath("pytest_socket.pth").read_text())
+
+ pth, dist_info = pip_editable_parts
+
+@@ -505,14 +480,6 @@ def virtualenv_template(
+ # detects changed files.
+ venv.site.joinpath("easy-install.pth").touch()
+
+- if request.config.getoption("--cov"):
+- # Install coverage and pth file for executing it in any spawned processes
+- # in this virtual environment.
+- install_pth_link(venv, "coverage", coverage_install)
+- # zz prefix ensures the file is after easy-install.pth.
+- with open(venv.site / "zz-coverage-helper.pth", "a") as f:
+- f.write("import coverage; coverage.process_startup()")
+-
+ # Drop (non-relocatable) launchers.
+ for exe in os.listdir(venv.bin):
+ if not exe.startswith(("python", "libpy")): # Don't remove libpypy-c.so...
diff --git a/dev-python/lit/Manifest b/dev-python/lit/Manifest
index f69c7c75cb85..ef60b79d7e97 100644
--- a/dev-python/lit/Manifest
+++ b/dev-python/lit/Manifest
@@ -16,4 +16,5 @@ DIST llvm-project-22.1.0-rc1.src.tar.xz 166976000 BLAKE2B eec2cf8822aa6937c751d9
DIST llvm-project-22.1.0-rc1.src.tar.xz.sig 119 BLAKE2B e3d5a6c00d7960b0694919ff083e02f0273e97da6a40ad452fbb8261b9edfc52d4262733d82a59f03ad7d15b3b62de743b37a1b2e191417443ecb730520be376 SHA512 51326b9402d7719c491ac5c6ab80a678896743dd88e3f997245adb77e7b3f5e0f84f6389c75872aea268de8a7a049684c84cdf575c1f19c4971bb280a9374de6
DIST llvm-project-22.1.0-rc2.src.tar.xz 166979860 BLAKE2B d4d58b2615ce596f97ad743ba43a774a7b1e69f8aa394411cfdfdae6abf76ef23c9f483a8db590eac6012a965dbe720111c3c779cf20d1483bd216a3fe5111a0 SHA512 2690f582950a2b8b4dccfce849080b841b34068bbd07acd25ae7d18ef0bc6919f83cd57edda8b90a00327b73aa5cb3411d413ea800247cf541c89143ca26ef98
DIST llvm-project-22.1.0-rc2.src.tar.xz.sig 119 BLAKE2B 797d0fb36d5ff979504bf094c574ab6473d6d428b0ee0f80c95f6b700c534b8d390f0685e01bd9681fd0b33c0fe39af2d6a8b79372d05af1d87b0a602ba7ff2f SHA512 619a9ef733d7f89ed1e7564d027b4d1ad714dbe7912cd7ff258436e9ee6b878cc806d2856f00b600f982a472644cd9ba54739f8d034f5b5033c1036fcddf9a09
+DIST llvm-project-424bebd9c784b8490e63290feeeceb42dfdaeb49.tar.gz 259881041 BLAKE2B 3ad34527e65de98be5153d97c7604e0aa8187907f0361bcdf98d37eceaad3a2f152243f5a89ba65f76aba83a69ad3b51f98832095caa7845e7dd5d369611405e SHA512 023581069f5b1f29e1160567df5e365addcf3763829562f7b751d44e0bb0c7adb962101967ae69b2b6a01680af8c833077cd04285727f5fb0292ee7fc61789fc
DIST llvm-project-9eaa1ff11ccde52f2e3bf86f253b6b646548c7cc.tar.gz 259436517 BLAKE2B effc5d342ef8440834d03ca7f9d56dc9f5a0aaa10f62aa81fb3d468cfcd0f28a41b343dc12d91e087a5e509a8bb6aa00b477582f42b87efbf22ea580b48a981e SHA512 fda87f688a8a3626c3b025d2a783d7deb0c64ae83cb9c9c89adb73eba764435981545844eb654d7094361fb3786ea955101ba261f0e4af5ee4beffdd9c2449d7
diff --git a/dev-python/lit/lit-23.0.0_pre20260131.ebuild b/dev-python/lit/lit-23.0.0_pre20260131.ebuild
new file mode 100644
index 000000000000..2cc4b6485aed
--- /dev/null
+++ b/dev-python/lit/lit-23.0.0_pre20260131.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 llvm.org
+
+DESCRIPTION="A stand-alone install of the LLVM suite testing tool"
+HOMEPAGE="https://llvm.org/"
+
+LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+# Tests require 'FileCheck' and 'not' utilities (from llvm)
+BDEPEND="
+ test? (
+ dev-python/psutil[${PYTHON_USEDEP}]
+ llvm-core/llvm
+ )
+"
+
+LLVM_COMPONENTS=( llvm/utils/lit )
+llvm.org_set_globals
+
+# TODO: move the manpage generation here (from llvm-core/llvm)
+
+src_prepare() {
+ # flaky test
+ # https://github.com/llvm/llvm-project/issues/72022
+ rm tests/progress-bar.py || die
+
+ cd "${WORKDIR}" || die
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local -x LIT_PRESERVES_TMP=1
+ local litflags=$(get_lit_flags)
+ ./lit.py ${litflags//;/ } tests || die
+}
diff --git a/dev-python/numpy/Manifest b/dev-python/numpy/Manifest
index e59315d56426..35aff20c5e22 100644
--- a/dev-python/numpy/Manifest
+++ b/dev-python/numpy/Manifest
@@ -13,3 +13,5 @@ DIST numpy-2.4.0rc1.tar.gz 20658299 BLAKE2B ffefdc86ebdf77c503f7be7228efec64b095
DIST numpy-2.4.0rc1.tar.gz.provenance 9749 BLAKE2B a554580b5d9ddffeca3ddce5edb49130de5b27bb3678acc44ad9d1c0f3b0617f5cb723f1803e31048641e3647e950ea85a469fe08c0b8467b0419d882639a228 SHA512 0758b3bb844433ec7fc662901c63768e6ca6f43dda784a405124aceaf25cae20d885cd2f0cfecd7897874953e9c21c42337159f7174c024d30bb8511c0ff1f98
DIST numpy-2.4.1.tar.gz 20721320 BLAKE2B 57e51640bf8cfc53fb9f661a7d26dadf5c1d1317be05e211b7a894cf29c545335ed55c809c585a0ba3598774b4e8753bd517ab8016012c51c7de7604bd3a4632 SHA512 3168d9cf6286f8590cb7a3e58a6f4b51ebda906c5a3cff900bcab20962721684bd65b929fe24cc238c46934f9bf7fd8c2ae091d624b03d44652f49ad61ccab32
DIST numpy-2.4.1.tar.gz.provenance 9688 BLAKE2B 92eca7634e6bc4371e459c5314877e69f5190af8231031695d1b5061ff2da55c4ed9b90eee3ee50a40014324f70719a95647282b73efd68f7d67e9211137aee4 SHA512 cc259fce3e35c892866cebfe488723990f8fe28c1fb1004986865a765272c630a536b7723c4f22103d8cbb7886f27fb45887e84e0ebf747cc48f5c490fee9e28
+DIST numpy-2.4.2.tar.gz 20723651 BLAKE2B 3a73eacc37903573640bdbd2cbb96ac5f224e454bad994445fb1389e7871273d7217378a01d8899a129478aa9b69b284926799cb21503071067a63c53b04c780 SHA512 dbb1a95737695e7c93c2c0fc9c666ee9681b5fb5b720f4dd2fe448e18732bd4679c0932386acc9720968c1c6df2377501a0d0a9d5c2610c6f6a994c08cdab6d0
+DIST numpy-2.4.2.tar.gz.provenance 9884 BLAKE2B 258a28d22687be9785ab915149d4667d82b9581edcdc86bb8c76c688129f2a3cc6e75fe98c86f08fc603dc4bb27599b65e5be51799ddd09418163b39367fc778 SHA512 85bb5dd40a3babbef7c7d9496109dbe36eaec8b77a9db641c24da40f08c684d281ab89b48200614ca851ef0197dafb775e5b16554c5a77acd0bab755cbd4e7f3
diff --git a/dev-python/numpy/numpy-2.4.2.ebuild b/dev-python/numpy/numpy-2.4.2.ebuild
new file mode 100644
index 000000000000..dc4b1246224f
--- /dev/null
+++ b/dev-python/numpy/numpy-2.4.2.ebuild
@@ -0,0 +1,309 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=meson-python
+PYPI_VERIFY_REPO=https://github.com/numpy/numpy-release
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE="threads(+)"
+FORTRAN_NEEDED=lapack
+
+inherit distutils-r1 flag-o-matic fortran-2 pypi
+
+DESCRIPTION="Fast array and numerical python library"
+HOMEPAGE="
+ https://numpy.org/
+ https://github.com/numpy/numpy/
+ https://pypi.org/project/numpy/
+"
+
+LICENSE="BSD 0BSD MIT ZLIB CC0-1.0"
+SLOT="0/2"
+if [[ ${PV} != *_rc* ]]; then
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+fi
+# +lapack because the internal fallbacks are pretty slow. Building without blas
+# is barely supported anyway, see bug #914358.
+IUSE="big-endian +cpudetection index64 +lapack"
+
+# upstream-flag[:gentoo-flag]
+ARM_FLAGS=( neon{,-fp16} vfpv4 asimd{,hp,dp,fhm} sve )
+PPC_FLAGS=( vsx vsx2 vsx3 vsx4 )
+X86_FLAGS=(
+ avx2 avx512{bw,dq,vl} avx512_{bf16,bitalg,fp16,vbmi2} sse4_2
+)
+IUSE+="
+ ${ARM_FLAGS[*]/#/cpu_flags_arm_}
+ ${PPC_FLAGS[*]/#/cpu_flags_ppc_}
+ ${X86_FLAGS[*]/#/cpu_flags_x86_}
+"
+
+RDEPEND="
+ lapack? (
+ >=virtual/cblas-3.8[index64(-)?]
+ >=virtual/lapack-3.8[index64(-)?]
+ )
+"
+BDEPEND="
+ ${RDEPEND}
+ >=dev-build/meson-1.5.2
+ >=dev-python/cython-3.0.6[${PYTHON_USEDEP}]
+ lapack? (
+ virtual/pkgconfig
+ )
+ test? (
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.14.0[${PYTHON_USEDEP}]
+ ' 'python*')
+ dev-python/charset-normalizer[${PYTHON_USEDEP}]
+ >=dev-python/pytz-2019.3[${PYTHON_USEDEP}]
+ )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ # https://bugs.gentoo.org/925367
+ vrndq_f32
+)
+
+EPYTEST_PLUGINS=( hypothesis pytest-timeout )
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+has_all_x86() {
+ local flag
+ for flag; do
+ if ! use "cpu_flags_x86_${flag}"; then
+ return 1
+ fi
+ done
+ return 0
+}
+
+python_configure_all() {
+ local cpu_baseline=()
+ local map flag
+ case ${ARCH} in
+ arm)
+ # every flag implies the previous one
+ for map in NEON:neon NEON_FP16:neon-fp16 NEON_VFPV4:vfpv4; do
+ if ! use "cpu_flags_arm_${map#*:}"; then
+ break
+ fi
+ cpu_baseline+=( "${map%:*}" )
+ done
+ ;&
+ arm64)
+ # on 32-bit ARM, ASIMD implies all NEON* flags
+ # on 64-bit ARM, they are all linked together
+ if use arm64 ||
+ [[ ${cpu_baseline[@]} && ${cpu_baseline[-1]} == NEON_VFPV4 ]]
+ then
+ cpu_baseline+=( $(usev cpu_flags_arm_asimd ASIMD) )
+ fi
+
+ # these two imply ASIMD
+ if [[ ${cpu_baseline[@]} && ${cpu_baseline[-1]} == ASIMD ]]; then
+ for flag in dp hp; do
+ cpu_baseline+=(
+ $(usev "cpu_flags_arm_asimd${flag}" "ASIMD${flag^^}")
+ )
+ done
+ fi
+
+ # these two imply ASIMDHP
+ if [[ ${cpu_baseline[@]} && ${cpu_baseline[-1]} == ASIMDHP ]]; then
+ for flag in asimdfhm sve; do
+ cpu_baseline+=(
+ $(usev "cpu_flags_arm_${flag}" "${flag^^}")
+ )
+ done
+ fi
+ ;;
+ ppc64)
+ # every flag implies the previous one
+ for flag in '' 2 3 4; do
+ if ! use "cpu_flags_ppc_vsx${flags}"; then
+ break
+ fi
+ cpu_baseline+=( "VSX${flag}" )
+ done
+ ;;
+ amd64|x86)
+ # upstream combines multiple instructions into sets
+ local mapping=(
+ # for these, we just check the newest instruction set,
+ # since all earlier instruction sets imply it
+ "X86_V2=sse4_2"
+ "X86_V3=avx2"
+ # from here on, we check all features that were added
+ # in the lowest CPU supporting them all
+ # https://en.wikipedia.org/wiki/AVX-512
+ "X86_V4=avx512bw avx512dq avx512vl"
+ "AVX512_ICL=avx512_vbmi2 avx512_bitalg"
+ "AVX512_SPR=avx512_bf16 avx512_fp16"
+ )
+
+ local m
+ for m in "${mapping[@]}"; do
+ local feature=${m%=*}
+ local sets=${m#*=}
+
+ if has_all_x86 ${sets}; then
+ einfo "${feature} enabled: all of ${sets} enabled"
+ cpu_baseline+=( "${feature}" )
+ else
+ einfo "${feature} disabled: not all of ${sets} enabled"
+ break
+ fi
+ done
+ ;;
+ *)
+ cpu_baseline=MIN
+ ;;
+ esac
+
+ DISTUTILS_ARGS=(
+ -Dallow-noblas=$(usex !lapack true false)
+ -Duse-ilp64=$(usex index64 true false)
+ -Dblas=$(usev lapack $(usex index64 cblas64 cblas))
+ -Dlapack=$(usev lapack $(usex index64 lapack64 lapack))
+ -Dcpu-baseline="${cpu_baseline[*]}"
+ -Dcpu-baseline-detect=disabled
+ -Dcpu-dispatch="$(usev cpudetection MAX)"
+ )
+
+ # bug #922457
+ filter-lto
+ # https://github.com/numpy/numpy/issues/25004
+ append-flags -fno-strict-aliasing
+}
+
+python_test() {
+ # We run tests in parallel, so avoid having n^2 threads in lapack
+ # tests.
+ local -x BLIS_NUM_THREADS=1
+ local -x MKL_NUM_THREADS=1
+ local -x OMP_NUM_THREADS=1
+ local -x OPENBLAS_NUM_THREADS=1
+
+ # don't run tests that require more than 2 GiB of RAM (per process)
+ local -x NPY_AVAILABLE_MEM="2 GiB"
+
+ local EPYTEST_DESELECT=(
+ # Very disk-and-memory-hungry
+ numpy/lib/tests/test_io.py::TestSavezLoad::test_closing_fid
+ numpy/lib/tests/test_io.py::TestSavezLoad::test_closing_zipfile_after_load
+
+ # Precision problems
+ numpy/_core/tests/test_umath_accuracy.py::TestAccuracy::test_validate_transcendentals
+
+ numpy/typing/tests/test_typing.py
+
+ # Flaky, reruns don't help
+ numpy/f2py/tests/test_crackfortran.py
+ numpy/f2py/tests/test_data.py::TestData{,F77}::test_crackedlines
+ numpy/f2py/tests/test_f2py2e.py::test_gen_pyf
+ numpy/f2py/tests/test_f2py2e.py::test_gh22819_cli
+ )
+
+ if [[ $(uname -m) == armv8l ]]; then
+ # Degenerate case of arm32 chroot on arm64, bug #774108
+ EPYTEST_DESELECT+=(
+ numpy/_core/tests/test_cpu_features.py::Test_ARM_Features::test_features
+ )
+ fi
+
+ case ${ARCH} in
+ arm)
+ EPYTEST_DESELECT+=(
+ # TODO: warnings
+ numpy/_core/tests/test_umath.py::TestSpecialFloats::test_unary_spurious_fpexception
+
+ # TODO
+ numpy/_core/tests/test_function_base.py::TestLinspace::test_denormal_numbers
+ numpy/f2py/tests/test_kind.py::TestKind::test_real
+ numpy/f2py/tests/test_kind.py::TestKind::test_quad_precision
+
+ # require too much memory
+ 'numpy/_core/tests/test_multiarray.py::TestDot::test_huge_vectordot[complex128]'
+ 'numpy/_core/tests/test_multiarray.py::TestDot::test_huge_vectordot[float64]'
+ )
+ ;;
+ hppa)
+ EPYTEST_DESELECT+=(
+ # https://bugs.gentoo.org/942689
+ "numpy/_core/tests/test_dtype.py::TestBuiltin::test_dtype[int]"
+ "numpy/_core/tests/test_dtype.py::TestBuiltin::test_dtype[float]"
+ "numpy/_core/tests/test_dtype.py::TestBuiltin::test_dtype_bytes_str_equivalence[datetime64]"
+ "numpy/_core/tests/test_dtype.py::TestBuiltin::test_dtype_bytes_str_equivalence[timedelta64]"
+ "numpy/_core/tests/test_dtype.py::TestBuiltin::test_dtype_bytes_str_equivalence[<f]"
+ "numpy/_core/tests/test_dtype.py::TestPickling::test_pickle_dtype[dt28]"
+ numpy/f2py/tests/test_kind.py::TestKind::test_real
+ numpy/f2py/tests/test_kind.py::TestKind::test_quad_precision
+ numpy/tests/test_ctypeslib.py::TestAsArray::test_reference_cycles
+ numpy/tests/test_ctypeslib.py::TestAsArray::test_segmentation_fault
+ numpy/tests/test_ctypeslib.py::TestAsCtypesType::test_scalar
+ numpy/tests/test_ctypeslib.py::TestAsCtypesType::test_subarray
+ numpy/tests/test_ctypeslib.py::TestAsCtypesType::test_structure
+ numpy/tests/test_ctypeslib.py::TestAsCtypesType::test_structure_aligned
+ numpy/tests/test_ctypeslib.py::TestAsCtypesType::test_union
+ numpy/tests/test_ctypeslib.py::TestAsCtypesType::test_padded_union
+ )
+ ;;
+ ppc|x86)
+ EPYTEST_DESELECT+=(
+ # require too much memory
+ 'numpy/_core/tests/test_multiarray.py::TestDot::test_huge_vectordot[complex128]'
+ 'numpy/_core/tests/test_multiarray.py::TestDot::test_huge_vectordot[float64]'
+ )
+ ;;
+ esac
+
+ if [[ ${CHOST} == powerpc64le-* ]]; then
+ EPYTEST_DESELECT+=(
+ # long double thingy
+ numpy/_core/tests/test_scalarprint.py::TestRealScalars::test_ppc64_ibm_double_double128
+ )
+ fi
+
+ if use big-endian; then
+ EPYTEST_DESELECT+=(
+ # ppc64 and sparc
+ numpy/linalg/tests/test_linalg.py::TestDet::test_generalized_sq_cases
+ numpy/linalg/tests/test_linalg.py::TestDet::test_sq_cases
+ "numpy/f2py/tests/test_return_character.py::TestFReturnCharacter::test_all_f77[s1]"
+ "numpy/f2py/tests/test_return_character.py::TestFReturnCharacter::test_all_f77[t1]"
+ "numpy/f2py/tests/test_return_character.py::TestFReturnCharacter::test_all_f90[s1]"
+ "numpy/f2py/tests/test_return_character.py::TestFReturnCharacter::test_all_f90[t1]"
+ )
+ fi
+
+ if ! has_version -b "~${CATEGORY}/${P}[${PYTHON_USEDEP}]" ; then
+ # depends on importing numpy.random from system namespace
+ EPYTEST_DESELECT+=(
+ 'numpy/random/tests/test_extending.py::test_cython'
+ )
+ fi
+
+ if has_version ">=dev-python/setuptools-74[${PYTHON_USEDEP}]"; then
+ # msvccompiler removal
+ EPYTEST_DESELECT+=(
+ numpy/tests/test_public_api.py::test_all_modules_are_expected_2
+ numpy/tests/test_public_api.py::test_api_importable
+ )
+ EPYTEST_IGNORE+=(
+ numpy/distutils/tests/test_mingw32ccompiler.py
+ numpy/distutils/tests/test_system_info.py
+ )
+ fi
+
+ cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
+ epytest
+}
+
+python_install_all() {
+ local DOCS=( LICENSE.txt README.md THANKS.txt )
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/pip/Manifest b/dev-python/pip/Manifest
index 5d4d976f3427..c3f4a5b3d483 100644
--- a/dev-python/pip/Manifest
+++ b/dev-python/pip/Manifest
@@ -1,2 +1,3 @@
DIST flit_core-3.12.0-py3-none-any.whl 45594 BLAKE2B 7c6cb6eb03d45bbba27f27b3728881b57fe82dd38e03f884d3b7c46116eb2b9dd76f92bdaf7f594ef8ccbe12ec8f9a56424ff9e9fc7a839c4818a113fdf0c3d3 SHA512 790c12b1f43201e365fb3f8f2f0a54e1a578876799dfdf8bfeea679a25ea096bf62946d006618c1458ae6e37ce6d00998f37e9aba426d5ab80d32ef2d75da4e0
DIST pip-25.3.gh.tar.gz 9115712 BLAKE2B 87d848c497163a45ee3de8f6f75c80b5051b07062c5a15450ae98b59a6cebc6bf03ca8525d57929493f2cfeb28d5623401eba69f0bdfc734389efbb84eafdf53 SHA512 f50db092213ec3bb819d3da5669f73d119b5ec7f7ac5e8a587a17c27eafa32bc17a057df09389c526a3769ef3577f5553187d54ceffa89aed63f4b4498ff044e
+DIST pip-26.0.gh.tar.gz 9226836 BLAKE2B fe24bd8fca7fa2b64ed865a880a430c420a9e73e35a9f1f2405473d4778467f48a8bc0607c1423760ff23706d3e11ddfeb20cd5a7f6522530a679994278ee1d8 SHA512 62a62b2db4e7a6c795cf01ab553b94068f0d1c62470c1f5c2b3164344a84fa68f7854eec99d93b9f56193c61276d95d8af21a3cb6b78f0db4f013d9997e78199
diff --git a/dev-python/pip/files/pip-26.0-test-wheels.patch b/dev-python/pip/files/pip-26.0-test-wheels.patch
new file mode 100644
index 000000000000..55fb04f8f65f
--- /dev/null
+++ b/dev-python/pip/files/pip-26.0-test-wheels.patch
@@ -0,0 +1,74 @@
+From f8f2b7760bfc8d64607b3bf2cdc9867fcce8276a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 31 Jul 2025 05:10:08 +0200
+Subject: [PATCH] Disable coverage & socket plugins inside test venvs
+
+---
+ tests/conftest.py | 33 ---------------------------------
+ 1 file changed, 33 deletions(-)
+
+diff --git a/tests/conftest.py b/tests/conftest.py
+index 1b65e9d57..69b6f38c9 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -440,25 +440,6 @@ def setuptools_install(
+ return _common_wheel_editable_install(tmpdir_factory, common_wheels, "setuptools")
+
+
+-@pytest.fixture(scope="session")
+-def coverage_install(
+- tmpdir_factory: pytest.TempPathFactory, common_wheels: Path
+-) -> Path:
+- return _common_wheel_editable_install(tmpdir_factory, common_wheels, "coverage")
+-
+-
+-@pytest.fixture(scope="session")
+-def socket_install(tmpdir_factory: pytest.TempPathFactory, common_wheels: Path) -> Path:
+- lib_dir = _common_wheel_editable_install(
+- tmpdir_factory, common_wheels, "pytest_subket"
+- )
+- # pytest-subket is only included so it can intercept and block unexpected
+- # network requests. It should NOT be visible to the pip under test.
+- dist_info = next(lib_dir.glob("*.dist-info"))
+- shutil.rmtree(dist_info)
+- return lib_dir
+-
+-
+ def install_pth_link(
+ venv: VirtualEnvironment, project_name: str, lib_dir: Path
+ ) -> None:
+@@ -474,8 +455,6 @@ def virtualenv_template(
+ pip_src: Path,
+ pip_editable_parts: tuple[Path, ...],
+ setuptools_install: Path,
+- coverage_install: Path,
+- socket_install: Path,
+ ) -> VirtualEnvironment:
+ venv_type: VirtualEnvironmentType
+ if request.config.getoption("--use-venv"):
+@@ -489,10 +468,6 @@ def virtualenv_template(
+
+ # Install setuptools, pytest-subket, and pip.
+ install_pth_link(venv, "setuptools", setuptools_install)
+- install_pth_link(venv, "pytest_subket", socket_install)
+- # Also copy pytest-subket's .pth file so it can intercept socket calls.
+- with open(venv.site / "pytest_socket.pth", "w") as f:
+- f.write(socket_install.joinpath("pytest_socket.pth").read_text())
+
+ pth, dist_info = pip_editable_parts
+
+@@ -505,14 +480,6 @@ def virtualenv_template(
+ # detects changed files.
+ venv.site.joinpath("easy-install.pth").touch()
+
+- if request.config.getoption("--cov"):
+- # Install coverage and pth file for executing it in any spawned processes
+- # in this virtual environment.
+- install_pth_link(venv, "coverage", coverage_install)
+- # zz prefix ensures the file is after easy-install.pth.
+- with open(venv.site / "zz-coverage-helper.pth", "a") as f:
+- f.write("import coverage; coverage.process_startup()")
+-
+ # Drop (non-relocatable) launchers.
+ for exe in os.listdir(venv.bin):
+ if not exe.startswith(("python", "libpy")): # Don't remove libpypy-c.so...
diff --git a/dev-python/pip/pip-26.0.ebuild b/dev-python/pip/pip-26.0.ebuild
new file mode 100644
index 000000000000..ef036e237ade
--- /dev/null
+++ b/dev-python/pip/pip-26.0.ebuild
@@ -0,0 +1,204 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# please bump dev-python/ensurepip-pip along with this package!
+
+DISTUTILS_USE_PEP517=flit
+PYTHON_TESTED=( pypy3_11 python3_{11..14} )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+PYTHON_REQ_USE="ssl(+),threads(+)"
+
+inherit distutils-r1 pypi shell-completion
+FLIT_CORE_PV=3.12.0
+
+DESCRIPTION="The PyPA recommended tool for installing Python packages"
+HOMEPAGE="
+ https://pip.pypa.io/en/stable/
+ https://pypi.org/project/pip/
+ https://github.com/pypa/pip/
+"
+SRC_URI="
+ https://github.com/pypa/pip/archive/${PV}.tar.gz -> ${P}.gh.tar.gz
+ test? (
+ $(pypi_wheel_url flit-core "${FLIT_CORE_PV}")
+ )
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="test test-rust"
+RESTRICT="!test? ( test )"
+
+# see src/pip/_vendor/vendor.txt
+RDEPEND="
+ >=dev-python/cachecontrol-0.14.3[${PYTHON_USEDEP}]
+ >=dev-python/dependency-groups-1.3.0[${PYTHON_USEDEP}]
+ >=dev-python/distlib-0.4.0[${PYTHON_USEDEP}]
+ >=dev-python/distro-1.9.0[${PYTHON_USEDEP}]
+ >=dev-python/msgpack-1.1.1[${PYTHON_USEDEP}]
+ >=dev-python/packaging-25.0[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-4.3.8[${PYTHON_USEDEP}]
+ >=dev-python/pyproject-hooks-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.32.4[${PYTHON_USEDEP}]
+ >=dev-python/rich-14.1.0[${PYTHON_USEDEP}]
+ >=dev-python/resolvelib-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-70.3.0[${PYTHON_USEDEP}]
+ >=dev-python/tomli-w-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/truststore-0.10.1[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.13.2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/ensurepip-setuptools
+ dev-python/freezegun[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/scripttest[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-70.1.0[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ dev-python/werkzeug[${PYTHON_USEDEP}]
+ test-rust? (
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ )
+ dev-vcs/git
+ ' "${PYTHON_TESTED[@]}")
+ )
+"
+
+python_prepare_all() {
+ local PATCHES=(
+ # remove coverage & pytest-subket wheel expectation from test suite
+ "${FILESDIR}/pip-26.0-test-wheels.patch"
+ # prepare to unbundle dependencies
+ "${FILESDIR}/pip-25.0.1-unbundle.patch"
+ )
+
+ distutils-r1_python_prepare_all
+
+ # unbundle dependencies
+ rm -r src/pip/_vendor || die
+ find -name '*.py' -exec sed -i \
+ -e 's:from pip\._vendor import:import:g' \
+ -e 's:from pip\._vendor\.:from :g' \
+ {} + || die
+ sed -i -e '/_vendor.*\(COPYING\|LICENSE\)/d' pyproject.toml || die
+
+ if use test; then
+ local wheels=(
+ "${BROOT}"/usr/lib/python/ensurepip/{setuptools,wheel}-*.whl
+ "${DISTDIR}/$(pypi_wheel_name flit-core "${FLIT_CORE_PV}")"
+ )
+ mkdir tests/data/common_wheels/ || die
+ cp "${wheels[@]}" tests/data/common_wheels/ || die
+ fi
+}
+
+python_configure() {
+ if use test && has_version "dev-python/pip[${PYTHON_USEDEP}]"; then
+ "${EPYTHON}" -m pip check ||
+ die "${EPYTHON} -m pip check failed, tests will fail"
+ fi
+}
+
+python_compile_all() {
+ # 'pip completion' command embeds full $0 into completion script, which confuses
+ # 'complete' and causes QA warning when running as "${PYTHON} -m pip".
+ # This trick sets correct $0 while still calling just installed pip.
+ local pipcmd='if True:
+ import sys
+ sys.argv[0] = "pip"
+ __file__ = ""
+ from pip._internal.cli.main import main
+ sys.exit(main())
+ '
+ "${EPYTHON}" -c "${pipcmd}" completion --bash > completion.bash || die
+ "${EPYTHON}" -c "${pipcmd}" completion --zsh > completion.zsh || die
+}
+
+python_test() {
+ if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
+ einfo "Skipping tests on ${EPYTHON}"
+ return 0
+ fi
+
+ local EPYTEST_DESELECT=(
+ tests/functional/test_inspect.py::test_inspect_basic
+ # Internet
+ tests/functional/test_config_settings.py::test_backend_sees_config_via_sdist
+ tests/functional/test_install.py::test_double_install_fail
+ tests/functional/test_install.py::test_install_sdist_links
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ tests/functional/test_lock.py::test_lock_archive
+ tests/functional/test_lock.py::test_lock_vcs
+ # broken by system site-packages use
+ tests/functional/test_freeze.py::test_freeze_with_setuptools
+ tests/functional/test_install.py::test_install_subprocess_output_handling
+ tests/functional/test_pip_runner_script.py::test_runner_work_in_environments_with_no_pip
+ tests/functional/test_uninstall.py::test_basic_uninstall_distutils
+ tests/unit/test_base_command.py::test_base_command_global_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_local_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_provides_tempdir_helpers
+ # broken by unbundling
+ "tests/functional/test_debug.py::test_debug[vendored library versions:]"
+ tests/functional/test_debug.py::test_debug__library_versions
+ tests/functional/test_freeze.py::test_freeze_multiple_exclude_with_all
+ tests/functional/test_install.py::test_install_package_with_same_name_in_curdir
+ tests/functional/test_pep517.py::test_nested_builds
+ tests/functional/test_python_option.py::test_python_interpreter
+ tests/functional/test_uninstall.py::test_basic_uninstall
+ tests/functional/test_uninstall.py::test_uninstall_non_local_distutils
+ )
+ local EPYTEST_IGNORE=(
+ # from upstream options
+ tests/tests_cache
+ # requires proxy.py
+ tests/functional/test_proxy.py
+ )
+
+ case ${EPYTHON} in
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ # unexpected tempfiles?
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ # wrong path
+ tests/functional/test_install.py::test_install_editable_with_prefix_setup_py
+ # wrong exception assumptions
+ tests/unit/test_utils_datetime.py::test_parse_iso_datetime_invalid
+ )
+ ;;
+ esac
+
+ if ! has_version "dev-python/cryptography[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ tests/functional/test_install.py::test_install_sends_client_cert
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ )
+ fi
+
+ local -x PIP_DISABLE_PIP_VERSION_CHECK=1
+ local EPYTEST_PLUGINS=()
+ # rerunfailures because test suite breaks if packages are installed
+ # to system site-packages while it's running
+ local EPYTEST_RERUNS=5
+ local EPYTEST_XDIST=1
+ epytest -m "not network" -o addopts= -o tmp_path_retention_policy=all \
+ --use-venv
+}
+
+python_install_all() {
+ local DOCS=( AUTHORS.txt docs/html/**/*.rst )
+ distutils-r1_python_install_all
+
+ newbashcomp completion.bash pip
+ newzshcomp completion.zsh _pip
+}
diff --git a/dev-python/pyproject-fmt/Manifest b/dev-python/pyproject-fmt/Manifest
index b09db6e8955a..393b974bfb53 100644
--- a/dev-python/pyproject-fmt/Manifest
+++ b/dev-python/pyproject-fmt/Manifest
@@ -1,5 +1,6 @@
DIST ahash-0.8.12.crate 43413 BLAKE2B 3e3ff0a91c538a063a09f1d71c0bd4df7d3b4cda3ba0945d3dad746430e0940979375e90ae5da7d585ffa44f387b17f38fc506ade0e0847feebe10d5c62f2b61 SHA512 872e5fa0d1334abac96d10eca18f32c2b1a1e0b38671c132b6effd029e9f0147ddcef79f4d85c8baf0537ddfb8c39a85f61d073e1fb3143dba659a8385641e1b
DIST aho-corasick-1.1.3.crate 183311 BLAKE2B 8dfcbba0b9d94e55eae739b16f5c6474baa43ee7854c5ca792f426a9f46fb0eece79cd493b804e51449181bcad338b96819fe977c02c9907654d713e26b9f830 SHA512 ba422a54688c4678fcf16e34fdf3ed06c333e6e3fc8b75af9272a215add494d43ebaef319021134b61327fd5d3572aec0dc655b714ffb3bc71ba3c265c9ebb69
+DIST aho-corasick-1.1.4.crate 184015 BLAKE2B 088766e505a828a221a9bca29cb1833ac3964a538cda62d12b723a263fe0e588406af0b710cf87ef67b0ccb9aa3bf69f42e0e5225ade47abe93c73fcaca69ec1 SHA512 c77e35191b00546f5e499fab154170cedd619599e7250f92db9fba0a41c833eb426f214e58b00c5c39f8757406b33492b3241cb8cb233ce384ad0683c3ee4b62
DIST any_ascii-0.1.7.crate 220683 BLAKE2B 77342934676213b4898158ab03f1f73826d8aba212c47ded874d42c7ff8a0d95ccd88950381348fddf895bfc5570fa81ad3459fe10f52ba630c0e50c75dcacaf SHA512 3fe4e0c10c32983c3c725a5930f0bf7c752942c6dd0818b93bae9808e72d5a87725733a85b11cabb8fea630f524fd4b7a13160112f8bb7cc24515bcc384d6dbc
DIST arc-swap-1.7.1.crate 68512 BLAKE2B 5ddeffd2ae8af4125a5b43d4a0a1afc7948533bf037d8cd3e47603c13b57b156618280d99b840bf318b25b6eb29400ad68499695e182acdc05bc5f621c42ee16 SHA512 070fa8dd17b380b6d7d72f6f45c84e591de9a9770b9662351e7a41af03798bf5e34d185a5fcb948f4d8ac5e210a33acd465c39eff6097662c2442b34ee3dbdff
DIST autocfg-1.4.0.crate 17712 BLAKE2B 7f7300439899be03d001dd32b7e797bc4b9a58103081b6f7353c4b5897813cedf870b3fb1fa25d320a75326b334b44d8287e8603de34fc560d0b567143915cc6 SHA512 3b5e7c30bc73e105e4bfcab584c24fc4016db41fac9c356c6649fd841051704bbe8848e09546eb50d7c1f18ea8ce1cb72fbc268a620d5c609b3472114b5be73c
@@ -25,6 +26,7 @@ DIST hashbrown-0.15.3.crate 140413 BLAKE2B c67ca4d608e82126b7411349135409d4bc6e4
DIST heck-0.5.0.crate 11517 BLAKE2B 5365ec43b2239a76b33a174f1a4292ece4147f9d382a68c6c60db78fdc8bad0afb1d51a65bcb25e96675372faa4ea37c318265030b0546ba51942f7c929e1835 SHA512 f044fc9c3d22466629fd8f772ec0555350fd611c0cfadca51d99a3d2f10e155f77c1091916c8a95a6b9b499f366c2e99a5fbf45b010f988bfb9b2501bf9f6a76
DIST indexmap-2.9.0.crate 91214 BLAKE2B c1ff1f45814b84daa854a692e22d385598bf30121e39cdc3de800282b187a39588797a4b187cfe8075eec77ae64bb5ce6a80939cc2cbbdbe6e17e42459ca71cd SHA512 ac474dea5da1dc14a61a28f5b4c850073875030ffad3aa871211a8b075a3e9a64cc748310b4554657f45a70d526010febaf3d3992a80502db389c2347aeeb2c6
DIST indoc-2.0.6.crate 17164 BLAKE2B 1a6cff95bc12ea885ef36b935bf4f1c7870d65be0ff31ffc67dcab904fa80215c1254c1803c5d0c5686252addfad3512e9e1ec79d3edcba026a879f4706926d1 SHA512 e2ea2e5c8226c802bbe0631c1a99d2edd088cbafbf978b2a7b71c7c7f47754c6d4653f466e286441b61cc46def1c7f7a02d4785caab93a61dd785211dba7d1a9
+DIST indoc-2.0.7.crate 17184 BLAKE2B aae454874b44dbc908a75b64626e608e04017c1407daff9a2e2dd12a337ac04db594540d2f31bfc590d6f37f0d711ff2d3054352ff1b33e736c36620404be0a0 SHA512 6e80cf927001821606488a822fd0f67ae1a569b022c98e727e6b1571c88d87775166f088322bd5f17abb8fc1fde62c9d14fb2e99f1e50918487252d823e48f73
DIST itertools-0.10.5.crate 115354 BLAKE2B f24734bdfedf1dba48554e39b43669efcd4a43656eeb2c511096060daeaf049e1ad3eab232e757057750ce94aabad9fc8a0cf29a997edc6c4b167301c3443391 SHA512 d03c3cfba9841776913bbb6daad0c8945830c155f32ae4b48872e0f937c75a443f0ac9a0355f43b359ff75232f38b15f4f6d446b4be30b00b4209cf66ef770c3
DIST itoa-1.0.15.crate 11231 BLAKE2B 17c261baf95bff2f6cf0dbc33ab78ebbab0cf5dc56aeb7f8977377af868deb5957918f1763c2fe8c080e931489ea89ebcc16b3ebd976eeeb7663ff74989a1071 SHA512 158ca5dd4b04cb12d9292a4df63c72443adaf5aab1bd9aacdb964dc58878d847a64251f84897cb25c34648d4c973b44fef5b4c175d7c04cabc2c13b4631c2e42
DIST lexical-sort-0.3.1.crate 63689 BLAKE2B 801e69d0643785e82a86d25620a2e97330d0adf17e82aa1130aa30d1b885f58bebab3751ce7fb7e82986388464af9cd958ed9adfb422ae10840f256d7b4a1aac SHA512 ca7885bc22b4b67053aa7c83299459d5b1f5e627eddbde4827b6a5bf09827ef81d506a445a5a742bc6736cb9e02d7f9b458f16b87ad1af038ea4559ca0184c69
@@ -33,6 +35,7 @@ DIST log-0.4.27.crate 48120 BLAKE2B 09a2159032baaff7eede480062da30ffec1c1d4c77e7
DIST logos-0.12.1.crate 8973 BLAKE2B 344780990917e2c15caeebab955e98ec155f240056b3239bdc9db723e44929c135d4e783a5d3a5af256d7bea2363bfb74a3002ace1865fdd4840bb03a4d79ece SHA512 011bcf2bed59e5c707adb8ce50b26bb845631595426429e741231613e215286c2c05f3ae9fc5b7336b7e7fd0690a9fae2579413b750f7694b6c475d0fca3278d
DIST logos-derive-0.12.1.crate 32282 BLAKE2B e4f6a72c73abb8a02995214dc8f29e9296ee40e4a03f055091256beabce54cd8100b10e8e2459db1fa359dc85c9893e7662fe0eb9cd3af2e27062b34f8e5c602 SHA512 bf78b10d511adf523edcb7c9cc0401d49417f728e82dce5a3cf2679d897f5a089adc72616e77c9d51b1661ee39b925eea1365f3f924114aff091593a4960ce87
DIST memchr-2.7.4.crate 96670 BLAKE2B da38114beca670467c3e1fbf4e415af6f22d52e3223715d52e181babb89b872b46511563985bcc16d7ff4e82f812c6e83ad904b0fe2501b14445119dfa8240e6 SHA512 8d0e8b9c30208897d4b1b920f1bdcccd0c2b75d92a06abe4a1b2407938768abb6487d63de56c6a80419798fe69517210643dfaf11f5f5540185f0eccf220adb2
+DIST memchr-2.7.6.crate 97616 BLAKE2B 3429786e97f1aa078892e417c8ed8198ec727969517309049b842e44097e58038583508aa974e6246888c18e11f9d23863c1bb012b542c5685250fe34e250d7b SHA512 38843817334da88ad74ce679b4401cf948cf8138815f3acc5eb0d005da3aabceb2216e20887e79344396569a2fa136e3aa1f7f3251a00d07dd6934cee79f4fad
DIST memoffset-0.9.1.crate 9032 BLAKE2B 0aab55fe084134bb599c52d77c96400db40949b1013e7037747ada4fcec8dc4a124b6f3755f04b36e057eb2fb4a6bd6f07d6eebcf166f8a71405ef434d802fbf SHA512 3a236c0f481e36973b9f805e454c2efe4dd375e6b4ee406b57145136c70d5fbf4e1183d563ebf3b5fbde7363bbf5f08f0d88e507aae5bda4cc75664ecd0e33aa
DIST num-conv-0.1.0.crate 7444 BLAKE2B 4f5c4695006aa3ae77aaf5c55999a07d8ddfab294584fe10d73eb6abbb3f551846646156581599f966a28c74d80d3ac4373c49d2099991f7ed9edb56d36feec4 SHA512 7884c0c6599c66e40b9a79435e1bbcec60aa7e68b59686922dfab19ccbcac6a6e54f208cfb3d5a8a12e86e4dd67e09977d60b69ef6940e308a28256733f36100
DIST once_cell-1.21.3.crate 34534 BLAKE2B 3578aaef305cad2fdffdc40c392775a3540bfab3f3aeafd22466d9507bf8346b9fcc200929d48525b051070c0aaa423ecbcaa12868b34dca007991effb224166 SHA512 32a87506c6f4598f3ca2c88556014ef2093d5db9a08602335e847caa537a866492fa74c894e7e1da2e4289a1d3dbffcb90a9e37a4a1453203832f434b8206990
@@ -47,20 +50,24 @@ DIST pyo3-build-config-0.26.0.crate 34309 BLAKE2B 5ea8b51da2f425674cd3bfcc1090ff
DIST pyo3-ffi-0.26.0.crate 78247 BLAKE2B 65f1c399bc763bf8afc36ccac27d28242ebcccebd08ab8d9b3165ca5c9abb10f76e76fe5a250aa1e0cdc1d1e8a613160660f07bc0dbc2812675acb9dfc8e89c2 SHA512 91c2ae828e997dee5e48d839794727e94576228e9329c358a3bc77a59f8f37fa0ae6c2579229782b3f46ab90725844ce9194b9de4d3849d824adf1d40743bf7e
DIST pyo3-macros-0.26.0.crate 8906 BLAKE2B 60eef72d27b5bc922b75f71ae24bb6f380288cb3a619bf2940b0de47b27e86cce0ffdb1fbdc9c0540d3f15c9df4884497aa1e6efec0f1579ac722b414818a428 SHA512 07bcddba0926c3dff7629da3260f9a38593fbb337b6a68d55c223f5944d912885e5319cd635ae1785026fed4adea1fcc19695ae83aca5bea127c5a8868fd2c43
DIST pyo3-macros-backend-0.26.0.crate 81809 BLAKE2B 73885035855daf00b001e97e0a5ebe09412d212c8f01aa4db6638ef09990bf1bccbacf2e5a7e6ec21929bb1c2beba06587ecdb6ee954eda9e9c51c6c276cea95 SHA512 4146011a8ef18ecaa44b425eebe6e5e1370945063b98aaa83452e57b66aefbf5d483367b1d4d44aa5091303c4ba7f568c6428ecec0cfa6c90ba41631d4e99367
-DIST pyproject_fmt-2.11.0.tar.gz 46894 BLAKE2B 66a289b54d5ebfccd4dc978e38a2532670e290ec730dd4d611540383fa59b74b30d440375f7c5e6457bf28f5726fd2ad3594cb3baa6afd9f687e5f750b7813bd SHA512 7ba73ad4445249c02359a534c1cac83130b6d7633223ef3466072253ae184fd80d484eb8a0be61c94f313652fa80badeecb4af5baa9aadf209d19d804a47b2e7
DIST pyproject_fmt-2.11.1.tar.gz 47310 BLAKE2B f066e5222da660e988abc1abf9425eb54864e83872f5317b1eac625433449dd753e76b0ec05905b7051b542bfc42ceebda8f3d41dbdfcde13f8fe5e295933b47 SHA512 c9e63d9494cb9560bb8d404aee78e6a3db3dd1bd019fb16ade7810665084f2e0396d4ec9f2ce84e1c6567ad95ddf26db6d3c9feaf99791291436ce2351cd9b43
+DIST pyproject_fmt-2.12.1.tar.gz 83062 BLAKE2B 4011b76e449c833653d7e366c5bd9c95b95a79a26ce66c18b5eda623d9df698787cf62c33b0364d03fb52e4cba5790248d010172ae101122b8a8613fb740e429 SHA512 bebc73b705c02df6667a18b3e2c625362d395cffe8aa8423747d42d8fdda8e7c7cfc3994e2edd904c2682d9aa5cf845d3528b6d85c895848a4926aac5b645915
DIST quote-1.0.40.crate 31063 BLAKE2B 09036ff3e5ebbd775c466bb936de91d4c070481eb4b98c62a4cddcda57cd7b67d63f979b321f6ec64aabee3f5da6c28e7a3efb83f4647768ba578f1bd0bd0bdb SHA512 45a76e22a2b0bec47e4ba73c3b73cc41d821dfcce9876134c5d8eed514da214aee4ce7612e372c8709f888c0d8b9b7e5442f27adb7a59f3571f0339ed7e2ac99
DIST r-efi-5.2.0.crate 64764 BLAKE2B ee17fae983b2c39137cb75698062a3bf8edb4bc680b04900797730618b54298e2f1d13ceab6b660f7a1799f6fc4113ca15d4320b1b95fc42913e0930f3aa16f8 SHA512 80f89d467b482297ec2c13cb0dc8e310442495483e25c33bb523f1cb66d6ce01fee4a57b36880a4f51c0e9f20eb3f993a5bc0a13224d52693dbc81b97c630158
DIST regex-1.11.1.crate 254170 BLAKE2B 5cf41012fc2ba8a006c0eb4a922cbbf1614bf300be361c9e2d98956a9a5e9b140e37bea09132fab7bfb633d4439158723624bcf45e8c619c4061b399253c1b82 SHA512 d065f6dc405771518260425f39a5eaaf8cab62e78c91ceed3b3994a9a121674d2484cadaaf816bdad89c87a40550d57b66a3d9de6618a7119a658301ce7e67d8
+DIST regex-1.12.2.crate 163843 BLAKE2B 4e36124886e35c2e06ecf3310c32f45bb80fff978a99509abd7d7eb6378f81123819470c227d5c234fd6e3bc7a8e7baa331ee0ed3137f9256c76cb32413ecb7f SHA512 c459657944679350369462c3c7686dcdf412597f75bc13c450a131bfceebfe2cd1e1d7f95f0f55b4aa16bfc1acb5c777f344fcfd6a5927aa76b8a2d7aa954d3c
+DIST regex-automata-0.4.13.crate 625250 BLAKE2B e8682eff5df93737430a783cd913265dd45a9692fc4623a956557cd7d6553f34eff731f6f3ec5fed5c0dc6b7f8f31236203ad9f459a998fede053d990d9faea6 SHA512 f76939dc573a88d17b4cf37fedfcdf95202171ca8607374a5c2bcdc515abd1ef9231376175c6cf11cc567eddda34e0c5f90ed1c592f2c5efbd1dee883954a932
DIST regex-automata-0.4.9.crate 618525 BLAKE2B ee3fc41c8c445be4c1aa3e5b19a3e61efd641b1a24e7a1ed55f837c1fba9c816272cb4645c13232b66b170bc7c413802928beb22e3891500141ad4ede65b60b0 SHA512 40bde0ec91cc27bc0c3fa237a37ecee5a1f023dbe006a999c5888f8f578ee2c4c64d9edfe1827546cea8e92ca3c10f8b4d494d81f3d0422b40d90bca9cf598d2
DIST regex-syntax-0.6.29.crate 299752 BLAKE2B 2408ebfe5f0dd6578c33f18e8ea9a0a7a84388420c5b67adcaedde477f3f67fb3e39ba9fab1f6892c7ae7fff754c4aca51314601529cabc6a8fc43af38a11f88 SHA512 28a58950d15df1f0ac4ff4185c05b535e8f5bf0b75f79fad24e40e17a02570d1c9bd9cfc919eed8756a1069bc489c5fdccfd04f6b8266c83e3412b7b4bdc262e
DIST regex-syntax-0.8.5.crate 357541 BLAKE2B fc6d125f7a8574c37d81c75cbfd447cbcff736f2d9991b19814ffc1a414ebc5b76e84fb8fd36c983b38e8e391d165cdd9047832b0d9100f0e1ba7085484b7db5 SHA512 549d8d130fea9ec0d5806126f57f31d433f50e9328c5532ad417c44bb5488ec0d20acb0983dbe54dabaa0b453cbea4533cf7baac7144df119e8f78dfe55c5ab8
+DIST regex-syntax-0.8.8.crate 359141 BLAKE2B db4a6a76dfd7d2619fffb7fddd8a82411afad16bc8b1a8501628e872c9b3e0a4fe71947a135900442590b944a623c5e9253e36bab865703bd5b5150aa2a65e51 SHA512 337ca84af81f2c5cd7d213e3ad96a1facba2917f135c4c1ef03571160d24e4ae47186ad07e421a7a4ff0baadbe95d34365e69400f3c36ef39ebeb3e7c14224e4
DIST relative-path-1.9.3.crate 22400 BLAKE2B c6bd04b060013de042079a741a864150632c02cdc493ca1cfd746bcc12f6ad903f8f0748ec68261c979d833089c0fc091f7c9da2b2936e8f75dad8d4638a7b10 SHA512 fd5c88d370865870570859a110245e009eba557225e4297783a606227b13b42abf0c7e69a4beb5093a5a9dabac1545afd988f4c831abe912c21ccd8013c30382
DIST rowan-0.15.16.crate 40571 BLAKE2B 291fe194ca9d69edc3178e857e5a29356b7cf37ef606102627ecf6cdcf58212d85d61699c50fdd2b3e85b6e1e9c77e38c724acefb7c1a35569113d3571c19fdb SHA512 2d435254821c3120f5299c8c375619786a91106dd30f132741a229865a6033c3c8163afd2532a5f58952e09df543e5003aa33d0e7814c08e519a88a03122d515
DIST rstest-0.26.1.crate 56940 BLAKE2B 0bf13628fc34acd579531ec0ae0b101ecfd05597d2450854b4c88c49235dbe2d73e4fe8cdbff5b38702b5c7e30dd89831f2d65cb20a9d9733525d2823a58c6d3 SHA512 36a8ac6a89a5edf3af7aefeb45980a4ffeeb3b6343a7d0140050ea12336d375d029425b72d941125ea5c6a329ca8d763a5c21d139964d1b9895a7498d5957fc3
DIST rstest_macros-0.26.1.crate 68256 BLAKE2B c502c49c156dcd5cf18dac7d89369e16ebc3f34bf058cc95aa7bdd247243e0e71dab61bcff098665aa8d6544320602d88ebfa90bdbbc5bd888a22de797001572 SHA512 cb8aa2bdc06ec1ee88abd128b796a6d35632b5f84fba85cadcf519e195a1f4834e0001e91e2c08bb2328c3bd346e20d8d25d5c8b7bc3750b39d8d7600fc45341
DIST rustc-hash-1.1.0.crate 9331 BLAKE2B 16ac56622897f47a06b661fb59a196b08d48e782ab87549c8bd5c6fe92f374c9bfd44dcb36588512bd9b6125c2fd79a12d648aaa308fd9694bcca3a7c1b49ac9 SHA512 84e673ea9b046f7b989d47f2c4505557fbd5de991e6fc9f56a03605d40e0b4ba5427cd566954890153cc033ccbec6c984306634571935bfe0d4cdfbe56f39544
DIST rustc_version-0.4.1.crate 12245 BLAKE2B 0ed627c560d88e5ade830cc5f72c62f6ba88be3e30d0f8db34761fcd0b284e5b2fc063c240149aabdfb12c8410ecdbe50cb10a3544500b5a020f95a31cd6709c SHA512 7aa8a487ca7411b6d23cae62f7568fa3474a7b1fd1589621071be3428a550ed3b7c4ad68277a8f86849e5900397d7d0e9d678f5d423742a045dc7c660fa6c598
+DIST rustversion-1.0.22.crate 21096 BLAKE2B cdf773cda21ebde50da897c0af0e4af14660ce953d3037054a99d8adc3db2dc6e30a57201a45676abfb183c62016a68069848e7537f711b1752339d194b0a378 SHA512 7929352df3e5279ac88cebb26ca89bb13c755f46986d2d1f514d18a3239a63638bf64f8ff153920569d173185d988d692ee676335afba0bf72d47f71babe0e15
DIST ryu-1.0.20.crate 48738 BLAKE2B b126085448cb58639a7b5867fe313dcaabaf19df478f67fcb6cf15b8e881a21e641878345e0bf1fea7d24b56b921e667fd26a39cb81fca7ea02585332068263f SHA512 329c581429d9b8baa7d9edd9cf20e23fb8002f339d9fb3d50ed4c7eb68fb19c1ba966d52a9c9602265ca5f59f2bd4393ddcb3a7ac20c64aee3096e137eb2a384
DIST semver-1.0.26.crate 31303 BLAKE2B f99e282e2bc7844a451a4f600308840c4a96dfe032fad6e897e9ce66c8b5ee44ace8f94f93dc50a53792c8c485fa81dfa5477255c211017f06937212d9473dca SHA512 2d2c5edd771b67a9e32664255cc4c4eea8c9a6a4ab08a8ed968a493db70774b393ae98e20be0a87ff60149b7c142a01acc0ace28205b41b39320d63fd5dc6155
DIST serde-1.0.219.crate 78983 BLAKE2B 7e9542a04c7f1aeff95b821245034368ff1721d98d7138bb1e0a99cdd6436dc37d69606308834fd33daaea3a1792409b3b2305b802433fa1d155816c55ca2a7d SHA512 0d3fe9a47af027d0d79499e60d940661dba6e29e8f0ce47d0db2ab722030d255aff637248af6f893a9c4224239733db09ffcdc6e1923a7177bfae55c98ebe769
diff --git a/dev-python/pyproject-fmt/pyproject-fmt-2.11.0.ebuild b/dev-python/pyproject-fmt/pyproject-fmt-2.12.1.ebuild
index eeb43897393a..cd91e8dc8aaa 100644
--- a/dev-python/pyproject-fmt/pyproject-fmt-2.11.0.ebuild
+++ b/dev-python/pyproject-fmt/pyproject-fmt-2.12.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2022-2025 Gentoo Authors
+# Copyright 2022-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -10,7 +10,7 @@ PYTHON_COMPAT=( python3_{10..14} )
RUST_MIN_VER="1.77.0"
CRATES="
ahash@0.8.12
- aho-corasick@1.1.3
+ aho-corasick@1.1.4
any_ascii@0.1.7
arc-swap@1.7.1
autocfg@1.4.0
@@ -35,7 +35,7 @@ CRATES="
hashbrown@0.15.3
heck@0.5.0
indexmap@2.9.0
- indoc@2.0.6
+ indoc@2.0.7
itertools@0.10.5
itoa@1.0.15
lexical-sort@0.3.1
@@ -43,7 +43,7 @@ CRATES="
log@0.4.27
logos-derive@0.12.1
logos@0.12.1
- memchr@2.7.4
+ memchr@2.7.6
memoffset@0.9.1
num-conv@0.1.0
once_cell@1.21.3
@@ -60,16 +60,17 @@ CRATES="
pyo3@0.26.0
quote@1.0.40
r-efi@5.2.0
- regex-automata@0.4.9
+ regex-automata@0.4.13
regex-syntax@0.6.29
- regex-syntax@0.8.5
- regex@1.11.1
+ regex-syntax@0.8.8
+ regex@1.12.2
relative-path@1.9.3
rowan@0.15.16
rstest@0.26.1
rstest_macros@0.26.1
rustc-hash@1.1.0
rustc_version@0.4.1
+ rustversion@1.0.22
ryu@1.0.20
semver@1.0.26
serde@1.0.219
@@ -119,10 +120,10 @@ LICENSE+="
|| ( Apache-2.0 Boost-1.0 )
"
SLOT="0"
-KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~s390 ~sparc x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
RDEPEND="
- ~dev-python/toml-fmt-common-1.0.1[${PYTHON_USEDEP}]
+ ~dev-python/toml-fmt-common-1.2.0[${PYTHON_USEDEP}]
"
# tox is called as a subprocess, to get targets from tox.ini
BDEPEND="
diff --git a/dev-python/rich-click/Manifest b/dev-python/rich-click/Manifest
index 8ede8f36b605..e2bdd50be909 100644
--- a/dev-python/rich-click/Manifest
+++ b/dev-python/rich-click/Manifest
@@ -2,3 +2,4 @@ DIST rich-click-1.8.9.gh.tar.gz 8142387 BLAKE2B de7aa54989747d47c2d147cec8235c46
DIST rich-click-1.9.4.gh.tar.gz 8523687 BLAKE2B d4e4d192334d511494ffd76ba7a05337deabe820afd80524e010ba58f78862fea7048323acd87a2ef7177366353a96a1575950d3ad0d5676930d48887c1381ef SHA512 c42751ef91c5877c2082b466da1743e9adba5215af7a0f93755d955db18e57276522f10ea4cc3c74e2b25457e0d042edb6533dea6d7f933dd15deb3b74f3b5d3
DIST rich-click-1.9.5.gh.tar.gz 8523814 BLAKE2B fe5649b89694992331ccdcaa703b9391d70d4dd5126f3dd1617071206f978b26196319f0e63d2cec858afd0c2b3dce935c5bf991d1b364606d1ebc64d2c67c04 SHA512 5f7c35d3c6471cd67653b209bcf546d05634574b39b02497188f90e15fc2041f301f20061db9904d764b1aaeab1094f297f88ea1b217cb5dacfdf956b6c036e7
DIST rich-click-1.9.6.gh.tar.gz 8525442 BLAKE2B 10726285043f835f5869211cd9283237e375a585ca1f063d54deb60cfe54768bf117570e0a01382b82987aa8840f779a99ab1e5dce2fedeab035df2a6baf7e71 SHA512 b9903340f1ed5666974c95ac66f08a6d6e38fd8912fe53b3ff792c1344bd7370468237bc9c74ec7ba73e14da4f6641b84912198d5743fd41361fc22094116570
+DIST rich-click-1.9.7.gh.tar.gz 8525444 BLAKE2B bba361d7dbafe5bd22f3dfb5e49530ff9366f05030c55c1260b194537fd19986c2bd0aeb73d9e4d9688e2d44f7d33ae94219e8bd760986ebdb30e482d6a4ede0 SHA512 2dc2863b1f8c8a88a4d93adf963237ffbb3393123163615feaee3a61629f8ef5ceeff0535cda07a80ba653568a4f6c60752b9cc3c4ef51844e5e45caa872e9ef
diff --git a/dev-python/rich-click/rich-click-1.9.7.ebuild b/dev-python/rich-click/rich-click-1.9.7.ebuild
new file mode 100644
index 000000000000..b9af51ba3258
--- /dev/null
+++ b/dev-python/rich-click/rich-click-1.9.7.ebuild
@@ -0,0 +1,41 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="Format click help output nicely with rich"
+HOMEPAGE="
+ https://pypi.org/project/rich-click/
+ https://github.com/ewels/rich-click/
+"
+SRC_URI="
+ https://github.com/ewels/${PN}/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64"
+
+RDEPEND="
+ >=dev-python/click-8[${PYTHON_USEDEP}]
+ >=dev-python/rich-12[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ >=dev-python/packaging-25[${PYTHON_USEDEP}]
+ >=dev-python/typer-0.15[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( inline-snapshot )
+distutils_enable_tests pytest
+
+python_test() {
+ epytest -o addopts=
+}
diff --git a/dev-python/toml-fmt-common/Manifest b/dev-python/toml-fmt-common/Manifest
index d644711049e5..f07ca1a42917 100644
--- a/dev-python/toml-fmt-common/Manifest
+++ b/dev-python/toml-fmt-common/Manifest
@@ -1,3 +1,3 @@
-DIST toml_fmt_common-1.0.1.tar.gz 9626 BLAKE2B 460e7849dea995bbb1eedbbe2f65bd6401b31d19cfc20bebd8a82c6b4877b64174e1623c4cf649f499b7138141914078a4e0f595374eb4bb3ef423da3f0f934a SHA512 d4e693dd9f3ec0124de6f0006a209bb6f9f62365c16f71033a374a837636f2f744e359aaaed4b42e05a27d8a5e674712b7db2c07a8e93b899b5cd51005d7c525
DIST toml_fmt_common-1.1.0.tar.gz 9643 BLAKE2B 346139038c34229e9cda6c38fc2c881abe9f926d59d516abd785006f5d1d95b1e8f61a2229413a34f441024db36a904a625571a0b88c736f7cd4ee56584e693f SHA512 ec1e39b1ac47593ae6e72a6e74ebe192c410e9f440511343079e7407435a75e43f1e59db07504fa29e586803d851a763a82db4730428cf826a038d8b54c2f14c
DIST toml_fmt_common-1.2.0.tar.gz 9735 BLAKE2B e1fb4d1de2cfd75bc4a8f903d25f16fed9c85dfa456b583f401f719d7bb43d64a8948dfcc7d4e358e391401d82800dabea3af497b4cc1b83f867a949981328f9 SHA512 00268bab8ef4f9dc8dc8ce9a456de568e8d17e60fc62780bd72609c4feeb95a0db9d81761bd03ff0529b4934fa021557f60fa89240180f9defb01258ca167d50
+DIST toml_fmt_common-1.2.0.tar.gz.provenance 9375 BLAKE2B c2d3f591c937792e6cb57d2c9a0714e4238fa9b79bf38cb8cee17c36e2059d3f629423707fc928862cefc6732c3ab81492533e5587df4e49ea0fa24e17470cbc SHA512 fce08940c3f521dd899484d2a46fa5bb0a6a8af845a5d4c4c56a2c4d8b3cabf407bb5dec11a67787b99d0cb2a4156ba14d4aa2b3809e07e1ceedab45db3b4a98
diff --git a/dev-python/toml-fmt-common/toml-fmt-common-1.0.1.ebuild b/dev-python/toml-fmt-common/toml-fmt-common-1.0.1.ebuild
deleted file mode 100644
index d51bc187f649..000000000000
--- a/dev-python/toml-fmt-common/toml-fmt-common-1.0.1.ebuild
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2024-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=hatchling
-PYTHON_COMPAT=( python3_{10..14} )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="Common logic to the TOML formatter"
-HOMEPAGE="
- https://github.com/tox-dev/toml-fmt-common/
- https://pypi.org/project/toml-fmt-common/
-"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~s390 ~sparc x86"
-
-BDEPEND="
- dev-python/hatch-vcs[${PYTHON_USEDEP}]
- test? (
- dev-python/pytest-mock[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
diff --git a/dev-python/toml-fmt-common/toml-fmt-common-1.2.0.ebuild b/dev-python/toml-fmt-common/toml-fmt-common-1.2.0.ebuild
index 4fc89ff89f68..13e0614ba016 100644
--- a/dev-python/toml-fmt-common/toml-fmt-common-1.2.0.ebuild
+++ b/dev-python/toml-fmt-common/toml-fmt-common-1.2.0.ebuild
@@ -4,6 +4,7 @@
EAPI=8
DISTUTILS_USE_PEP517=hatchling
+PYPI_VERIFY_REPO=https://github.com/tox-dev/toml-fmt-common
PYTHON_COMPAT=( python3_{10..14} )
inherit distutils-r1 pypi
diff --git a/dev-python/wcwidth/Manifest b/dev-python/wcwidth/Manifest
index 98df3c608c88..f0e9a91295e5 100644
--- a/dev-python/wcwidth/Manifest
+++ b/dev-python/wcwidth/Manifest
@@ -5,3 +5,4 @@ DIST wcwidth-0.3.2.tar.gz 233633 BLAKE2B c342a44c7a7419c6d225dd4b567139ad162b355
DIST wcwidth-0.4.0.tar.gz 237625 BLAKE2B 4bbbbb93b7742b435d7c835601788d86ac383ee2cae9f55a344690fc24d94d8f636aa08e0b92307abcffdef805f93f5490324d72158b38ad5ea39e5a0e0e7210 SHA512 fb8e22359098c6a0281669d01dbad98741a7a60c72420288efe731b211ebdaf12bd0f49e943c20b5bf2a26af074e39354e7b629e4cb6a43a27333aa64e80a546
DIST wcwidth-0.5.0.tar.gz 246585 BLAKE2B fa18ed5474efdcb96d2da23efdb123bb22a3bf0cda3e85065898c6e3dcec7d2fcf1c2a6589080182fd72bed94d086bfc38a3f913feb34c187563de206e26ebef SHA512 0ef0c4a5e3de2496f3cab9da69e6e80dc9e3d6770aaa1735909769ff4ceaf1901dbd31f4565c5fca156f1f554d90398e7e10aee3b1cbd98b8ea150c093935ab7
DIST wcwidth-0.5.2.tar.gz 152817 BLAKE2B 80d091d2b9102735fd89de600f0adc4a4d386dc24282b18a36dd914203cc81ffaf0d88faa9f77e3c29339db24f746c7e87da31ec18e386909701d81b94ecd7ef SHA512 7782b383492c2f6fb3a520ab7a74104e256fb7ba1c7852470d05e85b82a1c4661928739c94a4893736b645b89227f3be2addf7cec9b228fcf5c99fedeb216b77
+DIST wcwidth-0.5.3.tar.gz 157587 BLAKE2B fc03fd0445cff121ae9049e3bf8df429f734a41a449db557cf4607af4eaa6e35d39d3eaf1db066312f7e2aef8e7d9582b182b670743af03295a6b4dd2a857484 SHA512 7537cf6493fc7b2998d0a5f7a3b093fd8e8916e6e39df6932a815d6547b970472a5cc37cb82ba3a2f6c40912c483ed21203fa7b30eafdeec93a51902e3f370aa
diff --git a/dev-python/wcwidth/wcwidth-0.5.3.ebuild b/dev-python/wcwidth/wcwidth-0.5.3.ebuild
new file mode 100644
index 000000000000..93cfddfcb5d7
--- /dev/null
+++ b/dev-python/wcwidth/wcwidth-0.5.3.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Measures number of Terminal column cells of wide-character codes"
+HOMEPAGE="
+ https://pypi.org/project/wcwidth/
+ https://github.com/jquast/wcwidth/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_test() {
+ epytest -o addopts=
+}
+
+python_install_all() {
+ docinto docs
+ dodoc docs/intro.rst
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/wrapt/Manifest b/dev-python/wrapt/Manifest
index debbf55f29d0..9b6d47277806 100644
--- a/dev-python/wrapt/Manifest
+++ b/dev-python/wrapt/Manifest
@@ -1,4 +1,5 @@
DIST wrapt-1.17.3.gh.tar.gz 140900 BLAKE2B 88c4cd718cd98a97c866c4f0b9f7e095347fe6fa5fed60c54e389329c89f9f07099c8fb79561cf5e12c19c44a4067d81e805c55b54a74429e6b75913dedd6b3f SHA512 1a1f7419f20faa461a9e23ad09cc98d381ef2c48b3b24ed1dfe98d42d16857a958252301e78dd41b7fa8ef37eea379f9244cace2b396b49718c44cbc701308a3
DIST wrapt-2.0.0.gh.tar.gz 183430 BLAKE2B 63a9a28cf2b757c1778c55205509eb0dd1b1cec670d8495db1f8ae3ae0a89166f7c40ca73cdf52c1b5b7a7ab499fae540aa1bc6966c52a8319834ca050d19946 SHA512 bd9386946b4e09bdfde42fefb075310d881d8a98ab5194f20244716703db1015f0aed29bddc6d30ffbe55e1ed54c11110b26f57db536fab97f89dc0c02150b3d
DIST wrapt-2.0.1.gh.tar.gz 184792 BLAKE2B 127b42113031a8284a72e49e0e4a737754ecd2dc6dc41628154c0c9c5d092f81c67e30339ca8b740f6d26f94bdbebc9a6c43c75b9e12dc1ff86431b003d6d0ad SHA512 ff7a69e7c2454f33f0f631f408013242a0292b28a8a601e981cef9b8c997b5769305bfb6b68b2504e96a1d2181d8e9aa48b25a159178f73906b53e527a00cbc5
+DIST wrapt-2.1.0.gh.tar.gz 183579 BLAKE2B 086cd80794abd3ba2cda04b1cca1f8e6e09e0c3ad6afdd852f174bcb1c6196d1603f15fe08f1f18600dbbed025a8341cb6be16c2d84469e05d9fd10b9dd3868b SHA512 7faea2c7df3be93ae0b28b62a03cb0d95e9120e6d0fe7ddeb1d8fe5081686ad76d0a5e80cd1ed75209eb17e8aea1c777b9ad66af6a34436bc0f8cbe53529d2f3
DIST wrapt-2.1.0rc1.gh.tar.gz 183560 BLAKE2B 154d1b29a41ef5c180c33df2b6e5331fe5c4526d28c3a4a3f7a287a865ba7bf228fbc964b34b3f09c00bdb99ac1e339316d263ec5e6e842c0916fc64ee9152b5 SHA512 0996e211f5853612d6daee8bbab3df3b45e6e41e88ff507696d194b223f01af3b5118f9dcd35ef5a4755af9833dc5d7b6ea96fea68958004417d190298fe44cc
diff --git a/dev-python/wrapt/wrapt-2.1.0.ebuild b/dev-python/wrapt/wrapt-2.1.0.ebuild
new file mode 100644
index 000000000000..823530186a4e
--- /dev/null
+++ b/dev-python/wrapt/wrapt-2.1.0.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2026 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..14} )
+
+inherit distutils-r1
+
+MY_P=${P/_}
+DESCRIPTION="Module for decorators, wrappers and monkey patching"
+HOMEPAGE="
+ https://github.com/GrahamDumpleton/wrapt/
+ https://pypi.org/project/wrapt/
+"
+SRC_URI="
+ https://github.com/GrahamDumpleton/wrapt/archive/${PV/_}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="BSD"
+SLOT="0"
+if [[ ${PV} != *_rc* ]]; then
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+fi
+IUSE="+native-extensions"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+distutils_enable_sphinx docs dev-python/sphinx-rtd-theme
+
+python_compile() {
+ local -x WRAPT_INSTALL_EXTENSIONS=$(usex native-extensions true false)
+ distutils-r1_python_compile
+}
diff --git a/dev-python/zenlib/Manifest b/dev-python/zenlib/Manifest
index 247a51dd79fa..3cb1c434709b 100644
--- a/dev-python/zenlib/Manifest
+++ b/dev-python/zenlib/Manifest
@@ -1 +1,2 @@
DIST zenlib-3.1.5.gh.tar.gz 23230 BLAKE2B 900cc0dbdb087d0d294027747eed046dee452ac7dd15cb572ff769e148e07478a5030f8412fdbebcf89db17c6e06df5368fe28ff1df983723e068b9005cba6ce SHA512 2ece8426ab169e77e14c27c86b4d0d5dab7a0318a9a264a255db102d4f882d1297ac6f8de23b8e80c6ab0d7fbfc0998a08f04eab53bad007efd39171f45b8089
+DIST zenlib-3.2.0.gh.tar.gz 24540 BLAKE2B 8c558391a87877761d69bebd0b557523f68adf7205940a5fa7354e261ce6fba9aa81f8b5f95c1eb6bc74ad8b2267a646e6382bd2478fa885fcb0fa22d97eddac SHA512 1754a5fde2c2535e712fda6da7b98eab01a39735530a2621e7ff5c78bb920ea6cc5db1549f074625eb251d8ffa9f9f62ea5af71dd97fb52ba2317598e665ed01
diff --git a/dev-python/zenlib/zenlib-3.2.0.ebuild b/dev-python/zenlib/zenlib-3.2.0.ebuild
new file mode 100644
index 000000000000..16297794e19b
--- /dev/null
+++ b/dev-python/zenlib/zenlib-3.2.0.ebuild
@@ -0,0 +1,26 @@
+# Copyright 2023-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="Useful python decorators and utilities"
+HOMEPAGE="https://github.com/desultory/zenlib/"
+SRC_URI="
+ https://github.com/desultory/zenlib/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
+
+distutils_enable_tests unittest
+
+python_test() {
+ CI=true eunittest tests # Set CI=true to disable namespace module tests and imports
+}
diff --git a/dev-python/zenlib/zenlib-9999.ebuild b/dev-python/zenlib/zenlib-9999.ebuild
index 61d2c454f8d4..1e7fb15a6b01 100644
--- a/dev-python/zenlib/zenlib-9999.ebuild
+++ b/dev-python/zenlib/zenlib-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2023-2025 Gentoo Authors
+# Copyright 2023-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8