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/pypy/
Date: Fri, 27 Nov 2015 19:50:02
Message-Id: 1448653769.fe012f00fe4188f54ede41334f9d6bc0475f3be7.mgorny@gentoo
1 commit: fe012f00fe4188f54ede41334f9d6bc0475f3be7
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Fri Nov 27 16:43:17 2015 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Fri Nov 27 19:49:29 2015 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=fe012f00
7
8 dev-python/pypy: Bump to 4.0.1
9
10 dev-python/pypy/Manifest | 1 +
11 dev-python/pypy/pypy-4.0.1.ebuild | 252 ++++++++++++++++++++++++++++++++++++++
12 2 files changed, 253 insertions(+)
13
14 diff --git a/dev-python/pypy/Manifest b/dev-python/pypy/Manifest
15 index f5e2f43..09e206b 100644
16 --- a/dev-python/pypy/Manifest
17 +++ b/dev-python/pypy/Manifest
18 @@ -1,3 +1,4 @@
19 DIST pypy-2.6.0-src.tar.bz2 16858400 SHA256 9bf353f22d25e97a85a6d3766619966055edea1ea1b2218445d683a8ad0399d9 SHA512 82a6a44c0c551a1291215394610e5331cf83216b38ac9f1a79a3eab53ba2933b121c3154b58cead814c73a1da1fc95d895324bb0c43e8e0429438b0dea527cc4 WHIRLPOOL e536ff5d3b393c6834fd721f383318b5dcef79046f475b0f1fe737c67c56e8769cabc0a35f553da5dc475a255c5711de01bd6d42e541cabbab3b9e30f20c9a5c
20 DIST pypy-4.0.0-src.tar.bz2 17244624 SHA256 acff480e44ce92acd057f2e786775af36dc3c2cd12e9efc60a1ac6a562ad7b4d SHA512 2bbdc2536a32b0aa28f7b12ec3d879ed28afe984fad38635bc3e1d950a9fe198cfbaf9b554f0fa245e7fd512ec7a76297f05a1d3e17f73fb49e8506561190f5b WHIRLPOOL e94bdf5e8ea2cbab8e25d37bb7cb36b9bae773ec051d603cfce784e0fd8e591ed16e6896f49d14d9ae094c5f613a0ba871380c8adc2a1cf0023157e3e2a51f52
21 +DIST pypy-4.0.1-src.tar.bz2 17172844 SHA256 29f5aa6ba17b34fd980e85172dfeb4086fdc373ad392b1feff2677d2d8aea23c SHA512 66358cc3fe9ccb402b717379c48731aca8f9f85a1a754a54e3a060113398955b87a3f3048ba731a93be4b49c0f5c7e3bac49dc4523263e1bf4f4b5149d5db5c4 WHIRLPOOL 656a6c60aeb26cb6355db121a92bafcf2b744a7f09dccf21b4a16052c0117d239891ccf6762fcb4fee7f913862263c589becd5984498edc4a8b6d55784957994
22 DIST python-gentoo-patches-2.7.10-0.tar.xz 12892 SHA256 c9a838bd62ae50cc385da23a837acfd05f2b74e4f086c9c76eb4d3aa5366ef6d SHA512 5f100944635e360691dc0a2b340a906646c4ae9ee558246ddffc56e8b15d389f25f1fbdc1db4cc08e7d29560d04d66b058b3904902899d58ecae8c408ebdf056 WHIRLPOOL f69e9a518bb7ee50c1b262a21e70e1e2443f859ee6d2f4fa84421120dbd054a06ce8dd6cfea8512cbc64bce806322b879c25c561d5eb05e1ba6cc15035b373a9
23
24 diff --git a/dev-python/pypy/pypy-4.0.1.ebuild b/dev-python/pypy/pypy-4.0.1.ebuild
25 new file mode 100644
26 index 0000000..19988bf
27 --- /dev/null
28 +++ b/dev-python/pypy/pypy-4.0.1.ebuild
29 @@ -0,0 +1,252 @@
30 +# Copyright 1999-2015 Gentoo Foundation
31 +# Distributed under the terms of the GNU General Public License v2
32 +# $Id$
33 +
34 +EAPI=5
35 +
36 +PYTHON_COMPAT=( python2_7 pypy )
37 +inherit check-reqs eutils multilib multiprocessing pax-utils python-any-r1 toolchain-funcs versionator
38 +
39 +CPY_PATCHSET_VERSION="2.7.10-0"
40 +
41 +DESCRIPTION="A fast, compliant alternative implementation of the Python language"
42 +HOMEPAGE="http://pypy.org/"
43 +SRC_URI="https://bitbucket.org/pypy/pypy/downloads/${P}-src.tar.bz2
44 + https://dev.gentoo.org/~floppym/python/python-gentoo-patches-${CPY_PATCHSET_VERSION}.tar.xz"
45 +
46 +LICENSE="MIT"
47 +SLOT="0/$(get_version_component_range 1-2 ${PV})"
48 +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
49 +IUSE="bzip2 doc gdbm +jit low-memory ncurses sandbox shadowstack sqlite cpu_flags_x86_sse2 test tk"
50 +
51 +RDEPEND=">=sys-libs/zlib-1.1.3:0=
52 + virtual/libffi:0=
53 + virtual/libintl:0=
54 + dev-libs/expat:0=
55 + dev-libs/openssl:0=[-bindist]
56 + bzip2? ( app-arch/bzip2:0= )
57 + gdbm? ( sys-libs/gdbm:0= )
58 + ncurses? ( sys-libs/ncurses:0= )
59 + sqlite? ( dev-db/sqlite:3= )
60 + tk? (
61 + dev-lang/tk:0=
62 + dev-tcltk/tix:0=
63 + )
64 + !dev-python/pypy-bin:0"
65 +DEPEND="${RDEPEND}
66 + doc? ( dev-python/sphinx )
67 + ${PYTHON_DEPS}
68 + test? ( dev-python/pytest )"
69 +PDEPEND="app-admin/python-updater"
70 +
71 +S="${WORKDIR}/${P}-src"
72 +
73 +pkg_pretend() {
74 + if [[ ${MERGE_TYPE} != binary ]]; then
75 + if use low-memory; then
76 + if ! python_is_installed pypy; then
77 + eerror "USE=low-memory requires a (possibly old) version of dev-python/pypy"
78 + eerror "or dev-python/pypy-bin being installed. Please install it using e.g.:"
79 + eerror
80 + eerror " $ emerge -1v dev-python/pypy-bin"
81 + eerror
82 + eerror "before attempting to build dev-python/pypy[low-memory]."
83 + die "dev-python/pypy-bin (or dev-python/pypy) needs to be installed for USE=low-memory"
84 + fi
85 +
86 + CHECKREQS_MEMORY="1750M"
87 + use amd64 && CHECKREQS_MEMORY="3500M"
88 + else
89 + CHECKREQS_MEMORY="3G"
90 + use amd64 && CHECKREQS_MEMORY="6G"
91 + fi
92 +
93 + check-reqs_pkg_pretend
94 + fi
95 +}
96 +
97 +pkg_setup() {
98 + if [[ ${MERGE_TYPE} != binary ]]; then
99 + pkg_pretend
100 +
101 + if python_is_installed pypy; then
102 + if [[ ! ${EPYTHON} || ${EPYTHON} == pypy ]] || use low-memory; then
103 + einfo "Using already-installed PyPy to perform the translation."
104 + local EPYTHON=pypy
105 + else
106 + einfo "Using ${EPYTHON} to perform the translation. Please note that upstream"
107 + einfo "recommends using PyPy for that. If you wish to do so, please unset"
108 + einfo "the EPYTHON variable."
109 + fi
110 + fi
111 +
112 + python-any-r1_pkg_setup
113 + fi
114 +}
115 +
116 +src_prepare() {
117 + epatch "${FILESDIR}/4.0.0-gentoo-path.patch" \
118 + "${FILESDIR}/1.9-distutils.unixccompiler.UnixCCompiler.runtime_library_dir_option.patch" \
119 + "${FILESDIR}"/2.5.0-shared-lib.patch # 517002
120 +
121 + sed -e "s^@EPREFIX@^${EPREFIX}^" \
122 + -e "s^@libdir@^$(get_libdir)^" \
123 + -i lib-python/2.7/distutils/command/install.py || die
124 +
125 + # apply CPython stdlib patches
126 + pushd lib-python/2.7 > /dev/null || die
127 + epatch "${FILESDIR}"/2.5.0_all_distutils_cxx.patch \
128 + "${WORKDIR}"/patches/22_all_turkish_locale.patch \
129 + "${WORKDIR}"/patches/62_all_xml.use_pyxml.patch
130 + popd > /dev/null || die
131 +
132 + epatch_user
133 +}
134 +
135 +src_compile() {
136 + tc-export CC
137 +
138 + local jit_backend
139 + if use jit; then
140 + jit_backend='--jit-backend='
141 +
142 + # We only need the explicit sse2 switch for x86.
143 + # On other arches we can rely on autodetection which uses
144 + # compiler macros. Plus, --jit-backend= doesn't accept all
145 + # the modern values...
146 +
147 + if use x86; then
148 + if use cpu_flags_x86_sse2; then
149 + jit_backend+=x86
150 + else
151 + jit_backend+=x86-without-sse2
152 + fi
153 + else
154 + jit_backend+=auto
155 + fi
156 + fi
157 +
158 + local args=(
159 + --shared
160 + $(usex jit -Ojit -O2)
161 + $(usex shadowstack --gcrootfinder=shadowstack '')
162 + $(usex sandbox --sandbox '')
163 +
164 + ${jit_backend}
165 + --make-jobs=$(makeopts_jobs)
166 +
167 + pypy/goal/targetpypystandalone
168 + )
169 +
170 + # Avoid linking against libraries disabled by use flags
171 + local opts=(
172 + bzip2:bz2
173 + ncurses:_minimal_curses
174 + )
175 +
176 + local opt
177 + for opt in "${opts[@]}"; do
178 + local flag=${opt%:*}
179 + local mod=${opt#*:}
180 +
181 + args+=(
182 + $(usex ${flag} --withmod --withoutmod)-${mod}
183 + )
184 + done
185 +
186 + local interp=( "${PYTHON}" )
187 + if use low-memory; then
188 + interp=( env PYPY_GC_MAX_DELTA=200MB
189 + "${PYTHON}" --jit loop_longevity=300 )
190 + fi
191 +
192 + set -- "${interp[@]}" rpython/bin/rpython --batch "${args[@]}"
193 + echo -e "\033[1m${@}\033[0m"
194 + "${@}" || die "compile error"
195 +
196 + use doc && emake -C pypy/doc/ html
197 + pax-mark m "${ED%/}${INSDESTTREE}/pypy-c"
198 +}
199 +
200 +src_test() {
201 + # (unset)
202 + local -x PYTHONDONTWRITEBYTECODE
203 +
204 + ./pypy-c ./pypy/test_all.py --pypy=./pypy-c lib-python || die
205 +}
206 +
207 +src_install() {
208 + einfo "Installing PyPy ..."
209 + insinto "/usr/$(get_libdir)/pypy"
210 + doins -r include lib_pypy lib-python pypy-c libpypy-c.so
211 + fperms a+x ${INSDESTTREE}/pypy-c ${INSDESTTREE}/libpypy-c.so
212 + pax-mark m "${ED%/}${INSDESTTREE}/pypy-c" "${ED%/}${INSDESTTREE}/libpypy-c.so"
213 + dosym ../$(get_libdir)/pypy/pypy-c /usr/bin/pypy
214 + dodoc README.rst
215 +
216 + if ! use gdbm; then
217 + rm -r "${ED%/}${INSDESTTREE}"/lib_pypy/gdbm.py \
218 + "${ED%/}${INSDESTTREE}"/lib-python/*2.7/test/test_gdbm.py || die
219 + fi
220 + if ! use sqlite; then
221 + rm -r "${ED%/}${INSDESTTREE}"/lib-python/*2.7/sqlite3 \
222 + "${ED%/}${INSDESTTREE}"/lib_pypy/_sqlite3.py \
223 + "${ED%/}${INSDESTTREE}"/lib-python/*2.7/test/test_sqlite.py || die
224 + fi
225 + if ! use tk; then
226 + rm -r "${ED%/}${INSDESTTREE}"/lib-python/*2.7/{idlelib,lib-tk} \
227 + "${ED%/}${INSDESTTREE}"/lib_pypy/_tkinter \
228 + "${ED%/}${INSDESTTREE}"/lib-python/*2.7/test/test_{tcl,tk,ttk*}.py || die
229 + fi
230 +
231 + # Install docs
232 + use doc && dohtml -r pypy/doc/_build/html/
233 +
234 + einfo "Generating caches and byte-compiling ..."
235 +
236 + local -x PYTHON=${ED%/}${INSDESTTREE}/pypy-c
237 + local -x LD_LIBRARY_PATH="${ED%/}${INSDESTTREE}"
238 + # we can't use eclass function since PyPy is dumb and always gives
239 + # paths relative to the interpreter
240 + local PYTHON_SITEDIR=${EPREFIX}/usr/$(get_libdir)/pypy/site-packages
241 + python_export pypy EPYTHON
242 +
243 + echo "EPYTHON='${EPYTHON}'" > epython.py || die
244 + python_domodule epython.py
245 +
246 + # Generate Grammar and PatternGrammar pickles.
247 + "${PYTHON}" -c "import lib2to3.pygram, lib2to3.patcomp; lib2to3.patcomp.PatternCompiler()" \
248 + || die "Generation of Grammar and PatternGrammar pickles failed"
249 +
250 + # Generate cffi modules
251 + # Please keep in sync with pypy/tool/build_cffi_imports.py!
252 +#cffi_build_scripts = {
253 +# "sqlite3": "_sqlite3_build.py",
254 +# "audioop": "_audioop_build.py",
255 +# "tk": "_tkinter/tklib_build.py",
256 +# "curses": "_curses_build.py" if sys.platform != "win32" else None,
257 +# "syslog": "_syslog_build.py" if sys.platform != "win32" else None,
258 +# "gdbm": "_gdbm_build.py" if sys.platform != "win32" else None,
259 +# "pwdgrp": "_pwdgrp_build.py" if sys.platform != "win32" else None,
260 + cffi_targets=( audioop syslog pwdgrp )
261 + use gdbm && cffi_targets+=( gdbm )
262 + use ncurses && cffi_targets+=( curses )
263 + use sqlite && cffi_targets+=( sqlite3 )
264 + use tk && cffi_targets+=( tkinter/tklib )
265 +
266 + local t
267 + # all modules except tkinter output to .
268 + # tkinter outputs to the correct dir ...
269 + cd "${ED%/}${INSDESTTREE}"/lib_pypy || die
270 + for t in "${cffi_targets[@]}"; do
271 + # tkinter doesn't work via -m
272 + "${PYTHON}" "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
273 + done
274 +
275 + # Cleanup temporary objects
276 + find "${ED%/}${INSDESTTREE}" -name "_cffi_*.[co]" -delete || die
277 + find "${ED%/}${INSDESTTREE}" -type d -empty -delete || die
278 +
279 + # compile the installed modules
280 + python_optimize "${ED%/}${INSDESTTREE}"
281 +}