diff options
Diffstat (limited to 'dev-python/pypy3_10')
-rw-r--r-- | dev-python/pypy3_10/Manifest | 12 | ||||
-rw-r--r-- | dev-python/pypy3_10/metadata.xml | 4 | ||||
-rw-r--r-- | dev-python/pypy3_10/pypy3_10-7.3.16_p1.ebuild | 212 | ||||
-rw-r--r-- | dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild | 212 | ||||
-rw-r--r-- | dev-python/pypy3_10/pypy3_10-7.3.17-r1.ebuild | 221 | ||||
-rw-r--r-- | dev-python/pypy3_10/pypy3_10-7.3.17.ebuild | 212 | ||||
-rw-r--r-- | dev-python/pypy3_10/pypy3_10-7.3.17_p1.ebuild | 221 |
7 files changed, 1093 insertions, 1 deletions
diff --git a/dev-python/pypy3_10/Manifest b/dev-python/pypy3_10/Manifest index b8d7673f8426..908ddaf13aab 100644 --- a/dev-python/pypy3_10/Manifest +++ b/dev-python/pypy3_10/Manifest @@ -1,4 +1,14 @@ DIST pypy3.10-gentoo-patches-7.3.16.tar.xz 4752 BLAKE2B a5cd87f30c0b20bf5d49c3b5c979c12231d6b67750e777d4488093094d5998e6f0d9adba51c04704eb31d621089aeb12ee5a6b0a58dad0ecda0d60d2ecbdab6d SHA512 e2779841a3e56e384134416ce2a10e1e00a11d7c720023506370fb9f54363da6b7300b4019c121aa1874152b62d9679ebcd3dd679fd0dbd2bf524520990b6f38 +DIST pypy3.10-gentoo-patches-7.3.16_p1.tar.xz 7696 BLAKE2B d51dd45ec0fd2fd2d8e8f6afb6fdb227268d86ca03885991c085aa3b374bdbe01c909cd9c25981a89955c3fcfaf258f09470b5a5649b9235a74f37dadb9a891e SHA512 b71168518a103cccff4740efb51dfad4eaaf647d81aff727805f5ee9e2fdc6971749b69c17c72e7fd04c97bbf37777180870eb17077fb742f20130b4b00ed712 +DIST pypy3.10-gentoo-patches-7.3.16_p2.tar.xz 10348 BLAKE2B 93b2672e935e4a23e9fff70848f377211b4a0aff55384ffac59ba3b376af9d1ab1d1b3529a5148490dd6e8da55cc038390efa7e4120c60c7ea77d158da88b5bf SHA512 0bff294d8a0ed576204c00ef7befec0c960cef50eaf1130056aaed2a5dac63a8045db977c5fb4ff9c5eb1863e8df2cb9f4d608ab88cd6ffcc8bd4ab13f5d6ab2 +DIST pypy3.10-gentoo-patches-7.3.17.tar.xz 10340 BLAKE2B a9d7dc6a578dc50339574b2fcfff19e390293adfc8412592e4683fdd3ff415ed8da3ff809b00037659a6e218dc0b26efead7a2ae3c54b2c3487222144d5d9633 SHA512 b192685cc100cfb723492d29e89a522bb4ff041c78cbdfd170414e19713cf2a21c39ab8d4e1e9ca47da2559b2fed6df14f1122f96bc50dd117550c357046889a +DIST pypy3.10-gentoo-patches-7.3.17_p1.tar.xz 18104 BLAKE2B 4b6c8c012d34b7ead8f7499edbe4292f21d2d7437694341de0bfb5f74d0717a11eb1c302a60baeb3ab123851a2436657458dad47c2b86a81218eea12d6aa9344 SHA512 73e0733f07be79f444b2fbf18ca7dcad6a76368cb8c185eb630d82e6886ed909548bc1779bf618588e34a572b5d48be0f9a86fc5758d302cf3ff0e94649b4815 DIST pypy3.10-v7.3.16-src.tar.bz2 23358556 BLAKE2B 4eddae47dea1005b9450b9d3d23bd90782dffecdc252eff4fd3195a61e0e7ebbdafaf4c4b5d318c88534f152c1110c3bc4f76f43a7e711a859dd4330841a0e0b SHA512 5b941e3b5c7b0c7a50413e16122bad3e167dcc4ee159ce53e9716e9d5af79d600823f3d7442b7562bb568ff027723e22904fc0840dc06bd26e3da38c93cc5b94 +DIST pypy3.10-v7.3.17-src.tar.bz2 23350562 BLAKE2B 0a7a091976b352de61057f238fa386f767dd4d2fbcdcc0b4376066c20c2ad35d3818fa6e9e163ab5fd341856802e8ad1e2891decf5948c13cdb26726cd42019e SHA512 46e30845bbc73cf56f5033a24d3583253ce198522f3a28ae4e789884063ba167d401fc08ae7fc8c7769feed9cd942a8ab38961c8b8794d7fae8f9955479faa96 EBUILD pypy3_10-7.3.16.ebuild 6330 BLAKE2B a1bcc9080b3c0def956587509c10266550bf023963d2aadf812573ea7efdcabe3ce09092701f11753ea45464f29cd9725f50fb9d47332a234ec08b2bc90b6d90 SHA512 5c8010fee5d31f303514bd33a831d1f756543940c76e6dae0ed2b9a43bdda656321ea8b3245e4318ddd9bd33688307e3a17bd4b1a3cf6db5b9e43a1c75924f28 -MISC metadata.xml 529 BLAKE2B 4121978ab7ed8811781be50eb702082b54ce8e2da22b1cf24f009a64d14b1c644f1420467e7f74d48b65e9644b9100d6e55bd5da0907565a4dd0ba6fc4d029ee SHA512 c862efc8092df86bcf1399abb86081709829b9d3ce9564f8a4d0d8d5d59a4089f79a70156efc093fdf08a2b563cffc8c5aa3f51e33c87456369ae75a5cef3f1a +EBUILD pypy3_10-7.3.16_p1.ebuild 6330 BLAKE2B a1bcc9080b3c0def956587509c10266550bf023963d2aadf812573ea7efdcabe3ce09092701f11753ea45464f29cd9725f50fb9d47332a234ec08b2bc90b6d90 SHA512 5c8010fee5d31f303514bd33a831d1f756543940c76e6dae0ed2b9a43bdda656321ea8b3245e4318ddd9bd33688307e3a17bd4b1a3cf6db5b9e43a1c75924f28 +EBUILD pypy3_10-7.3.16_p2.ebuild 6330 BLAKE2B a1bcc9080b3c0def956587509c10266550bf023963d2aadf812573ea7efdcabe3ce09092701f11753ea45464f29cd9725f50fb9d47332a234ec08b2bc90b6d90 SHA512 5c8010fee5d31f303514bd33a831d1f756543940c76e6dae0ed2b9a43bdda656321ea8b3245e4318ddd9bd33688307e3a17bd4b1a3cf6db5b9e43a1c75924f28 +EBUILD pypy3_10-7.3.17-r1.ebuild 6655 BLAKE2B 7cb3a11447bb304c0d135ef44646e3ca962a50b49e3468c68cf01a4af34093c8c4c307eb8e7ce5423814432d10aa5d7b7d4e8ab7fc698a6148de6aba2f260f87 SHA512 a28ec9530db6e9c21ceeb32cabc7a51cf60c9b34adca71214577d764fd5ae9afea5be05962cae8a08ab9c50b58c21b748996aeb9c67be6b9ec4830df57b3911d +EBUILD pypy3_10-7.3.17.ebuild 6328 BLAKE2B 9cbd5073fe863d95bd92d86086891f6fd1b1ec6ab9891ce5ca068a2e2a283554cb55931b50efe8f9161c8e266a986c916324cbdd8cf7ff6696ea95bab3c50182 SHA512 b3fbd4e63d90ee288b11e74aa19fee5dc8e248514463631364f0c57b580dfd68974708bbea15106c030aa7fcd72c4b913f44b86cf37501fb425fb02d3ca70cdc +EBUILD pypy3_10-7.3.17_p1.ebuild 6653 BLAKE2B 3fa000ce70a18aafc1af8d009e384b63bd7663e43c8043f12e2616791a0ca69ac896cf7b71f2f386ce7503f13e4a4e4ecfb90c4081278f82175f433e7b8d2d8a SHA512 500c58625adad8a5b5f3ec347fb624fe80a602621cb9e5b0211424e223781c33131b78dee43b6763cd14c16371bd5a957dd5c554c6a1b0f2baec7990518aadcb +MISC metadata.xml 669 BLAKE2B 451d043640c7347d9c29d91fcc43ea464a24a3ba0b619784c4c77ab352c4bd6fcd3d59c11e4133a38b2ab47bf26d6d859f8928f2cdb87311bb9724c322164d1c SHA512 fc90f500bf1220b7471cbb1f1debc5c39011f0f29e7ff756ba5880e9f91732cd79ad4b88394099a7bfbdacb35ce2419d32bbb3fa14f5c74ec1caae534583bc9d diff --git a/dev-python/pypy3_10/metadata.xml b/dev-python/pypy3_10/metadata.xml index 2a6a5bdac475..53e7be1f01ea 100644 --- a/dev-python/pypy3_10/metadata.xml +++ b/dev-python/pypy3_10/metadata.xml @@ -14,5 +14,9 @@ to bootstrap pip and setuptools (if disabled, it will be only possible to use venv `--without-pip`) </flag> + <flag name="test-install"> + Install the test suite packages, that are required to run + tests in a few reverse dependencies. + </flag> </use> </pkgmetadata> diff --git a/dev-python/pypy3_10/pypy3_10-7.3.16_p1.ebuild b/dev-python/pypy3_10/pypy3_10-7.3.16_p1.ebuild new file mode 100644 index 000000000000..5e7deb31db00 --- /dev/null +++ b/dev-python/pypy3_10/pypy3_10-7.3.16_p1.ebuild @@ -0,0 +1,212 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit multiprocessing pax-utils toolchain-funcs + +PYPY_PV=${PV%_p*} +PYVER=3.10 +MY_P="pypy${PYVER}-v${PYPY_PV/_}" +PATCHSET="pypy${PYVER}-gentoo-patches-${PV/_rc/rc}" + +DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language" +HOMEPAGE=" + https://www.pypy.org/ + https://github.com/pypy/pypy/ +" +SRC_URI=" + https://downloads.python.org/pypy/${MY_P}-src.tar.bz2 + https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2 + https://dev.gentoo.org/~mgorny/dist/python/${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="0/pypy310-pp73-384" +KEYWORDS="amd64 ~arm64 ~ppc64 x86 ~amd64-linux ~x86-linux" +IUSE="+ensurepip gdbm +jit ncurses sqlite tk" +# many tests are failing upstream +# see https://buildbot.pypy.org/summary?branch=py${PYVER} +RESTRICT="test" + +RDEPEND=" + || ( + >=dev-python/${PN}-exe-${PYPY_PV}:${PYPY_PV}[bzip2(+),ncurses?] + >=dev-python/${PN}-exe-bin-${PYPY_PV}:${PYPY_PV} + ) + dev-lang/python-exec[python_targets_pypy3(-)] + dev-libs/openssl:0= + dev-python/gentoo-common + ensurepip? ( dev-python/ensurepip-wheels ) + gdbm? ( sys-libs/gdbm:0= ) + sqlite? ( dev-db/sqlite:3= ) + tk? ( + dev-lang/tk:0= + dev-tcltk/tix:0= + ) +" +DEPEND=" + ${RDEPEND} +" + +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="pypy3"' > lib-python/3/epython.py || die + + einfo "Generating caches and CFFI modules ..." + + # 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 + + # 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=a4138e48 + 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 +} + +src_install() { + einfo "Installing PyPy ..." + dodir /usr/bin + dosym pypy${PYVER}-c-${PYPY_PV} /usr/bin/pypy${PYVER} + insinto /usr/lib/pypy${PYVER} + # 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 + + local dest=/usr/lib/pypy${PYVER} + 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 sqlite; then + rm -r "${ED}${dest}"/sqlite3 \ + "${ED}${dest}"/_sqlite3* \ + "${ED}${dest}"/test/test_sqlite.py || 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 + 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 +} diff --git a/dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild b/dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild new file mode 100644 index 000000000000..5e7deb31db00 --- /dev/null +++ b/dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild @@ -0,0 +1,212 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit multiprocessing pax-utils toolchain-funcs + +PYPY_PV=${PV%_p*} +PYVER=3.10 +MY_P="pypy${PYVER}-v${PYPY_PV/_}" +PATCHSET="pypy${PYVER}-gentoo-patches-${PV/_rc/rc}" + +DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language" +HOMEPAGE=" + https://www.pypy.org/ + https://github.com/pypy/pypy/ +" +SRC_URI=" + https://downloads.python.org/pypy/${MY_P}-src.tar.bz2 + https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2 + https://dev.gentoo.org/~mgorny/dist/python/${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="0/pypy310-pp73-384" +KEYWORDS="amd64 ~arm64 ~ppc64 x86 ~amd64-linux ~x86-linux" +IUSE="+ensurepip gdbm +jit ncurses sqlite tk" +# many tests are failing upstream +# see https://buildbot.pypy.org/summary?branch=py${PYVER} +RESTRICT="test" + +RDEPEND=" + || ( + >=dev-python/${PN}-exe-${PYPY_PV}:${PYPY_PV}[bzip2(+),ncurses?] + >=dev-python/${PN}-exe-bin-${PYPY_PV}:${PYPY_PV} + ) + dev-lang/python-exec[python_targets_pypy3(-)] + dev-libs/openssl:0= + dev-python/gentoo-common + ensurepip? ( dev-python/ensurepip-wheels ) + gdbm? ( sys-libs/gdbm:0= ) + sqlite? ( dev-db/sqlite:3= ) + tk? ( + dev-lang/tk:0= + dev-tcltk/tix:0= + ) +" +DEPEND=" + ${RDEPEND} +" + +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="pypy3"' > lib-python/3/epython.py || die + + einfo "Generating caches and CFFI modules ..." + + # 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 + + # 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=a4138e48 + 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 +} + +src_install() { + einfo "Installing PyPy ..." + dodir /usr/bin + dosym pypy${PYVER}-c-${PYPY_PV} /usr/bin/pypy${PYVER} + insinto /usr/lib/pypy${PYVER} + # 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 + + local dest=/usr/lib/pypy${PYVER} + 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 sqlite; then + rm -r "${ED}${dest}"/sqlite3 \ + "${ED}${dest}"/_sqlite3* \ + "${ED}${dest}"/test/test_sqlite.py || 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 + 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 +} diff --git a/dev-python/pypy3_10/pypy3_10-7.3.17-r1.ebuild b/dev-python/pypy3_10/pypy3_10-7.3.17-r1.ebuild new file mode 100644 index 000000000000..0771425196e7 --- /dev/null +++ b/dev-python/pypy3_10/pypy3_10-7.3.17-r1.ebuild @@ -0,0 +1,221 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit multiprocessing pax-utils toolchain-funcs + +PYPY_PV=${PV%_p*} +PYVER=3.10 +MY_P="pypy${PYVER}-v${PYPY_PV/_}" +PATCHSET="pypy${PYVER}-gentoo-patches-${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.bz2 + https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2 + https://dev.gentoo.org/~mgorny/dist/python/${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="0/pypy310-pp73-384" +KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86 ~amd64-linux ~x86-linux" +IUSE="+ensurepip gdbm +jit ncurses sqlite +test-install tk" +# many tests are failing upstream +# see https://buildbot.pypy.org/summary?branch=py${PYVER} +RESTRICT="test" + +RDEPEND=" + || ( + >=dev-python/${PN}-exe-${PYPY_PV}:${PYPY_PV}[bzip2(+),ncurses?] + >=dev-python/${PN}-exe-bin-${PYPY_PV}:${PYPY_PV} + ) + dev-lang/python-exec[python_targets_pypy3(-)] + dev-libs/openssl:0= + dev-python/gentoo-common + ensurepip? ( dev-python/ensurepip-wheels ) + gdbm? ( sys-libs/gdbm:0= ) + sqlite? ( dev-db/sqlite:3= ) + tk? ( + dev-lang/tk:0= + dev-tcltk/tix:0= + ) +" +DEPEND=" + ${RDEPEND} +" + +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="pypy3"' > lib-python/3/epython.py || die + + einfo "Generating caches and CFFI modules ..." + + # 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 + + # 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=a4138e48 + 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 +} + +src_install() { + einfo "Installing PyPy ..." + dodir /usr/bin + dosym pypy${PYVER}-c-${PYPY_PV} /usr/bin/pypy${PYVER} + insinto /usr/lib/pypy${PYVER} + # 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 + + local dest=/usr/lib/pypy${PYVER} + 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,sqlite3,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_sqlite.py || 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 +} diff --git a/dev-python/pypy3_10/pypy3_10-7.3.17.ebuild b/dev-python/pypy3_10/pypy3_10-7.3.17.ebuild new file mode 100644 index 000000000000..8b160362ba6a --- /dev/null +++ b/dev-python/pypy3_10/pypy3_10-7.3.17.ebuild @@ -0,0 +1,212 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit multiprocessing pax-utils toolchain-funcs + +PYPY_PV=${PV%_p*} +PYVER=3.10 +MY_P="pypy${PYVER}-v${PYPY_PV/_}" +PATCHSET="pypy${PYVER}-gentoo-patches-${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.bz2 + https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2 + https://dev.gentoo.org/~mgorny/dist/python/${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="0/pypy310-pp73-384" +KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86 ~amd64-linux ~x86-linux" +IUSE="+ensurepip gdbm +jit ncurses sqlite tk" +# many tests are failing upstream +# see https://buildbot.pypy.org/summary?branch=py${PYVER} +RESTRICT="test" + +RDEPEND=" + || ( + >=dev-python/${PN}-exe-${PYPY_PV}:${PYPY_PV}[bzip2(+),ncurses?] + >=dev-python/${PN}-exe-bin-${PYPY_PV}:${PYPY_PV} + ) + dev-lang/python-exec[python_targets_pypy3(-)] + dev-libs/openssl:0= + dev-python/gentoo-common + ensurepip? ( dev-python/ensurepip-wheels ) + gdbm? ( sys-libs/gdbm:0= ) + sqlite? ( dev-db/sqlite:3= ) + tk? ( + dev-lang/tk:0= + dev-tcltk/tix:0= + ) +" +DEPEND=" + ${RDEPEND} +" + +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="pypy3"' > lib-python/3/epython.py || die + + einfo "Generating caches and CFFI modules ..." + + # 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 + + # 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=a4138e48 + 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 +} + +src_install() { + einfo "Installing PyPy ..." + dodir /usr/bin + dosym pypy${PYVER}-c-${PYPY_PV} /usr/bin/pypy${PYVER} + insinto /usr/lib/pypy${PYVER} + # 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 + + local dest=/usr/lib/pypy${PYVER} + 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 sqlite; then + rm -r "${ED}${dest}"/sqlite3 \ + "${ED}${dest}"/_sqlite3* \ + "${ED}${dest}"/test/test_sqlite.py || 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 + 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 +} diff --git a/dev-python/pypy3_10/pypy3_10-7.3.17_p1.ebuild b/dev-python/pypy3_10/pypy3_10-7.3.17_p1.ebuild new file mode 100644 index 000000000000..e242373a66ec --- /dev/null +++ b/dev-python/pypy3_10/pypy3_10-7.3.17_p1.ebuild @@ -0,0 +1,221 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit multiprocessing pax-utils toolchain-funcs + +PYPY_PV=${PV%_p*} +PYVER=3.10 +MY_P="pypy${PYVER}-v${PYPY_PV/_}" +PATCHSET="pypy${PYVER}-gentoo-patches-${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.bz2 + https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2 + https://dev.gentoo.org/~mgorny/dist/python/${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="0/pypy310-pp73-384" +KEYWORDS="amd64 ~arm64 ~ppc64 x86 ~amd64-linux ~x86-linux" +IUSE="+ensurepip gdbm +jit ncurses sqlite +test-install tk" +# many tests are failing upstream +# see https://buildbot.pypy.org/summary?branch=py${PYVER} +RESTRICT="test" + +RDEPEND=" + || ( + >=dev-python/${PN}-exe-${PYPY_PV}:${PYPY_PV}[bzip2(+),ncurses?] + >=dev-python/${PN}-exe-bin-${PYPY_PV}:${PYPY_PV} + ) + dev-lang/python-exec[python_targets_pypy3(-)] + dev-libs/openssl:0= + dev-python/gentoo-common + ensurepip? ( dev-python/ensurepip-wheels ) + gdbm? ( sys-libs/gdbm:0= ) + sqlite? ( dev-db/sqlite:3= ) + tk? ( + dev-lang/tk:0= + dev-tcltk/tix:0= + ) +" +DEPEND=" + ${RDEPEND} +" + +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="pypy3"' > lib-python/3/epython.py || die + + einfo "Generating caches and CFFI modules ..." + + # 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 + + # 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=a4138e48 + 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 +} + +src_install() { + einfo "Installing PyPy ..." + dodir /usr/bin + dosym pypy${PYVER}-c-${PYPY_PV} /usr/bin/pypy${PYVER} + insinto /usr/lib/pypy${PYVER} + # 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 + + local dest=/usr/lib/pypy${PYVER} + 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,sqlite3,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_sqlite.py || 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 +} |