Gentoo Archives: gentoo-commits

From: "Michał Górny" <mgorny@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-python/pypy3/
Date: Wed, 03 Aug 2022 06:52:10
Message-Id: 1659509524.584fe12e550b3139a471dac821bb3a45b67fb908.mgorny@gentoo
1 commit: 584fe12e550b3139a471dac821bb3a45b67fb908
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Wed Aug 3 06:42:23 2022 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Wed Aug 3 06:52:04 2022 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=584fe12e
7
8 dev-python/pypy3: Backport ensurepip unbundling to 7.3.9_p4
9
10 Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
11
12 dev-python/pypy3/Manifest | 1 +
13 dev-python/pypy3/metadata.xml | 7 ++
14 dev-python/pypy3/pypy3-7.3.9_p4.ebuild | 210 +++++++++++++++++++++++++++++++++
15 3 files changed, 218 insertions(+)
16
17 diff --git a/dev-python/pypy3/Manifest b/dev-python/pypy3/Manifest
18 index f9e335f84813..3cf493466a5f 100644
19 --- a/dev-python/pypy3/Manifest
20 +++ b/dev-python/pypy3/Manifest
21 @@ -1,4 +1,5 @@
22 DIST pypy3.9-gentoo-patches-7.3.9_p1.tar.xz 3952 BLAKE2B 20ff145749d24f15214c0c78f3fdc5e1cdbfc307972ad9dbc03f1b9704b25ea962434aee0d58a882912374b45f726eb449f0abafd663bddf14867807951b0a7f SHA512 3ce7a126fb7c52754d3b65e3df0786c80a98522ce78ab44fd5f81cd84a41e8b5929df2d8e4f644ed6c2265ca5da397cd7f37d44944cd08f7c8ae1cc8a2fd7e0d
23 DIST pypy3.9-gentoo-patches-7.3.9_p2.tar.xz 4548 BLAKE2B 9acdd315d98b5147a21e9affcf4f4be86385cfe7e96a59a4aee1edb478c3c23990c7c846d7a1b268b616491d57346c939ddf02d4284f3b92f0f050e223eb85ba SHA512 28bc05b249f9f98501cb92354eabcdcd27987bfb6f4867bdda40752384db5ecf2204913c792785ce5a0e6ce588ef0044a179a3932da23205e8706cad065d95e2
24 DIST pypy3.9-gentoo-patches-7.3.9_p3.tar.xz 5296 BLAKE2B 2422e7d74c563d7328e5bc5c131d13f0cb41f133e06a514e56ad89d2cc8e0b9c57d4379d0e8810486e5e34ec2807a74e9553768a493ffe54fc27d404977097d3 SHA512 3470efdd50ba10e2137b4661c940a3aa807b804ef582a5201507227573637171981bd597b3b40faa3606890f3f51fb8c43ff70628de924a67e2c1226beda9269
25 +DIST pypy3.9-gentoo-patches-7.3.9_p4.tar.xz 8664 BLAKE2B cccb62bb7957ee21f45eb65a307f255f61ba097cf9313517743bd0c4471d4b4e7c4c2bf2509fffd7584be6efbb467b39aeaec5e70b597844ddd40bd2184f65e8 SHA512 cf9722c5ada7544608b95cb94da4d119fa5371def760c52baaffe57ee0128c729e41a78bbcbcce6677eb88ad063d3f0572667ab8889cf68ee8be7e578ca420c7
26 DIST pypy3.9-v7.3.9-src.tar.bz2 26976726 BLAKE2B bf1ed21c575901abac020120aaff07ab57f1404713211b19cbd1eb4d6ffc675b7933be8c6fffc2b69ab467963d6598534cd5aa90c02feddad596611d2a6b6581 SHA512 83f8a6a2da351c190d2d224242cbc35e35529c7a8e8d842eaf5c945cbce2e172b02a340f32af3d49df8d5288370d794d5bc95fc12dd4a13d817c925abf06198a
27
28 diff --git a/dev-python/pypy3/metadata.xml b/dev-python/pypy3/metadata.xml
29 index efd7c8c21836..6bbdf5133f0c 100644
30 --- a/dev-python/pypy3/metadata.xml
31 +++ b/dev-python/pypy3/metadata.xml
32 @@ -5,4 +5,11 @@
33 <email>python@g.o</email>
34 <name>Python</name>
35 </maintainer>
36 + <use>
37 + <flag name="ensurepip">
38 + Install the ensurepip module that uses bundled wheels
39 + to bootstrap pip and setuptools (if disabled, it will
40 + be only possible to use venv `--without-pip`)
41 + </flag>
42 + </use>
43 </pkgmetadata>
44
45 diff --git a/dev-python/pypy3/pypy3-7.3.9_p4.ebuild b/dev-python/pypy3/pypy3-7.3.9_p4.ebuild
46 new file mode 100644
47 index 000000000000..62da106fee36
48 --- /dev/null
49 +++ b/dev-python/pypy3/pypy3-7.3.9_p4.ebuild
50 @@ -0,0 +1,210 @@
51 +# Copyright 1999-2022 Gentoo Authors
52 +# Distributed under the terms of the GNU General Public License v2
53 +
54 +EAPI=8
55 +
56 +PYTHON_COMPAT=( python2_7 )
57 +inherit pax-utils python-any-r1 toolchain-funcs
58 +
59 +PYPY_PV=${PV%_p*}
60 +MY_P=pypy3.9-v${PYPY_PV/_rc/rc}
61 +PATCHSET="pypy3.9-gentoo-patches-${PV/_rc/rc}"
62 +
63 +DESCRIPTION="A fast, compliant alternative implementation of the Python (3.9) language"
64 +HOMEPAGE="
65 + https://www.pypy.org/
66 + https://foss.heptapod.net/pypy/pypy/
67 +"
68 +SRC_URI="
69 + https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2
70 + https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
71 +"
72 +S="${WORKDIR}/${MY_P}-src"
73 +
74 +LICENSE="MIT"
75 +# pypy3 -c 'import sysconfig; print(sysconfig.get_config_var("SOABI"))'
76 +# also check pypy/interpreter/pycode.py -> pypy_incremental_magic
77 +SLOT="0/pypy39-pp73-336"
78 +KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86 ~amd64-linux ~x86-linux"
79 +IUSE="bzip2 +ensurepip gdbm +jit ncurses sqlite test tk"
80 +# many tests are failing upstream
81 +# see https://buildbot.pypy.org/summary?branch=py3.9
82 +RESTRICT="test"
83 +
84 +RDEPEND="
85 + || (
86 + >=dev-python/pypy3-exe-${PYPY_PV}_p3:3.9-${PYPY_PV}[bzip2?,ncurses?]
87 + >=dev-python/pypy3-exe-bin-${PYPY_PV}_p3:3.9-${PYPY_PV}
88 + )
89 + dev-lang/python-exec[python_targets_pypy3(-)]
90 + dev-libs/openssl:0=
91 + ensurepip? ( dev-python/ensurepip-wheels )
92 + gdbm? ( sys-libs/gdbm:0= )
93 + sqlite? ( dev-db/sqlite:3= )
94 + tk? (
95 + dev-lang/tk:0=
96 + dev-tcltk/tix:0=
97 + )
98 + !<dev-python/pypy3-bin-7.3.0:0
99 +"
100 +DEPEND="
101 + ${RDEPEND}
102 + test? (
103 + ${PYTHON_DEPS}
104 + !!dev-python/pytest-forked
105 + )
106 +"
107 +
108 +pkg_setup() {
109 + use test && python-any-r1_pkg_setup
110 +}
111 +
112 +src_prepare() {
113 + local PATCHES=(
114 + "${WORKDIR}/${PATCHSET}"
115 + )
116 + default
117 +
118 + eapply_user
119 +}
120 +
121 +src_configure() {
122 + tc-export CC
123 +}
124 +
125 +src_compile() {
126 + mkdir bin || die
127 + # switch to the layout expected for cffi module builds
128 + mkdir include/pypy3.9 || die
129 + # copy over to make sys.prefix happy
130 + cp -p "${BROOT}"/usr/bin/pypy3.9-c-${PYPY_PV} pypy3.9-c || die
131 + cp -p "${BROOT}"/usr/include/pypy3.9/${PYPY_PV}/* include/pypy3.9/ || die
132 + # (not installed by pypy-exe)
133 + rm pypy/module/cpyext/include/_numpypy/numpy/README || die
134 + mv pypy/module/cpyext/include/* include/pypy3.9/ || die
135 + mv pypy/module/cpyext/parse/*.h include/pypy3.9/ || die
136 + pax-mark m pypy3.9-c
137 +
138 + # verify the subslot
139 + local soabi=$(
140 + ./pypy3.9-c - <<-EOF
141 + import importlib.util
142 + import sysconfig
143 + soabi = sysconfig.get_config_var("SOABI")
144 + magic = importlib.util._RAW_MAGIC_NUMBER & 0xffff
145 + print(f"{soabi}-{magic}")
146 + EOF
147 + )
148 + [[ ${soabi} == ${SLOT#*/} ]] || die "update subslot to ${soabi}"
149 +
150 + # Add epython.py to the distribution
151 + echo "EPYTHON='${EPYTHON}'" > lib-python/3/epython.py || die
152 +
153 + einfo "Generating caches and CFFI modules ..."
154 +
155 + # Generate Grammar and PatternGrammar pickles.
156 + ./pypy3.9-c - <<-EOF || die "Generation of Grammar and PatternGrammar pickles failed"
157 + import lib2to3.pygram
158 + import lib2to3.patcomp
159 + lib2to3.patcomp.PatternCompiler()
160 + EOF
161 +
162 + # Generate cffi modules
163 + # Please keep in sync with pypy/tool/build_cffi_imports.py!
164 + # (NB: we build CFFI modules first to avoid error log when importing
165 + # build_cffi_imports).
166 + cffi_targets=( pypy_util blake2/_blake2 sha3/_sha3 ssl
167 + audioop syslog pwdgrp resource lzma posixshmem )
168 + use gdbm && cffi_targets+=( gdbm )
169 + use ncurses && cffi_targets+=( curses )
170 + use sqlite && cffi_targets+=( sqlite3 )
171 + use tk && cffi_targets+=( tkinter/tklib )
172 +
173 + local t
174 + # all modules except tkinter output to .
175 + # tkinter outputs to the correct dir ...
176 + cd lib_pypy || die
177 + for t in "${cffi_targets[@]}"; do
178 + # tkinter doesn't work via -m
179 + ../pypy3.9-c "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
180 + done
181 +
182 + # Verify that CFFI module list is up-to-date
183 + local expected_cksum=63d4659f
184 + local local_cksum=$(
185 + ../pypy3.9-c - <<-EOF
186 + import binascii
187 + import json
188 + from pypy_tools.build_cffi_imports import cffi_build_scripts as x
189 + print("%08x" % (binascii.crc32(json.dumps(x).encode()),))
190 + EOF
191 + )
192 + if [[ ${local_cksum} != ${expected_cksum} ]]; then
193 + die "Please verify cffi_targets and update checksum to ${local_cksum}"
194 + fi
195 +
196 + # Cleanup temporary objects
197 + find -name "*_cffi.[co]" -delete || die
198 + find -type d -empty -delete || die
199 +}
200 +
201 +src_test() {
202 + # (unset)
203 + local -x PYTHONDONTWRITEBYTECODE=
204 + local -x COLUMNS=80
205 +
206 + # Test runner requires Python 2 too. However, it spawns PyPy3
207 + # internally so that we end up testing the correct interpreter.
208 + # (--deselect for failing doctests)
209 + "${EPYTHON}" ./pypy/test_all.py --pypy=./pypy3.9-c -vv lib-python || die
210 +}
211 +
212 +src_install() {
213 + einfo "Installing PyPy ..."
214 + dodir /usr/bin
215 + dosym pypy3.9-c-${PYPY_PV} /usr/bin/pypy3.9
216 + dosym pypy3.9 /usr/bin/pypy3
217 + insinto /usr/lib/pypy3.9
218 + # preserve mtimes to avoid obsoleting caches
219 + insopts -p
220 + doins -r lib-python/3/. lib_pypy/.
221 + insinto /usr/include
222 + doins -r include/pypy3.9
223 +
224 + # replace copied headers with symlinks
225 + for x in "${BROOT}"/usr/include/pypy3.9/${PYPY_PV}/*; do
226 + dosym "${PYPY_PV}/${x##*/}" "/usr/include/pypy3.9/${x##*/}"
227 + done
228 +
229 + dodoc README.rst
230 +
231 + local dest=/usr/lib/pypy3.9
232 + rm -r "${ED}${dest}"/ensurepip/_bundled || die
233 + if ! use ensurepip; then
234 + rm -r "${ED}${dest}"/ensurepip || die
235 + fi
236 + if ! use gdbm; then
237 + rm -r "${ED}${dest}"/_gdbm* || die
238 + fi
239 + if ! use sqlite; then
240 + rm -r "${ED}${dest}"/sqlite3 \
241 + "${ED}${dest}"/_sqlite3* \
242 + "${ED}${dest}"/test/test_sqlite.py || die
243 + fi
244 + if ! use tk; then
245 + rm -r "${ED}${dest}"/{idlelib,tkinter} \
246 + "${ED}${dest}"/_tkinter \
247 + "${ED}${dest}"/test/test_{tcl,tk,ttk*}.py || die
248 + fi
249 +
250 + local -x EPYTHON=pypy3
251 + local -x PYTHON=${ED}/usr/bin/pypy3.9-c-${PYPY_PV}
252 + # temporarily copy to build tree to facilitate module builds
253 + cp -p "${BROOT}/usr/bin/pypy3.9-c-${PYPY_PV}" "${PYTHON}" || die
254 +
255 + einfo "Byte-compiling Python standard library..."
256 + python_optimize "${ED}${dest}"
257 +
258 + # remove to avoid collisions
259 + rm "${PYTHON}" || die
260 +}