summaryrefslogtreecommitdiff
path: root/dev-lang
diff options
context:
space:
mode:
authorCrucible <crucible@localhost>2026-10-15 17:23:01 -0500
committerCrucible <crucible@localhost>2026-10-15 17:23:01 -0500
commit5087f37a4d9063896fce9cf625aa2479bc540b94 (patch)
treeba40439cb50c33940edaf2c7ea4801889a838fed /dev-lang
parent12d66102ecbcb4a4eef51d1b7f06abe9080be243 (diff)
downloadsrcux-5087f37a4d9063896fce9cf625aa2479bc540b94.tar.gz
srcux-5087f37a4d9063896fce9cf625aa2479bc540b94.tar.xz
srcux-5087f37a4d9063896fce9cf625aa2479bc540b94.zip
Publish srcux candidate 0000000660-20261015-172104
Diffstat (limited to 'dev-lang')
-rw-r--r--dev-lang/pypy/Manifest6
-rw-r--r--dev-lang/pypy/pypy-2.7.8.0.0-r1.ebuild316
-rw-r--r--dev-lang/pypy/pypy-2.7.8.0.1.ebuild316
-rw-r--r--dev-lang/pypy/pypy-3.11.8.0.1.ebuild236
-rw-r--r--dev-lang/pypy/pypy-3.12.8.0.1.ebuild235
-rw-r--r--dev-lang/pypy3-exe-bin/Manifest16
-rw-r--r--dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.11.8.0.1.ebuild78
-rw-r--r--dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.12.8.0.1.ebuild78
-rw-r--r--dev-lang/pypy3-exe/Manifest4
-rw-r--r--dev-lang/pypy3-exe/pypy3-exe-3.11.8.0.1.ebuild133
-rw-r--r--dev-lang/pypy3-exe/pypy3-exe-3.12.8.0.1.ebuild133
11 files changed, 1551 insertions, 0 deletions
diff --git a/dev-lang/pypy/Manifest b/dev-lang/pypy/Manifest
index 966eab69b6f6..43a0755a3683 100644
--- a/dev-lang/pypy/Manifest
+++ b/dev-lang/pypy/Manifest
@@ -1,10 +1,16 @@
DIST pypy2.7-gentoo-patches-7.3.23.tar.xz 5316 BLAKE2B 923494c49ef09b1929ba1986891a08f23e4343c44eac792a688ac88b48d21770101ca50fcdf3986c686adefb24fbf58aef674ec608feea775984ab8a16385cb6 SHA512 c1d07caef19b77cb4950d56c1de8079900fc21728061f8620210932d2cd85f701407ce7b9947d2ef044211d1ffe8b77ce445da3c5aef69321b45e7ab8550dee3
DIST pypy2.7-gentoo-patches-8.0.0.tar.xz 988 BLAKE2B 6bd236da38a45c50891758f6446fa70c81358141b8904062d2d1e27a7a938ee970c592108a081c8e9c83c869415b235e0202eae93ccf8d050866567976ed1fcd SHA512 a365d070448374777e7b2a7f5f7226e7ade89fd427c44b01f1cd8acaa215095de91a85321f9ca8283d04ed1d9aeaa5d191f5b2e33e44a831e38912d56a7a970e
+DIST pypy2.7-gentoo-patches-8.0.1.tar.xz 2208 BLAKE2B 2251d777ac4b454fcbf8b179a2b14d172946986df5cb33de85fb0faec73756e93c7727f3f70e3f3b62b3219110ce34027ac38dfb31c216937e5f1c36e28d1b99 SHA512 d50c17ab3d3cb1207f2556229f592d66a0f6d6f7c61a8bdd2b7690303dd2fdc7ec5b9e7fbd0637ab93e6793b057b155d1b428d6663ee07ede78aa942159fbc42
DIST pypy2.7-v7.3.23-src.tar.bz2 21023543 BLAKE2B 7638e5aecd30d9c2c9ab22b1ab9a43331685885ee90ebfda8d2a88da34e4b0b998bd967eed30b309110b9d40b14df75f24a7e9219c7383b542602869ee1a12d9 SHA512 3750fc9c5309baa7627d00a77b4b2b1e0d755b75841acd0fcee484bc332f1e9ed9c1f33d2f4800777f20ea8849356f39c84167f96b9ebfdd7e479798d62eac06
DIST pypy2.7-v8.0.0-src.tar.gz 21312909 BLAKE2B 5ee9800c5399b1af82fde2f729fc63f6523e345b070176c4c13c9bd2cc0537baa6d04875042d4bd96ecec0c3bc5e8e79c08add1443b9c99ae40d396b91178ef7 SHA512 e0ae52034b5e03d413c47e1ddd9a7bde3549c70b4519c1630367c314ebce58638af78d5936c89943de1907477eb4bec8c149d850836991af14a50c9e643dfa63
+DIST pypy2.7-v8.0.1-src.tar.gz 21696939 BLAKE2B 48fd3769a7d7ebfd851b2b577aa99b7bdfd0023bdec4e1168d184a2df9f43f96d4dd3ed2e08931c2a9c2ac3054725e3db65a3e41ffac3df13018349d648c32b5 SHA512 18455b0509117e742ee29dfe3b8ae4fbde6fa5ed9f8271c7220995775a4f570134809b62a1ff25402d1275aae67b8ec3bfc5bd80a83e95f0058ca18d0eb6f994
DIST pypy3.11-gentoo-patches-7.3.23.tar.xz 3096 BLAKE2B d0852f8c9f715359487e07f5c80c4f3ac48da7eb650fd328535c40d8ec6318cf4c9f4b08838e976e2f88723472a42ccfcaf61d3a1b4af8319a44b476202b8c05 SHA512 81d6bb2e25a387bfe805263e7ecfb927a2292824e03b58ff4942b52bf4057d13ddf5d7944f8ee2e6c1553bde5650ac5d7af8689ab586a33ab5c58e4565da126a
DIST pypy3.11-gentoo-patches-8.0.0.tar.xz 1392 BLAKE2B 1324f7a4f4950359b929835c1f0cfcb99022bf0098a0515a08ae24d811c2bdc5bd64e877d6c7e5b0b9dd33523c1b93f556bbec68c92fdad0670eb4e44a20c5b9 SHA512 c8e1a9eeb4ca44adb113477ce1bced9d3e3a7f693852dcc3b83b588b113fb1f1ca7a1c24151c31f321bdc763dd2fcdeea03031e3bb9d0d3f899ca083bc33df72
+DIST pypy3.11-gentoo-patches-8.0.1.tar.xz 2600 BLAKE2B e83fda134f8e77ed8f15067b6deba05d222661590484aec0578c5eaa29c342a58d74bca7a1a1c97b115ce9413dd91c9d305b8d53d653e4e77cf4b84ac5f4b050 SHA512 82b8bc380087432870eefb09b3369c4483c92855f4511e45fe166df54ff1e97905a5687000b9fcbaad6aac28714e2eef6ea43dead6a839472974d3852ac3dd48
DIST pypy3.11-v7.3.23-src.tar.bz2 25005650 BLAKE2B d0976c47fb04d1c96d7b4c1202ba43e586c8585f0c770c313c61407dc9c91245b6d4b07371d004646f43765f997f1deadcd938033bcc3429d848af63dbc75714 SHA512 4351cf30227af06ece5d69fe86a17355eadf2dcdbddf8119c04a720a4f9f388c6ae45a3496feb623950fb4a4a9f70c1910502adb325a12b1b0e34a7ba35563c2
DIST pypy3.11-v8.0.0-src.tar.gz 25897899 BLAKE2B 80e41af342fde7676990b1ea7aa689fcbbe5000d59cc41dc112597dba9f20a7ba5d1dd09feef130b78fa62f91fdf92c212ae9d796ecb3ea863983ff70b672398 SHA512 3e29f2bc76dc2db6d2409d580299c16e54927c1d7f06d697c0550d55a6fec2570e41f283d72730a19ad9166121a01cc5e380c33858a86b96356d4fd9d1780ade
+DIST pypy3.11-v8.0.1-src.tar.gz 26304747 BLAKE2B 23aaa53b40f20a3dec88412bb7c8a6abd73d92e7a3cf08193691c5d9e1cc26fcb16feb8d1b937782654cc3d5d1e25e79240aae7c3166945baba8a8fb21e0be35 SHA512 63ee2790bef7b165615cada25ae444a293f7b99dafc135f9714c029b31a14c89f6d5fe6e09e11e7d720ad25cf6544528e98e1da8f375ec49ba45ca009fe3410a
DIST pypy3.12-gentoo-patches-8.0.0.tar.xz 1876 BLAKE2B e9754805a5ddd980d299bb653f8fac58140a1f75c165c4309cd648d7fec63d3c6225673132bf641189dd501bab11263fa29723482bf7a13ca81700e090cca1bd SHA512 933eabf8a0e508e06c31514e9cae219877969ad0c41fd8d1307698714834efdcc7991341f71cab900b71b8fd6cf6af80e51f9b417b2081af52f6dab859eac1ba
+DIST pypy3.12-gentoo-patches-8.0.1.tar.xz 2592 BLAKE2B 2aff55d9110ddbbc4ed47c3389f322eee0679478ee83cda1fca45edffac4659839a168437a01def0e58449e39611b115a41f186307b6f9b9d8dfb961781aaa4a SHA512 39708af70b9dc31289191d6984164f82609e4b755e8bf57606497264eb946447869984c893d989f26afa621c72a6f263e97fb91778e19deca9d9aec253f207b1
DIST pypy3.12-v8.0.0-src.tar.gz 25838522 BLAKE2B cfff5bf17a47ab308d27f935e82d13afdda43d817f7a0b3fd842f6ffaf8a75a35c3df4e3be62c6d520928878330328e93ea86d73d245ded28ce12c04286ae6ab SHA512 7eb576fdec8d46e5889dd265951ad49985c7d25ff1f998be83d8f34a011bd2369e00f1e48f93767bcb503b92849d549ce41c97338d65708da42b9833aefb8a2f
+DIST pypy3.12-v8.0.1-src.tar.gz 26249138 BLAKE2B aa12063d61252339727168983a9fca69ded8df3494ef3f84766890918428ee5eaee2418078c0a44c262a3a6955179b1dc7e1ccb398b13658bfdf863f5239aa5a SHA512 bb60f8107079188b9214907c1bdd8d8aebb912cf4beb55f6c8cf80e16029d5e677f18a2f13d3fe3bd11676944e8dca7335a0f52ae1d47dec9b6b4312ac6c1604
diff --git a/dev-lang/pypy/pypy-2.7.8.0.0-r1.ebuild b/dev-lang/pypy/pypy-2.7.8.0.0-r1.ebuild
new file mode 100644
index 000000000000..8ff14aa6694e
--- /dev/null
+++ b/dev-lang/pypy/pypy-2.7.8.0.0-r1.ebuild
@@ -0,0 +1,316 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit pax-utils toolchain-funcs
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PATCHSET_PV/_rc/rc}"
+
+DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.gz
+ https://distfiles.gentoo.org/pub/proj/python/patchsets/pypy${PYVER}/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+# pypy -c 'import sysconfig; print sysconfig.get_config_var("SOABI")'
+SLOT="${PYVER}/pypy-80"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE="bzip2 full-stdlib gdbm +jit ncurses sqlite tk"
+RESTRICT="test"
+
+RDEPEND="
+ || (
+ >=dev-python/pypy-exe-bin-${PYPY_PV}:${PYPY_PV}
+ >=dev-python/pypy-exe-${PYPY_PV}:${PYPY_PV}[bzip2?,ncurses?]
+ )
+ dev-libs/openssl:0=
+ gdbm? ( sys-libs/gdbm:0= )
+ sqlite? ( dev-db/sqlite:3= )
+ tk? (
+ dev-lang/tk:0=
+ dev-tcltk/tix:0=
+ )
+ !dev-python/pypy
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ default
+}
+
+src_configure() {
+ tc-export CC
+}
+
+src_compile() {
+ # copy over to make sys.prefix happy
+ cp -p "${BROOT}/usr/lib/pypy${PYVER}/pypy-c-${PYPY_PV}" pypy-c || die
+ cp -p "${BROOT}/usr/lib/pypy${PYVER}/include/${PYPY_PV}"/* include/ || die
+ # (not installed by pypy)
+ rm pypy/module/cpyext/include/_numpypy/numpy/README || die
+ mv pypy/module/cpyext/include/* include/ || die
+ mv pypy/module/cpyext/parse/*.h include/ || die
+ pax-mark m pypy-c
+
+ # verify the subslot
+ local soabi=$(
+ ./pypy-c - <<-EOF
+ import sysconfig
+ print sysconfig.get_config_var("SOABI")
+ EOF
+ )
+ [[ ${soabi} == ${SLOT#*/} ]] || die "update subslot to ${soabi}"
+
+ einfo "Generating caches and CFFI modules ..."
+
+ if use full-stdlib; then
+ # Generate Grammar and PatternGrammar pickles.
+ ./pypy-c - <<-EOF || die "Generation of Grammar and PatternGrammar pickles failed"
+ import lib2to3.pygram
+ import lib2to3.patcomp
+ lib2to3.patcomp.PatternCompiler()
+ EOF
+
+ # Generate cffi modules
+ # Please keep in sync with pypy/tool/build_cffi_imports.py!
+ cffi_targets=( pypy_util ssl audioop syslog pwdgrp resource )
+ use gdbm && cffi_targets+=( gdbm )
+ use ncurses && cffi_targets+=( curses )
+ use sqlite && cffi_targets+=( sqlite3 )
+ use tk && cffi_targets+=( tkinter/tklib )
+
+ local t
+ # all modules except tkinter output to .
+ # tkinter outputs to the correct dir ...
+ cd lib_pypy || die
+ for t in "${cffi_targets[@]}"; do
+ # tkinter doesn't work via -m
+ ../pypy-c "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
+ done
+
+ # Verify that CFFI module list is up-to-date
+ local expected_cksum=-7df4eab0
+ local local_cksum=$(
+ ../pypy-c - <<-EOF
+ import binascii
+ import json
+ from pypy_tools.build_cffi_imports import cffi_build_scripts as x
+ print("%08x" % (binascii.crc32(json.dumps(x)),))
+ EOF
+ )
+ if [[ ${local_cksum} != ${expected_cksum} ]]; then
+ die "Please verify cffi_targets and update checksum to ${local_cksum}"
+ fi
+
+ # Cleanup temporary objects
+ find -name "_cffi_*.[co]" -delete || die
+ find -type d -empty -delete || die
+ fi
+}
+
+src_test() {
+ # (unset)
+ local -x PYTHONDONTWRITEBYTECODE=
+ local -x COLUMNS=80
+
+ local ignored_tests=(
+ # network
+ --ignore=lib-python/${PYVER}/test/test_urllibnet.py
+ --ignore=lib-python/${PYVER}/test/test_urllib2net.py
+ # lots of free space
+ --ignore=lib-python/${PYVER}/test/test_zipfile64.py
+
+ # broken by expat-2.4.5
+ --ignore=lib-python/${PYVER}/test/test_minidom.py
+ --ignore=lib-python/${PYVER}/test/test_xml_etree.py
+ --ignore=lib-python/${PYVER}/test/test_xml_etree_c.py
+ )
+
+ ./pypy-c ./pypy/test_all.py --pypy=./pypy-c -vv \
+ "${ignored_tests[@]}" lib-python || die
+}
+
+src_install() {
+ local dest="/usr/lib/pypy${PYVER}"
+ einfo "Installing PyPy ..."
+ dosym "pypy-c-${PYPY_PV}" "${dest}/pypy-c"
+ insinto "${dest}"
+ # preserve mtimes to avoid obsoleting caches
+ insopts -p
+ if use full-stdlib; then
+ doins -r include lib_pypy lib-python
+
+ # replace copied headers with symlinks
+ for x in "${BROOT}/usr/lib/pypy${PYVER}/include/${PYPY_PV}"/*; do
+ dosym "${PYPY_PV}/${x##*/}" "${dest}/include/${x##*/}"
+ done
+
+ if ! use gdbm; then
+ rm -r "${ED}${dest}"/lib_pypy/gdbm.py \
+ "${ED}${dest}"/lib-python/*${PYVER}/test/test_gdbm.py || die
+ fi
+ if ! use sqlite; then
+ rm -r "${ED}${dest}"/lib-python/*${PYVER}/sqlite3 \
+ "${ED}${dest}"/lib_pypy/_sqlite3.py \
+ "${ED}${dest}"/lib-python/*${PYVER}/test/test_sqlite.py || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}${dest}"/lib-python/*${PYVER}/{idlelib,lib-tk} \
+ "${ED}${dest}"/lib_pypy/_tkinter \
+ "${ED}${dest}"/lib-python/*${PYVER}/test/test_{tcl,tk,ttk*}.py || die
+ fi
+ else
+ # install only the absolutely minimal subset of modules needed
+ # for pypy3 build
+ local lib_py_modules=(
+ # base modules needed to even start pypy (and import site)
+ __future__.py
+ codecs.py
+ copy_reg.py
+ encodings
+ genericpath.py
+ linecache.py
+ os.py
+ pkgutil.py
+ posixpath.py
+ re.py
+ runpy.py
+ site.py
+ sre_compile.py
+ sre_constants.py
+ sre_parse.py
+ stat.py
+ string.py
+ sysconfig.py
+ traceback.py
+ warnings.py
+ UserDict.py
+
+ # needed for python_optimize
+ compileall.py
+ getopt.py
+ py_compile.py
+ struct.py
+
+ # needed for rpython
+ argparse.py
+ atexit.py
+ base64.py
+ bdb.py
+ bisect.py
+ cmd.py
+ code.py
+ codeop.py
+ collections.py
+ colorsys.py
+ contextlib.py
+ copy.py
+ ctypes
+ dis.py
+ fnmatch.py
+ functools.py
+ gettext.py
+ hashlib.py
+ heapq.py
+ inspect.py
+ io.py
+ json
+ keyword.py
+ locale.py
+ logging
+ new.py
+ opcode.py
+ optparse.py
+ pdb.py
+ pickle.py
+ platform.py
+ pprint.py
+ random.py
+ repr.py
+ shlex.py
+ shutil.py
+ StringIO.py
+ subprocess.py
+ tempfile.py
+ textwrap.py
+ threading.py
+ tokenize.py
+ uuid.py
+ weakref.py
+ zipfile.py
+ )
+
+ local distutils_modules=(
+ # needed by site
+ __init__.py
+ errors.py
+ sysconfig.py
+ sysconfig_cpython.py
+ sysconfig_pypy.py
+ )
+
+ local lib_pypy_modules=(
+ # needed by site
+ _sysconfigdata.py
+
+ # needed by rpython
+ cffi
+ _ctypes
+ _ffi.py
+ _functools.py
+ _sha.py
+ _sha256.py
+ _sha512.py
+
+ # NB: we're deliberately skipping _hashlib to avoid some deps
+ )
+
+ cd "lib-python/${PYVER}" || die
+ insinto "${dest}/lib-python/${PYVER}"
+ doins -r "${lib_py_modules[@]}"
+ cd - >/dev/null || die
+
+ cd "lib-python/${PYVER}/distutils" || die
+ insinto "${dest}/lib-python/${PYVER}/distutils"
+ doins -r "${distutils_modules[@]}"
+ cd - >/dev/null || die
+
+ cd lib_pypy || die
+ insinto "${dest}/lib_pypy"
+ doins -r "${lib_pypy_modules[@]}"
+ cd - >/dev/null || die
+ fi
+
+ dosym "../lib/pypy${PYVER}/pypy-c" /usr/bin/pypy
+ dodoc README.rst
+
+ local -x PYTHON="${ED}${dest}/pypy-c-${PYPY_PV}"
+ # temporarily copy to build tree to facilitate module builds
+ cp -p "${BROOT}${dest}/pypy-c-${PYPY_PV}" "${PYTHON}" || die
+
+ einfo "Byte-compiling Python standard library..."
+ "${PYTHON}" -m compileall \
+ -x 'bad_coding|badsyntax|make_ssl_data|lib2to3/tests/data' \
+ -q -f -d "${dest}" "${ED}/${dest}" || die
+
+ # remove to avoid collisions
+ rm "${PYTHON}" || die
+}
diff --git a/dev-lang/pypy/pypy-2.7.8.0.1.ebuild b/dev-lang/pypy/pypy-2.7.8.0.1.ebuild
new file mode 100644
index 000000000000..8ff14aa6694e
--- /dev/null
+++ b/dev-lang/pypy/pypy-2.7.8.0.1.ebuild
@@ -0,0 +1,316 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit pax-utils toolchain-funcs
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PATCHSET_PV/_rc/rc}"
+
+DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.gz
+ https://distfiles.gentoo.org/pub/proj/python/patchsets/pypy${PYVER}/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+# pypy -c 'import sysconfig; print sysconfig.get_config_var("SOABI")'
+SLOT="${PYVER}/pypy-80"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE="bzip2 full-stdlib gdbm +jit ncurses sqlite tk"
+RESTRICT="test"
+
+RDEPEND="
+ || (
+ >=dev-python/pypy-exe-bin-${PYPY_PV}:${PYPY_PV}
+ >=dev-python/pypy-exe-${PYPY_PV}:${PYPY_PV}[bzip2?,ncurses?]
+ )
+ dev-libs/openssl:0=
+ gdbm? ( sys-libs/gdbm:0= )
+ sqlite? ( dev-db/sqlite:3= )
+ tk? (
+ dev-lang/tk:0=
+ dev-tcltk/tix:0=
+ )
+ !dev-python/pypy
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ default
+}
+
+src_configure() {
+ tc-export CC
+}
+
+src_compile() {
+ # copy over to make sys.prefix happy
+ cp -p "${BROOT}/usr/lib/pypy${PYVER}/pypy-c-${PYPY_PV}" pypy-c || die
+ cp -p "${BROOT}/usr/lib/pypy${PYVER}/include/${PYPY_PV}"/* include/ || die
+ # (not installed by pypy)
+ rm pypy/module/cpyext/include/_numpypy/numpy/README || die
+ mv pypy/module/cpyext/include/* include/ || die
+ mv pypy/module/cpyext/parse/*.h include/ || die
+ pax-mark m pypy-c
+
+ # verify the subslot
+ local soabi=$(
+ ./pypy-c - <<-EOF
+ import sysconfig
+ print sysconfig.get_config_var("SOABI")
+ EOF
+ )
+ [[ ${soabi} == ${SLOT#*/} ]] || die "update subslot to ${soabi}"
+
+ einfo "Generating caches and CFFI modules ..."
+
+ if use full-stdlib; then
+ # Generate Grammar and PatternGrammar pickles.
+ ./pypy-c - <<-EOF || die "Generation of Grammar and PatternGrammar pickles failed"
+ import lib2to3.pygram
+ import lib2to3.patcomp
+ lib2to3.patcomp.PatternCompiler()
+ EOF
+
+ # Generate cffi modules
+ # Please keep in sync with pypy/tool/build_cffi_imports.py!
+ cffi_targets=( pypy_util ssl audioop syslog pwdgrp resource )
+ use gdbm && cffi_targets+=( gdbm )
+ use ncurses && cffi_targets+=( curses )
+ use sqlite && cffi_targets+=( sqlite3 )
+ use tk && cffi_targets+=( tkinter/tklib )
+
+ local t
+ # all modules except tkinter output to .
+ # tkinter outputs to the correct dir ...
+ cd lib_pypy || die
+ for t in "${cffi_targets[@]}"; do
+ # tkinter doesn't work via -m
+ ../pypy-c "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
+ done
+
+ # Verify that CFFI module list is up-to-date
+ local expected_cksum=-7df4eab0
+ local local_cksum=$(
+ ../pypy-c - <<-EOF
+ import binascii
+ import json
+ from pypy_tools.build_cffi_imports import cffi_build_scripts as x
+ print("%08x" % (binascii.crc32(json.dumps(x)),))
+ EOF
+ )
+ if [[ ${local_cksum} != ${expected_cksum} ]]; then
+ die "Please verify cffi_targets and update checksum to ${local_cksum}"
+ fi
+
+ # Cleanup temporary objects
+ find -name "_cffi_*.[co]" -delete || die
+ find -type d -empty -delete || die
+ fi
+}
+
+src_test() {
+ # (unset)
+ local -x PYTHONDONTWRITEBYTECODE=
+ local -x COLUMNS=80
+
+ local ignored_tests=(
+ # network
+ --ignore=lib-python/${PYVER}/test/test_urllibnet.py
+ --ignore=lib-python/${PYVER}/test/test_urllib2net.py
+ # lots of free space
+ --ignore=lib-python/${PYVER}/test/test_zipfile64.py
+
+ # broken by expat-2.4.5
+ --ignore=lib-python/${PYVER}/test/test_minidom.py
+ --ignore=lib-python/${PYVER}/test/test_xml_etree.py
+ --ignore=lib-python/${PYVER}/test/test_xml_etree_c.py
+ )
+
+ ./pypy-c ./pypy/test_all.py --pypy=./pypy-c -vv \
+ "${ignored_tests[@]}" lib-python || die
+}
+
+src_install() {
+ local dest="/usr/lib/pypy${PYVER}"
+ einfo "Installing PyPy ..."
+ dosym "pypy-c-${PYPY_PV}" "${dest}/pypy-c"
+ insinto "${dest}"
+ # preserve mtimes to avoid obsoleting caches
+ insopts -p
+ if use full-stdlib; then
+ doins -r include lib_pypy lib-python
+
+ # replace copied headers with symlinks
+ for x in "${BROOT}/usr/lib/pypy${PYVER}/include/${PYPY_PV}"/*; do
+ dosym "${PYPY_PV}/${x##*/}" "${dest}/include/${x##*/}"
+ done
+
+ if ! use gdbm; then
+ rm -r "${ED}${dest}"/lib_pypy/gdbm.py \
+ "${ED}${dest}"/lib-python/*${PYVER}/test/test_gdbm.py || die
+ fi
+ if ! use sqlite; then
+ rm -r "${ED}${dest}"/lib-python/*${PYVER}/sqlite3 \
+ "${ED}${dest}"/lib_pypy/_sqlite3.py \
+ "${ED}${dest}"/lib-python/*${PYVER}/test/test_sqlite.py || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}${dest}"/lib-python/*${PYVER}/{idlelib,lib-tk} \
+ "${ED}${dest}"/lib_pypy/_tkinter \
+ "${ED}${dest}"/lib-python/*${PYVER}/test/test_{tcl,tk,ttk*}.py || die
+ fi
+ else
+ # install only the absolutely minimal subset of modules needed
+ # for pypy3 build
+ local lib_py_modules=(
+ # base modules needed to even start pypy (and import site)
+ __future__.py
+ codecs.py
+ copy_reg.py
+ encodings
+ genericpath.py
+ linecache.py
+ os.py
+ pkgutil.py
+ posixpath.py
+ re.py
+ runpy.py
+ site.py
+ sre_compile.py
+ sre_constants.py
+ sre_parse.py
+ stat.py
+ string.py
+ sysconfig.py
+ traceback.py
+ warnings.py
+ UserDict.py
+
+ # needed for python_optimize
+ compileall.py
+ getopt.py
+ py_compile.py
+ struct.py
+
+ # needed for rpython
+ argparse.py
+ atexit.py
+ base64.py
+ bdb.py
+ bisect.py
+ cmd.py
+ code.py
+ codeop.py
+ collections.py
+ colorsys.py
+ contextlib.py
+ copy.py
+ ctypes
+ dis.py
+ fnmatch.py
+ functools.py
+ gettext.py
+ hashlib.py
+ heapq.py
+ inspect.py
+ io.py
+ json
+ keyword.py
+ locale.py
+ logging
+ new.py
+ opcode.py
+ optparse.py
+ pdb.py
+ pickle.py
+ platform.py
+ pprint.py
+ random.py
+ repr.py
+ shlex.py
+ shutil.py
+ StringIO.py
+ subprocess.py
+ tempfile.py
+ textwrap.py
+ threading.py
+ tokenize.py
+ uuid.py
+ weakref.py
+ zipfile.py
+ )
+
+ local distutils_modules=(
+ # needed by site
+ __init__.py
+ errors.py
+ sysconfig.py
+ sysconfig_cpython.py
+ sysconfig_pypy.py
+ )
+
+ local lib_pypy_modules=(
+ # needed by site
+ _sysconfigdata.py
+
+ # needed by rpython
+ cffi
+ _ctypes
+ _ffi.py
+ _functools.py
+ _sha.py
+ _sha256.py
+ _sha512.py
+
+ # NB: we're deliberately skipping _hashlib to avoid some deps
+ )
+
+ cd "lib-python/${PYVER}" || die
+ insinto "${dest}/lib-python/${PYVER}"
+ doins -r "${lib_py_modules[@]}"
+ cd - >/dev/null || die
+
+ cd "lib-python/${PYVER}/distutils" || die
+ insinto "${dest}/lib-python/${PYVER}/distutils"
+ doins -r "${distutils_modules[@]}"
+ cd - >/dev/null || die
+
+ cd lib_pypy || die
+ insinto "${dest}/lib_pypy"
+ doins -r "${lib_pypy_modules[@]}"
+ cd - >/dev/null || die
+ fi
+
+ dosym "../lib/pypy${PYVER}/pypy-c" /usr/bin/pypy
+ dodoc README.rst
+
+ local -x PYTHON="${ED}${dest}/pypy-c-${PYPY_PV}"
+ # temporarily copy to build tree to facilitate module builds
+ cp -p "${BROOT}${dest}/pypy-c-${PYPY_PV}" "${PYTHON}" || die
+
+ einfo "Byte-compiling Python standard library..."
+ "${PYTHON}" -m compileall \
+ -x 'bad_coding|badsyntax|make_ssl_data|lib2to3/tests/data' \
+ -q -f -d "${dest}" "${ED}/${dest}" || die
+
+ # remove to avoid collisions
+ rm "${PYTHON}" || die
+}
diff --git a/dev-lang/pypy/pypy-3.11.8.0.1.ebuild b/dev-lang/pypy/pypy-3.11.8.0.1.ebuild
new file mode 100644
index 000000000000..2bca80190456
--- /dev/null
+++ b/dev-lang/pypy/pypy-3.11.8.0.1.ebuild
@@ -0,0 +1,236 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multiprocessing pax-utils python-utils-r1 toolchain-funcs
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PATCHSET_PV/_rc/rc}"
+
+DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.gz
+ https://distfiles.gentoo.org/pub/proj/python/patchsets/pypy${PYVER}/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+# pypy3 -c 'import sysconfig; print(sysconfig.get_config_var("SOABI"))'
+# also check pypy/interpreter/pycode.py -> pypy_incremental_magic
+SLOT="${PYVER}/pypy311-pp80-432"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE="+ensurepip gdbm +jit ncurses sqlite symlink +test-install tk"
+# many tests are failing upstream
+# see https://buildbot.pypy.org/summary?branch=py${PYVER}
+RESTRICT="test"
+
+RDEPEND="
+ || (
+ dev-lang/pypy3-exe:${PV%_p*}[bzip2(+),ncurses?]
+ dev-lang/pypy3-exe-bin:${PV%_p*}
+ )
+ dev-libs/openssl:0=
+ dev-python/gentoo-common
+ gdbm? ( sys-libs/gdbm:0= )
+ sqlite? ( dev-db/sqlite:3= )
+ tk? (
+ dev-lang/tk:0=
+ dev-tcltk/tix:0=
+ )
+ symlink? (
+ !dev-lang/pypy:3.10[symlink(-)]
+ !<dev-python/pypy3-7.3.17-r100
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+PDEPEND="
+ ensurepip? (
+ dev-python/ensurepip-pip
+ dev-python/ensurepip-setuptools
+ )
+"
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ default
+}
+
+src_configure() {
+ tc-export CC
+}
+
+src_compile() {
+ mkdir bin || die
+ # switch to the layout expected for cffi module builds
+ mkdir "include/pypy${PYVER}" || die
+ # copy over to make sys.prefix happy
+ cp -p "${BROOT}/usr/bin/pypy${PYVER}-c-${PYPY_PV}" pypy${PYVER}-c || die
+ cp -p "${BROOT}/usr/include/pypy${PYVER}/${PYPY_PV}"/* include/pypy${PYVER}/ || die
+ # (not installed by pypy-exe)
+ rm pypy/module/cpyext/include/_numpypy/numpy/README || die
+ mv pypy/module/cpyext/include/* "include/pypy${PYVER}/" || die
+ mv pypy/module/cpyext/parse/*.h "include/pypy${PYVER}/" || die
+ pax-mark m "pypy${PYVER}-c"
+
+ # verify the subslot
+ local soabi=$(
+ "./pypy${PYVER}-c" - <<-EOF
+ import importlib.util
+ import sysconfig
+ soabi = sysconfig.get_config_var("SOABI")
+ magic = importlib.util._RAW_MAGIC_NUMBER & 0xffff
+ print(f"{soabi}-{magic}")
+ EOF
+ )
+ [[ ${soabi} == ${SLOT#*/} ]] || die "update subslot to ${soabi}"
+
+ # Add epython.py to the distribution
+ echo "EPYTHON=\"pypy${PYVER}\"" > lib-python/3/epython.py || die
+
+ einfo "Generating caches and CFFI modules ..."
+
+ # Generate Grammar and PatternGrammar pickles.
+ "./pypy${PYVER}-c" - <<-EOF || die "Generation of Grammar and PatternGrammar pickles failed"
+ import lib2to3.pygram
+ import lib2to3.patcomp
+ lib2to3.patcomp.PatternCompiler()
+ EOF
+
+ # Generate cffi modules
+ # Please keep in sync with lib_pypy/pypy_tools/build_cffi_imports.py!
+ # (NB: we build CFFI modules first to avoid error log when importing
+ # build_cffi_imports).
+ cffi_targets=(
+ pypy_util blake2/_blake2 sha3/_sha3 ssl
+ audioop syslog pwdgrp resource lzma posixshmem
+ ctypes_test testmultiphase
+ )
+ use gdbm && cffi_targets+=( gdbm )
+ use ncurses && cffi_targets+=( curses )
+ use sqlite && cffi_targets+=( sqlite3 )
+ use tk && cffi_targets+=( tkinter/tklib )
+
+ local t
+ # all modules except tkinter output to .
+ # tkinter outputs to the correct dir ...
+ cd lib_pypy || die
+ for t in "${cffi_targets[@]}"; do
+ # tkinter doesn't work via -m
+ "../pypy${PYVER}-c" "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
+ done
+ # testcapi does not have a "build" script
+ "../pypy${PYVER}-c" -c "import _testcapi" || die
+
+ # Verify that CFFI module list is up-to-date
+ local expected_cksum=46dc6ae7
+ local local_cksum=$(
+ "../pypy${PYVER}-c" - <<-EOF
+ import binascii
+ import json
+ from pypy_tools.build_cffi_imports import cffi_build_scripts as x
+ print("%08x" % (binascii.crc32(json.dumps(x).encode()),))
+ EOF
+ )
+ if [[ ${local_cksum} != ${expected_cksum} ]]; then
+ die "Please verify cffi_targets and update checksum to ${local_cksum}"
+ fi
+
+ # Cleanup temporary objects
+ find \( -name "*_cffi.c" -o -name '*.o' \) -delete || die
+ find -type d -empty -delete || die
+ cd .. || die
+
+ # Generate sysconfig data
+ local host_gnu_type=$(sh pypy/tool/release/config.guess)
+ local overrides=(
+ HOST_GNU_TYPE "${host_gnu_type:-unknown}"
+ INCLUDEPY "${EPREFIX}/usr/include/pypy${PYVER}"
+ LIBDIR "${EPREFIX}/usr/$(get_libdir)"
+ TZPATH "${EPREFIX}/usr/share/zoneinfo"
+ WHEEL_PKG_DIR "${EPREFIX}/usr/lib/python/ensurepip"
+ )
+ "./pypy${PYVER}-c" -m sysconfig --generate-posix-vars "${overrides[@]}" || die
+ local outdir
+ outdir=$(<pybuilddir.txt) || die
+ cp "${outdir}"/_sysconfigdata__*.py lib-python/3/ || die
+}
+
+src_install() {
+ local dest="/usr/lib/pypy${PYVER}"
+ einfo "Installing PyPy ..."
+ dodir /usr/bin
+ dosym "pypy${PYVER}-c-${PYPY_PV}" "/usr/bin/pypy${PYVER}"
+ insinto "${dest}"
+ # preserve mtimes to avoid obsoleting caches
+ insopts -p
+ doins -r lib-python/3/. lib_pypy/.
+ insinto /usr/include
+ doins -r "include/pypy${PYVER}"
+
+ # replace copied headers with symlinks
+ for x in "${BROOT}/usr/include/pypy${PYVER}/${PYPY_PV}"/*; do
+ dosym "${PYPY_PV}/${x##*/}" "/usr/include/pypy${PYVER}/${x##*/}"
+ done
+
+ dodoc README.rst
+
+ rm -r "${ED}${dest}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${ED}${dest}"/ensurepip || die
+ fi
+ if ! use gdbm; then
+ rm -r "${ED}${dest}"/_gdbm* || die
+ fi
+ if ! use test-install; then
+ rm -r "${ED}${dest}"/{ctypes,tkinter,unittest}/test \
+ "${ED}${dest}"/{distutils,lib2to3}/tests \
+ "${ED}${dest}"/idlelib/idle_test || die
+ fi
+ if ! use sqlite; then
+ rm -r "${ED}${dest}"/sqlite3 \
+ "${ED}${dest}"/_sqlite3* \
+ "${ED}${dest}"/test/test_sqlite3 || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}${dest}"/{idlelib,tkinter} \
+ "${ED}${dest}"/_tkinter \
+ "${ED}${dest}"/test/test_{tcl,tk,ttk*}.py || die
+ fi
+ # remove test last since we have some file removals above
+ if ! use test-install; then
+ rm -r "${ED}${dest}"/test || die
+ fi
+ dosym ../python/EXTERNALLY-MANAGED "${dest}/EXTERNALLY-MANAGED"
+
+ local -x PYTHON="${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+ # temporarily copy to build tree to facilitate module builds
+ cp -p "${BROOT}/usr/bin/pypy${PYVER}-c-${PYPY_PV}" "${PYTHON}" || die
+
+ einfo "Byte-compiling Python standard library..."
+ # exclude list from CPython Makefile.pre.in
+ "${PYTHON}" -m compileall -j "$(makeopts_jobs)" -o 0 -o 1 -o 2 \
+ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ --hardlink-dupes -q -f -d "${dest}" "${ED}${dest}" || die
+
+ # remove to avoid collisions
+ rm "${PYTHON}" || die
+
+ if use symlink; then
+ dosym pypy${PYVER} /usr/bin/pypy3
+ fi
+}
diff --git a/dev-lang/pypy/pypy-3.12.8.0.1.ebuild b/dev-lang/pypy/pypy-3.12.8.0.1.ebuild
new file mode 100644
index 000000000000..21c63ee437c3
--- /dev/null
+++ b/dev-lang/pypy/pypy-3.12.8.0.1.ebuild
@@ -0,0 +1,235 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multiprocessing pax-utils python-utils-r1 toolchain-funcs
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PATCHSET_PV/_rc/rc}"
+
+DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.gz
+ https://distfiles.gentoo.org/pub/proj/python/patchsets/pypy${PYVER}/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+# pypy3 -c 'import sysconfig; print(sysconfig.get_config_var("SOABI"))'
+# also check pypy/interpreter/pycode.py -> pypy_incremental_magic
+SLOT="${PYVER}/pypy312-pp80-448"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE="+ensurepip gdbm +jit ncurses sqlite symlink +test-install tk"
+# many tests are failing upstream
+# see https://buildbot.pypy.org/summary?branch=py${PYVER}
+RESTRICT="test"
+
+RDEPEND="
+ || (
+ dev-lang/pypy3-exe:${PV%_p*}[bzip2(+),ncurses?]
+ dev-lang/pypy3-exe-bin:${PV%_p*}
+ )
+ dev-libs/openssl:0=
+ dev-python/gentoo-common
+ gdbm? ( sys-libs/gdbm:0= )
+ sqlite? ( dev-db/sqlite:3= )
+ tk? (
+ dev-lang/tk:0=
+ dev-tcltk/tix:0=
+ )
+ symlink? (
+ !dev-lang/pypy:3.10[symlink(-)]
+ !<dev-python/pypy3-7.3.17-r100
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+PDEPEND="
+ ensurepip? (
+ dev-python/ensurepip-pip
+ dev-python/ensurepip-setuptools
+ )
+"
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ default
+}
+
+src_configure() {
+ tc-export CC
+}
+
+src_compile() {
+ mkdir bin || die
+ # switch to the layout expected for cffi module builds
+ mkdir "include/pypy${PYVER}" || die
+ # copy over to make sys.prefix happy
+ cp -p "${BROOT}/usr/bin/pypy${PYVER}-c-${PYPY_PV}" pypy${PYVER}-c || die
+ cp -p "${BROOT}/usr/include/pypy${PYVER}/${PYPY_PV}"/* include/pypy${PYVER}/ || die
+ # (not installed by pypy-exe)
+ rm pypy/module/cpyext/include/_numpypy/numpy/README || die
+ mv pypy/module/cpyext/include/* "include/pypy${PYVER}/" || die
+ mv pypy/module/cpyext/parse/*.h "include/pypy${PYVER}/" || die
+ pax-mark m "pypy${PYVER}-c"
+
+ # verify the subslot
+ local soabi=$(
+ "./pypy${PYVER}-c" - <<-EOF
+ import importlib.util
+ import sysconfig
+ soabi = sysconfig.get_config_var("SOABI")
+ wo_plat = "-".join(soabi.split("-", 2)[:2])
+ magic = importlib.util._RAW_MAGIC_NUMBER & 0xffff
+ print(f"{wo_plat}-{magic}")
+ EOF
+ )
+ [[ ${soabi} == ${SLOT#*/} ]] || die "update subslot to ${soabi}"
+
+ # Add epython.py to the distribution
+ echo "EPYTHON=\"pypy${PYVER}\"" > lib-python/3/epython.py || die
+
+ einfo "Generating caches and CFFI modules ..."
+
+ # Generate Grammar and PatternGrammar pickles.
+ "./pypy${PYVER}-c" - <<-EOF || die "Generation of Grammar and PatternGrammar pickles failed"
+ import lib2to3.pygram
+ import lib2to3.patcomp
+ lib2to3.patcomp.PatternCompiler()
+ EOF
+
+ # Generate cffi modules
+ # Please keep in sync with lib_pypy/pypy_tools/build_cffi_imports.py!
+ # (NB: we build CFFI modules first to avoid error log when importing
+ # build_cffi_imports).
+ cffi_targets=(
+ pypy_util blake2/_blake2 sha3/_sha3 ssl
+ audioop syslog pwdgrp resource lzma posixshmem
+ ctypes_test testmultiphase testsinglephase
+ )
+ use gdbm && cffi_targets+=( gdbm )
+ use ncurses && cffi_targets+=( curses )
+ use sqlite && cffi_targets+=( sqlite3 )
+ use tk && cffi_targets+=( tkinter/tklib )
+
+ local t
+ # all modules except tkinter output to .
+ # tkinter outputs to the correct dir ...
+ cd lib_pypy || die
+ for t in "${cffi_targets[@]}"; do
+ # tkinter doesn't work via -m
+ "../pypy${PYVER}-c" "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
+ done
+ # testcapi does not have a "build" script
+ "../pypy${PYVER}-c" -c "import _testcapi" || die
+
+ # Verify that CFFI module list is up-to-date
+ local expected_cksum=46dc6ae7
+ local local_cksum=$(
+ "../pypy${PYVER}-c" - <<-EOF
+ import binascii
+ import json
+ from pypy_tools.build_cffi_imports import cffi_build_scripts as x
+ print("%08x" % (binascii.crc32(json.dumps(x).encode()),))
+ EOF
+ )
+ if [[ ${local_cksum} != ${expected_cksum} ]]; then
+ die "Please verify cffi_targets and update checksum to ${local_cksum}"
+ fi
+
+ # Cleanup temporary objects
+ find \( -name "*_cffi.c" -o -name '*.o' \) -delete || die
+ find -type d -empty -delete || die
+ cd .. || die
+
+ # Generate sysconfig data
+ local host_gnu_type=$(sh pypy/tool/release/config.guess)
+ local overrides=(
+ HOST_GNU_TYPE "${host_gnu_type:-unknown}"
+ INCLUDEPY "${EPREFIX}/usr/include/pypy${PYVER}"
+ LIBDIR "${EPREFIX}/usr/$(get_libdir)"
+ TZPATH "${EPREFIX}/usr/share/zoneinfo"
+ WHEEL_PKG_DIR "${EPREFIX}/usr/lib/python/ensurepip"
+ )
+ "./pypy${PYVER}-c" -m sysconfig --generate-posix-vars "${overrides[@]}" || die
+ local outdir
+ outdir=$(<pybuilddir.txt) || die
+ cp "${outdir}"/_sysconfigdata__*.py lib-python/3/ || die
+}
+
+src_install() {
+ local dest="/usr/lib/pypy${PYVER}"
+ einfo "Installing PyPy ..."
+ dodir /usr/bin
+ dosym "pypy${PYVER}-c-${PYPY_PV}" "/usr/bin/pypy${PYVER}"
+ insinto "${dest}"
+ # preserve mtimes to avoid obsoleting caches
+ insopts -p
+ doins -r lib-python/3/. lib_pypy/.
+ insinto /usr/include
+ doins -r "include/pypy${PYVER}"
+
+ # replace copied headers with symlinks
+ for x in "${BROOT}/usr/include/pypy${PYVER}/${PYPY_PV}"/*; do
+ dosym "${PYPY_PV}/${x##*/}" "/usr/include/pypy${PYVER}/${x##*/}"
+ done
+
+ dodoc README.rst
+
+ rm -r "${ED}${dest}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${ED}${dest}"/ensurepip || die
+ fi
+ if ! use gdbm; then
+ rm -r "${ED}${dest}"/_gdbm* || die
+ fi
+ if ! use test-install; then
+ rm -r "${ED}${dest}"/idlelib/idle_test || die
+ fi
+ if ! use sqlite; then
+ rm -r "${ED}${dest}"/sqlite3 \
+ "${ED}${dest}"/_sqlite3* \
+ "${ED}${dest}"/test/test_sqlite3 || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}${dest}"/{idlelib,tkinter} \
+ "${ED}${dest}"/_tkinter \
+ "${ED}${dest}"/test/test_{tcl,ttk*}.py || die
+ fi
+ # remove test last since we have some file removals above
+ if ! use test-install; then
+ rm -r "${ED}${dest}"/test || die
+ fi
+ dosym ../python/EXTERNALLY-MANAGED "${dest}/EXTERNALLY-MANAGED"
+
+ local -x PYTHON="${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+ # temporarily copy to build tree to facilitate module builds
+ cp -p "${BROOT}/usr/bin/pypy${PYVER}-c-${PYPY_PV}" "${PYTHON}" || die
+
+ einfo "Byte-compiling Python standard library..."
+ # exclude list from CPython Makefile.pre.in
+ "${PYTHON}" -m compileall -j "$(makeopts_jobs)" -o 0 -o 1 -o 2 \
+ -x 'bad_coding|badsyntax|site-packages|test/test_lib2to3/data' \
+ --hardlink-dupes -q -f -d "${dest}" "${ED}${dest}" || die
+
+ # remove to avoid collisions
+ rm "${PYTHON}" || die
+
+ if use symlink; then
+ dosym pypy${PYVER} /usr/bin/pypy3
+ fi
+}
diff --git a/dev-lang/pypy3-exe-bin/Manifest b/dev-lang/pypy3-exe-bin/Manifest
index 600a718a7e64..dd800b9de2fd 100644
--- a/dev-lang/pypy3-exe-bin/Manifest
+++ b/dev-lang/pypy3-exe-bin/Manifest
@@ -14,6 +14,14 @@ DIST pypy3-exe-3.11.8.0.0-1.ppc64le-musl.gpkg.tar 6912000 BLAKE2B 784455a155c218
DIST pypy3-exe-3.11.8.0.0-1.ppc64le.gpkg.tar 10741760 BLAKE2B c5062e3b1e0565c19142fb69e16ed58ea4554b60a01e799c78202a84eee0a230eebdc6c89bf4d8ac6a5c58f96bacbbbac475f01902d04e64acdad0f77b8a0a16 SHA512 3111204200894c051baa164168ad726fa1be520ffd0d92bc40f103bcb5f23354b653f56248d3142ccfc18877b667922e57076d924b80ab3cffecdc9fec13e47b
DIST pypy3-exe-3.11.8.0.0-1.x86-musl.gpkg.tar 9472000 BLAKE2B 6fe4626e392a47915647081afb0b53e4071e9c0f91fb818dd2bf8b75702453beb36e6fb020e7d161f8db38be7f7fb8df9875c5ad4339a598f85d3da64a9e5124 SHA512 409d1d1c7a72450525943d56f70f78cb0fa24b4e9fe02dcf2897a553b4c1d254f1fb1cce7a0ef1a5ff5b90cc679293701cb47762c2380807aae11c6ae547d9bb
DIST pypy3-exe-3.11.8.0.0-1.x86.gpkg.tar 9523200 BLAKE2B 3c2cd68746b37616ae6f881b797209b900ecfa1a5565a2c224c6ba2f5d6d5f2a3733f2ecb56c89bbc5e9aef20957ccf967e74b52a9dcb9c4387c24edb8279a6b SHA512 325fc7a16725dbf995a5c5d6aad2e50cdf4a18e27e5280c9833b7f17ef740317ea3640888ba48939d175c6df13520feb55319b9d23eeebb36cf6a68e12c143d2
+DIST pypy3-exe-3.11.8.0.1-1.amd64-musl.gpkg.tar 11960320 BLAKE2B 67719ccd26177e2efa2f7e6dc66f2bb667dad7fcceb4db76b8027d9dd3fbc92688c6c0aa1e16c9d1bcc00e8e658323b2948aca3846a2889aedae81ae738278b9 SHA512 6f0948fd975c932e79ad9f8f4934c85519dcf95b90bc7de1b262b949b156e6d71836169790da894f7040e92bf7688219274c61975eda176315a2a044af629fe3
+DIST pypy3-exe-3.11.8.0.1-1.amd64.gpkg.tar 12492800 BLAKE2B 54330129a57c2448eaddd70c3b5b2c497ca0f22725bb0da812550a7c3c5df174842a41e05ee9cf153dd0044c6157966e793168c404e438ee5afdee8b52d7a7c6 SHA512 34566cad28b33fbbe1d137ae08106a1e125b54e1418bbcac536f52edd7a0b9ce790ffa8f862a969acbde2a457e2210e151c86b47e580400a44428be1fbdb6f88
+DIST pypy3-exe-3.11.8.0.1-1.arm64-musl.gpkg.tar 10465280 BLAKE2B a029c8edeae82ca997a9407a060437878238f54d009113cda8f439e900da7534ab6ad934ce0e04dbb524044b0243fe991f118511fd40001daab67b3f6938967b SHA512 1aa3d5f861ec2a7888a47cf7649e9d28bc5d0079f267656a7cb0c4fd792b91289843772434ec9da0c01e18fc1c5310ec75abbb4800d56cc128063acd57637766
+DIST pypy3-exe-3.11.8.0.1-1.arm64.gpkg.tar 10670080 BLAKE2B 987bed1659bb5e7319da009a4fa6cfeb3a7229dd07dfa7bfefda3d2570cec4f9128efa8d5130a7cbb9f94148f9c907920e6362fe7a2a87abe5c1d66ae2838a9a SHA512 5995a30db3170fa1498afe21a1e346dc5b6d56ad829387b0847693e79c74add365fe339c21c67b38255146f3c44306cdd4b5cf878038c0d68673ffeec8943e39
+DIST pypy3-exe-3.11.8.0.1-1.ppc64le-musl.gpkg.tar 6952960 BLAKE2B 4fcc3d4f285e92301fc4636b18182875379e15b8ecb097512aed186c7605fb935997c0bf75189eedab13f090384c0defe9ed313df1f9d746d4ab3ec91c1a89e6 SHA512 f999297683738a6725c19a06fc028ce4232712c7ce0aa329a22642bbe144ff4834c6759833c6db6e9e57dfc719c974293c2dec60862f1f40f6aef1724cbeb97e
+DIST pypy3-exe-3.11.8.0.1-1.ppc64le.gpkg.tar 10813440 BLAKE2B 3f240baa6b1e4aca00a753a3b0ae5519e21f05f104228c93650667a1a2c20cbc00cdda8fa28d48d5fe8debc54977180d669c2ff63cad4a2f861dba8fba56f2c0 SHA512 b7bf8a47385f58faebb14a435ba509dfcd4eb1adbc5105e1f63320455446bd1d086d8708e4dedd479f364399bb50e336af0fef73d7a3cb5b7c9b2bcebcb12751
+DIST pypy3-exe-3.11.8.0.1-1.x86-musl.gpkg.tar 9431040 BLAKE2B e05ed2974a32821ea5cd94dce5b1d1352605fd527b936dbe2810d1cecb8641c7bc1e4c1b068701885a6cbc3bb0fe5be181ae48feb99dba32dff12f3769a4ea0c SHA512 d905445916e6fb302b35185cf42b9d988654360a445a3ff0581e78393d0b6f0fcf199122cf77912d121dd613900f3e179e6d1191c88a76162f50701b64f3cdf1
+DIST pypy3-exe-3.11.8.0.1-1.x86.gpkg.tar 9861120 BLAKE2B 50342a27c3de1e5a3441fd62b1a84589d02bfeae8a0a59cdcfdeed4a70caa57863e48fec594b0f5b3fbb6f11417bf651e2f277389e899ff505d62bc4afd71460 SHA512 76392ece0385d374bfc3f77064bac84b4c13a7e049b17ac64cf411947672653ea809273235978c17844671e4b3744dc885bccb99ee0a61094b17555469f257ef
DIST pypy3-exe-3.12.8.0.0-1.amd64-musl.gpkg.tar 12431360 BLAKE2B 10491667828f99fc1e3c2900fd512dad854c403fb9796b3382f43d2b5b579e12b55c60193dff824a0e66c58f6dfe2fcf6f383e796cf988e09dfd9bee0c04662e SHA512 94d3fb16aad1d6181501c53836b19c67bf41d4a667e5c59355a37801c6ab6adc14c97289e16a5c69ad47af089f2792a90319d1df9b5823a07b65e7ae5c6a1ddf
DIST pypy3-exe-3.12.8.0.0-1.amd64.gpkg.tar 12369920 BLAKE2B 32f33bdbe7bcf2e0a3ea93628e7507cc7332053dc2012fdb693113d3bc6ed4652196d5f9d5d4be6b343d397bde5f7ac55171341bc690546ac35d5a0e29eb4df3 SHA512 eef0e8dd0e586b9ea4c465b2cff250568331f99785e70e84055a0878c89ae86beb08c246919ded1f863ddb7a7f7f66a94012e2ee01119645925fc19b2b2dc86d
DIST pypy3-exe-3.12.8.0.0-1.arm64-musl.gpkg.tar 10813440 BLAKE2B e4b611ffc020f99cd81719f252563da549ca2b116f04f531b05cc3e0ed7c19f8cf53f13ba630694e19a1ebb687621fe2e6fd4ffdb2350078007b494cab3d4e67 SHA512 9df2ca7c438afdd7766daab7b6afb9091946b67fcb1d6a46a26e71fe2d2e5436377e11ed4c840c7611eda3d6d3685c1bb7a21deb2469c4daa5c8888b1962aca3
@@ -22,3 +30,11 @@ DIST pypy3-exe-3.12.8.0.0-1.ppc64le-musl.gpkg.tar 7157760 BLAKE2B 77441661e8f398
DIST pypy3-exe-3.12.8.0.0-1.ppc64le.gpkg.tar 10895360 BLAKE2B e308eba5b22f33408d86b1ca1578d89b3dc63e94c2fbdff08f2937e4f4a652a3bba286de9d75a67354c9b8a8d2d75e4eb0273701aeb6d5e2df61db5e0c486757 SHA512 9445d0f8248657ffd5e9b0060eed81965e0e098f12c2e6d6f8f14f32002ee77a18c8c08d56d60e3252d65ff7564bc5e593cd7e90be23a0ee7f0a5eaf3f50cd91
DIST pypy3-exe-3.12.8.0.0-1.x86-musl.gpkg.tar 9728000 BLAKE2B 81eefd77ac768045e06593432c3919521cc214be5e04794ff1b66e2da7645474a37b84136aea8072b3e6bcf353bc93d3db19f13abd6bf08a901515245b687f72 SHA512 ade70224841c1342ca9f3c7e3aafff0b9532cdc32052a9d89b62782c1b3ab8a7bb7db5a5c24bf7f68b8fad8823d71f85491921e9b3cdbab1896454086ccc5765
DIST pypy3-exe-3.12.8.0.0-1.x86.gpkg.tar 9738240 BLAKE2B d9ee5575dd8f2fbcdce0785c28d21f78136ef15bbee17be0496497c2517d2ac3bcce1088d454618e90f5ccdb92758eab4be6077836af229c0acd726b0013fb26 SHA512 30a6cda250b45f1eeb76fa5e54041098bfca8b887923ff5706397ea526ef8df9ef16b0f5e2229c86981543623f156ad7820ac71782c03dda50b3b590dbb03214
+DIST pypy3-exe-3.12.8.0.1-1.amd64-musl.gpkg.tar 12257280 BLAKE2B 62484c9da71ec730fdf294746d80fae17df140957b1cb0f381298d44f460d498cd5c866d0d2c05d0274419724b547e55b91a2f062ec2ecdb44bb142ba663d4a6 SHA512 77f1f871c0f5286f943e90a8bd5a26661314d9ec06f26c08eb6c7598900d7d835b5e81e2d11b751b555ccca5d8b648057db8433ec8598b875f4d92c6496d298e
+DIST pypy3-exe-3.12.8.0.1-1.amd64.gpkg.tar 12789760 BLAKE2B acd14b47dc7d44b912dceb2992a17e79166f32bf34c8e89738a6e8f5f9ce56a20528577ef32a8463d34890baccb9e2cb7702bc0d81265c55a03b1f20ffa96766 SHA512 0d60c79b1314a162dc56c2610761d4ba1f62eeb90e2c5e3ead44c29bb50222b1eff72a3ecc5163c26789e0d07906d82277e617f78b3379401f1fad8b9a7fc3bc
+DIST pypy3-exe-3.12.8.0.1-1.arm64-musl.gpkg.tar 10659840 BLAKE2B 7eff4a41a9cf64ec03bdb4e9c9784ef12da7c020cd8a293c41c9f581407f82abfbab8891c30492d8623804bd65e3656db3604d8a0d3274102cf540722e3f7dac SHA512 bed9591df3e1fba98751c6b1f88dd7ac9282433c5ecde2e720a96babde8f88c9227c8d646b42cdbbaa03cb7bdbab18cf23f4bdfda00da66ffba5dda5380780d5
+DIST pypy3-exe-3.12.8.0.1-1.arm64.gpkg.tar 10915840 BLAKE2B 3fc7c132bd0a10075efe59bec6d5b7d0d3020792ac430ac968068cc907122fab355da86177a8682865a065e396343e20d4ace155ca68bbb459fe7937d25cf732 SHA512 995f5af1a630121888d43337120870a5c5b06a80ab68711307c839fede7bd2bb14522c1352d1ebe73e397af8c896649673c81531ae9fe92c225a606a5dbfc032
+DIST pypy3-exe-3.12.8.0.1-1.ppc64le-musl.gpkg.tar 7198720 BLAKE2B 19a56e02b0d51bef742cb40709319816488fe58b9a5ccbb057ef97ea895b34c9fed956f2794206b4d9ec1916fe0ed15138734f215ecc468ed5cd6877ada0ea5e SHA512 bf573991f93f9e3e9087f29f0cc765cec35007313f87676e1177c23c79ce6531bc5e3d06e153f98d37562ebdb025c9ff92aa05a9d532bd5f993151e6079320a9
+DIST pypy3-exe-3.12.8.0.1-1.ppc64le.gpkg.tar 11028480 BLAKE2B 4b4c77293b08e35ad78f4846808e4064c237a14797c879e2b37f903b0df8a783ec630242189ac96d060c16e5f077dfa69585d317132155393c532e83cc225038 SHA512 b6c2a4531813bf42aee275b533a23e713adca95f8ef7edcab862e645134c5b1dcab6ff32f7c16cbb547b02bea61ccbf0d9348cc0c2c5267e3996bc28b4b4a14c
+DIST pypy3-exe-3.12.8.0.1-1.x86-musl.gpkg.tar 9697280 BLAKE2B a3d920128dee47e526ed9994f5abe5fe8681b3b10f0d3cd8915807a9752a4d065404fd050a670b399367a59cd36d162f5d13041ecd23e9724dd6fdaee1880af0 SHA512 4a7288281d12b46f8998d40d9ad0be75d5f0dd93969067b35767cca18af9e4b6073f0f32deb06fa918119d10e7d9619604afb4b033a06ed54d856f6b46792c48
+DIST pypy3-exe-3.12.8.0.1-1.x86.gpkg.tar 10076160 BLAKE2B 4f8372df7ecf05c6b0841517797f93d66081a868fbc9b324251279c12bda2adf69e1460f3fc3ebdfc429a125e10650080dc5b227a6e0293d604351c2209c111c SHA512 88458d8c66467a052f39a489c8e22e60e386922ee1cc950ab4f13b8f07929c8edee6ac8d56cddda4e4b58d652999aaece9c83e8cdedcb2789efa4d68e16e148c
diff --git a/dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.11.8.0.1.ebuild b/dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.11.8.0.1.ebuild
new file mode 100644
index 000000000000..2fa2a4810f9b
--- /dev/null
+++ b/dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.11.8.0.1.ebuild
@@ -0,0 +1,78 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit pax-utils unpacker
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+MY_P=pypy3-exe-${PV}-1
+
+DESCRIPTION="PyPy3.11 executable (pre-built version)"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ elibc_glibc? (
+ amd64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/amd64/pypy3-exe/${MY_P}.amd64.gpkg.tar
+ )
+ arm64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/arm64/pypy3-exe/${MY_P}.arm64.gpkg.tar
+ )
+ ppc64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/ppc64le/pypy3-exe/${MY_P}.ppc64le.gpkg.tar
+ )
+ x86? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/x86/pypy3-exe/${MY_P}.x86.gpkg.tar
+ )
+ )
+ elibc_musl? (
+ amd64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/amd64-musl/pypy3-exe/${MY_P}.amd64-musl.gpkg.tar
+ )
+ arm64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/arm64-musl/pypy3-exe/${MY_P}.arm64-musl.gpkg.tar
+ )
+ ppc64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/ppc64le-musl/pypy3-exe/${MY_P}.ppc64le-musl.gpkg.tar
+ )
+ x86? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/x86-musl/pypy3-exe/${MY_P}.x86-musl.gpkg.tar
+ )
+ )
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="MIT"
+SLOT="${PV%_p*}"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+
+# sys-devel/gcc for libgcc_s.so
+RDEPEND="
+ app-arch/bzip2:0/1
+ dev-libs/expat:0/0
+ dev-libs/libffi:0/8
+ sys-libs/ncurses:0/6
+ >=virtual/zlib-1.1.3:0/1
+ virtual/libintl:0/0
+ elibc_glibc? (
+ sys-devel/gcc
+ >=sys-libs/glibc-2.35
+ )
+ !dev-lang/pypy3-exe:${SLOT}
+"
+
+QA_PREBUILT="
+ usr/bin/pypy${PYVER}-c-${PYPY_PV}
+"
+
+src_install() {
+ insinto /
+ doins -r image/usr
+ fperms +x "/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+ pax-mark m "${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+}
diff --git a/dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.12.8.0.1.ebuild b/dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.12.8.0.1.ebuild
new file mode 100644
index 000000000000..b799ab3e48e3
--- /dev/null
+++ b/dev-lang/pypy3-exe-bin/pypy3-exe-bin-3.12.8.0.1.ebuild
@@ -0,0 +1,78 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit pax-utils unpacker
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+MY_P=pypy3-exe-${PV}-1
+
+DESCRIPTION="PyPy${PYVER} executable (pre-built version)"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ elibc_glibc? (
+ amd64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/amd64/pypy3-exe/${MY_P}.amd64.gpkg.tar
+ )
+ arm64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/arm64/pypy3-exe/${MY_P}.arm64.gpkg.tar
+ )
+ ppc64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/ppc64le/pypy3-exe/${MY_P}.ppc64le.gpkg.tar
+ )
+ x86? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/x86/pypy3-exe/${MY_P}.x86.gpkg.tar
+ )
+ )
+ elibc_musl? (
+ amd64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/amd64-musl/pypy3-exe/${MY_P}.amd64-musl.gpkg.tar
+ )
+ arm64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/arm64-musl/pypy3-exe/${MY_P}.arm64-musl.gpkg.tar
+ )
+ ppc64? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/ppc64le-musl/pypy3-exe/${MY_P}.ppc64le-musl.gpkg.tar
+ )
+ x86? (
+ https://distfiles.gentoo.org/pub/proj/python/binpkg/x86-musl/pypy3-exe/${MY_P}.x86-musl.gpkg.tar
+ )
+ )
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="MIT"
+SLOT="${PV%_p*}"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+
+# sys-devel/gcc for libgcc_s.so
+RDEPEND="
+ app-arch/bzip2:0/1
+ dev-libs/expat:0/0
+ dev-libs/libffi:0/8
+ sys-libs/ncurses:0/6
+ >=virtual/zlib-1.1.3:0/1
+ virtual/libintl:0/0
+ elibc_glibc? (
+ sys-devel/gcc
+ >=sys-libs/glibc-2.35
+ )
+ !dev-lang/pypy3-exe:${SLOT}
+"
+
+QA_PREBUILT="
+ usr/bin/pypy${PYVER}-c-${PYPY_PV}
+"
+
+src_install() {
+ insinto /
+ doins -r image/usr
+ fperms +x "/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+ pax-mark m "${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+}
diff --git a/dev-lang/pypy3-exe/Manifest b/dev-lang/pypy3-exe/Manifest
index da75ce8eb28c..0fc0c5f4b912 100644
--- a/dev-lang/pypy3-exe/Manifest
+++ b/dev-lang/pypy3-exe/Manifest
@@ -1,6 +1,10 @@
DIST pypy3.11-gentoo-patches-7.3.23.tar.xz 3096 BLAKE2B d0852f8c9f715359487e07f5c80c4f3ac48da7eb650fd328535c40d8ec6318cf4c9f4b08838e976e2f88723472a42ccfcaf61d3a1b4af8319a44b476202b8c05 SHA512 81d6bb2e25a387bfe805263e7ecfb927a2292824e03b58ff4942b52bf4057d13ddf5d7944f8ee2e6c1553bde5650ac5d7af8689ab586a33ab5c58e4565da126a
DIST pypy3.11-gentoo-patches-8.0.0.tar.xz 1392 BLAKE2B 1324f7a4f4950359b929835c1f0cfcb99022bf0098a0515a08ae24d811c2bdc5bd64e877d6c7e5b0b9dd33523c1b93f556bbec68c92fdad0670eb4e44a20c5b9 SHA512 c8e1a9eeb4ca44adb113477ce1bced9d3e3a7f693852dcc3b83b588b113fb1f1ca7a1c24151c31f321bdc763dd2fcdeea03031e3bb9d0d3f899ca083bc33df72
+DIST pypy3.11-gentoo-patches-8.0.1.tar.xz 2600 BLAKE2B e83fda134f8e77ed8f15067b6deba05d222661590484aec0578c5eaa29c342a58d74bca7a1a1c97b115ce9413dd91c9d305b8d53d653e4e77cf4b84ac5f4b050 SHA512 82b8bc380087432870eefb09b3369c4483c92855f4511e45fe166df54ff1e97905a5687000b9fcbaad6aac28714e2eef6ea43dead6a839472974d3852ac3dd48
DIST pypy3.11-v7.3.23-src.tar.bz2 25005650 BLAKE2B d0976c47fb04d1c96d7b4c1202ba43e586c8585f0c770c313c61407dc9c91245b6d4b07371d004646f43765f997f1deadcd938033bcc3429d848af63dbc75714 SHA512 4351cf30227af06ece5d69fe86a17355eadf2dcdbddf8119c04a720a4f9f388c6ae45a3496feb623950fb4a4a9f70c1910502adb325a12b1b0e34a7ba35563c2
DIST pypy3.11-v8.0.0-src.tar.gz 25897899 BLAKE2B 80e41af342fde7676990b1ea7aa689fcbbe5000d59cc41dc112597dba9f20a7ba5d1dd09feef130b78fa62f91fdf92c212ae9d796ecb3ea863983ff70b672398 SHA512 3e29f2bc76dc2db6d2409d580299c16e54927c1d7f06d697c0550d55a6fec2570e41f283d72730a19ad9166121a01cc5e380c33858a86b96356d4fd9d1780ade
+DIST pypy3.11-v8.0.1-src.tar.gz 26304747 BLAKE2B 23aaa53b40f20a3dec88412bb7c8a6abd73d92e7a3cf08193691c5d9e1cc26fcb16feb8d1b937782654cc3d5d1e25e79240aae7c3166945baba8a8fb21e0be35 SHA512 63ee2790bef7b165615cada25ae444a293f7b99dafc135f9714c029b31a14c89f6d5fe6e09e11e7d720ad25cf6544528e98e1da8f375ec49ba45ca009fe3410a
DIST pypy3.12-gentoo-patches-8.0.0.tar.xz 1876 BLAKE2B e9754805a5ddd980d299bb653f8fac58140a1f75c165c4309cd648d7fec63d3c6225673132bf641189dd501bab11263fa29723482bf7a13ca81700e090cca1bd SHA512 933eabf8a0e508e06c31514e9cae219877969ad0c41fd8d1307698714834efdcc7991341f71cab900b71b8fd6cf6af80e51f9b417b2081af52f6dab859eac1ba
+DIST pypy3.12-gentoo-patches-8.0.1.tar.xz 2592 BLAKE2B 2aff55d9110ddbbc4ed47c3389f322eee0679478ee83cda1fca45edffac4659839a168437a01def0e58449e39611b115a41f186307b6f9b9d8dfb961781aaa4a SHA512 39708af70b9dc31289191d6984164f82609e4b755e8bf57606497264eb946447869984c893d989f26afa621c72a6f263e97fb91778e19deca9d9aec253f207b1
DIST pypy3.12-v8.0.0-src.tar.gz 25838522 BLAKE2B cfff5bf17a47ab308d27f935e82d13afdda43d817f7a0b3fd842f6ffaf8a75a35c3df4e3be62c6d520928878330328e93ea86d73d245ded28ce12c04286ae6ab SHA512 7eb576fdec8d46e5889dd265951ad49985c7d25ff1f998be83d8f34a011bd2369e00f1e48f93767bcb503b92849d549ce41c97338d65708da42b9833aefb8a2f
+DIST pypy3.12-v8.0.1-src.tar.gz 26249138 BLAKE2B aa12063d61252339727168983a9fca69ded8df3494ef3f84766890918428ee5eaee2418078c0a44c262a3a6955179b1dc7e1ccb398b13658bfdf863f5239aa5a SHA512 bb60f8107079188b9214907c1bdd8d8aebb912cf4beb55f6c8cf80e16029d5e677f18a2f13d3fe3bd11676944e8dca7335a0f52ae1d47dec9b6b4312ac6c1604
diff --git a/dev-lang/pypy3-exe/pypy3-exe-3.11.8.0.1.ebuild b/dev-lang/pypy3-exe/pypy3-exe-3.11.8.0.1.ebuild
new file mode 100644
index 000000000000..a2915cc621cf
--- /dev/null
+++ b/dev-lang/pypy3-exe/pypy3-exe-3.11.8.0.1.ebuild
@@ -0,0 +1,133 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit check-reqs pax-utils toolchain-funcs
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PATCHSET_PV/_rc/rc}"
+
+DESCRIPTION="PyPy3.11 executable (build from source)"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.gz
+ https://distfiles.gentoo.org/pub/proj/python/patchsets/pypy${PYVER}/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+SLOT="${PV%_p*}"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE="+jit low-memory ncurses cpu_flags_x86_sse2"
+
+RDEPEND="
+ app-arch/bzip2:0=
+ dev-libs/expat:0=
+ dev-libs/libffi:0=
+ >=virtual/zlib-1.1.3:=
+ virtual/libintl:0=
+ ncurses? ( sys-libs/ncurses:0= )
+ !dev-lang/pypy3-exe-bin:${SLOT}
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ >=dev-lang/pypy-2.7.8.0.0-r1:2.7
+ virtual/pkgconfig
+"
+
+check_env() {
+ if use low-memory; then
+ CHECKREQS_MEMORY="1750M"
+ use amd64 && CHECKREQS_MEMORY="3500M"
+ else
+ CHECKREQS_MEMORY="3G"
+ use amd64 && CHECKREQS_MEMORY="6G"
+ fi
+
+ check-reqs_pkg_pretend
+}
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} != binary ]] && check_env
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && check_env
+}
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+ default
+}
+
+src_configure() {
+ tc-export CC
+
+ local jit_backend
+ if use jit; then
+ jit_backend='--jit-backend='
+
+ # We only need the explicit sse2 switch for x86.
+ # On other arches we can rely on autodetection which uses
+ # compiler macros. Plus, --jit-backend= doesn't accept all
+ # the modern values...
+
+ if use x86; then
+ if use cpu_flags_x86_sse2; then
+ jit_backend+=x86
+ else
+ jit_backend+=x86-without-sse2
+ fi
+ else
+ jit_backend+=auto
+ fi
+ fi
+
+ local args=(
+ --no-shared
+ $(usex jit -Ojit -O2)
+
+ ${jit_backend}
+
+ pypy/goal/targetpypystandalone
+ --withmod-bz2
+ $(usex ncurses --with{,out}mod-_minimal_curses)
+ )
+
+ local interp=( pypy )
+ if use low-memory; then
+ local -x PYPY_GC_MAX_DELTA=200MB
+ interp+=( --jit loop_longevity=300 )
+ fi
+
+ # translate into the C sources
+ # we're going to build them ourselves since otherwise pypy does not
+ # free up the unneeded memory before spawning the compiler
+ set -- "${interp[@]}" rpython/bin/rpython --batch --source "${args[@]}"
+ echo -e "\033[1m${@}\033[0m"
+ "${@}" || die "translation failed"
+}
+
+src_compile() {
+ emake -C "${T}"/usession*-0/testing_1
+}
+
+src_install() {
+ cd "${T}"/usession*-0 || die
+ newbin "testing_1/pypy${PYVER}-c" "pypy${PYVER}-c-${PYPY_PV}"
+ insinto "/usr/include/pypy${PYVER}/${PYPY_PV}"
+ doins *.h
+ pax-mark m "${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+}
diff --git a/dev-lang/pypy3-exe/pypy3-exe-3.12.8.0.1.ebuild b/dev-lang/pypy3-exe/pypy3-exe-3.12.8.0.1.ebuild
new file mode 100644
index 000000000000..962ed307e575
--- /dev/null
+++ b/dev-lang/pypy3-exe/pypy3-exe-3.12.8.0.1.ebuild
@@ -0,0 +1,133 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit check-reqs pax-utils toolchain-funcs
+
+PYVER=$(ver_cut 1-2)
+PATCHSET_PV=$(ver_cut 3-)
+PYPY_PV=${PATCHSET_PV%_p*}
+
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PATCHSET_PV/_rc/rc}"
+
+DESCRIPTION="PyPy3.12 executable (build from source)"
+HOMEPAGE="
+ https://pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.gz
+ https://distfiles.gentoo.org/pub/proj/python/patchsets/pypy${PYVER}/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+SLOT="${PV%_p*}"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE="+jit low-memory ncurses cpu_flags_x86_sse2"
+
+RDEPEND="
+ app-arch/bzip2:0=
+ dev-libs/expat:0=
+ dev-libs/libffi:0=
+ >=virtual/zlib-1.1.3:=
+ virtual/libintl:0=
+ ncurses? ( sys-libs/ncurses:0= )
+ !dev-lang/pypy3-exe-bin:${SLOT}
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ >=dev-lang/pypy-2.7.8.0.0-r1:2.7
+ virtual/pkgconfig
+"
+
+check_env() {
+ if use low-memory; then
+ CHECKREQS_MEMORY="1750M"
+ use amd64 && CHECKREQS_MEMORY="3500M"
+ else
+ CHECKREQS_MEMORY="3G"
+ use amd64 && CHECKREQS_MEMORY="6G"
+ fi
+
+ check-reqs_pkg_pretend
+}
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} != binary ]] && check_env
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && check_env
+}
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+ default
+}
+
+src_configure() {
+ tc-export CC
+
+ local jit_backend
+ if use jit; then
+ jit_backend='--jit-backend='
+
+ # We only need the explicit sse2 switch for x86.
+ # On other arches we can rely on autodetection which uses
+ # compiler macros. Plus, --jit-backend= doesn't accept all
+ # the modern values...
+
+ if use x86; then
+ if use cpu_flags_x86_sse2; then
+ jit_backend+=x86
+ else
+ jit_backend+=x86-without-sse2
+ fi
+ else
+ jit_backend+=auto
+ fi
+ fi
+
+ local args=(
+ --no-shared
+ $(usex jit -Ojit -O2)
+
+ ${jit_backend}
+
+ pypy/goal/targetpypystandalone
+ --withmod-bz2
+ $(usex ncurses --with{,out}mod-_minimal_curses)
+ )
+
+ local interp=( pypy )
+ if use low-memory; then
+ local -x PYPY_GC_MAX_DELTA=200MB
+ interp+=( --jit loop_longevity=300 )
+ fi
+
+ # translate into the C sources
+ # we're going to build them ourselves since otherwise pypy does not
+ # free up the unneeded memory before spawning the compiler
+ set -- "${interp[@]}" rpython/bin/rpython --batch --source "${args[@]}"
+ echo -e "\033[1m${@}\033[0m"
+ "${@}" || die "translation failed"
+}
+
+src_compile() {
+ emake -C "${T}"/usession*-0/testing_1
+}
+
+src_install() {
+ cd "${T}"/usession*-0 || die
+ newbin "testing_1/pypy${PYVER}-c" "pypy${PYVER}-c-${PYPY_PV}"
+ insinto "/usr/include/pypy${PYVER}/${PYPY_PV}"
+ doins *.h
+ pax-mark m "${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}"
+}