Gentoo Archives: gentoo-commits

From: Fabian Groffen <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/proj/prefix:master commit in: dev-lang/python/files/, dev-lang/python/
Date: Thu, 03 May 2018 10:39:30
Message-Id: 1525343957.75ef481b8914d32e491659fd40eeb7d5605024fa.grobian@gentoo
1 commit: 75ef481b8914d32e491659fd40eeb7d5605024fa
2 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
3 AuthorDate: Thu May 3 10:39:17 2018 +0000
4 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
5 CommitDate: Thu May 3 10:39:17 2018 +0000
6 URL: https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=75ef481b
7
8 dev-lang/python: sync/bump 3.4
9
10 Package-Manager: Portage-2.3.18-prefix, Repoman-2.3.6
11
12 dev-lang/python/Manifest | 3 +
13 dev-lang/python/files/3.4-getentropy-linux.patch | 40 ++
14 dev-lang/python/files/3.6-disable-nis.patch | 21 +
15 .../python/files/python-3.5.5-hash-unaligned.patch | 43 ++
16 dev-lang/python/python-3.4.8-r1.ebuild | 455 +++++++++++++++++++++
17 5 files changed, 562 insertions(+)
18
19 diff --git a/dev-lang/python/Manifest b/dev-lang/python/Manifest
20 index 274b181cfb..b4faac8990 100644
21 --- a/dev-lang/python/Manifest
22 +++ b/dev-lang/python/Manifest
23 @@ -2,13 +2,16 @@ DIST 7be648659ef46f33db6913ca0ca5a809219d5629.zip 9199 BLAKE2B 85803bc1677bd1665
24 DIST 8ee84829be03c2a1aa74f0f095c994c1f43f4688.zip 14239 BLAKE2B 3dd91f83e5886cb9ba5c1fd9f3da38ab521db70645fa187752cd784919d523d9bf59b61223ea1a455b6d9002ba88dac5bd834c8e943b121db84e30bbb0f65204 SHA512 2f3ada7ff2bd97f90e3b972b681624ddf45c6d1db8d5e89f1313b4693db240a3c4e27c84bd2cf8ff71d5fb276b381ca6a3b8a6945f8db53ff3496cc4cc0b1d62
25 DIST Python-2.7.14.tar.xz 12576112 BLAKE2B e03c4134cfdd88678acc26f383130a598ce4de908ab6bb9ee00e9235de3e0fcb9e653fec86f39db64fb895ef797d33736524655c5b94fab2cde2544b966b2cfb SHA512 78310b0be6388ffa15f29a80afb9ab3c03a572cb094e9da00cfe391afadb51696e41f592eb658d6a31a2f422fdac8a55214a382cbb8cfb43d4a127d5b35ea7f9
26 DIST Python-3.4.5.tar.xz 14516820 BLAKE2B f9ddabd2df2241089d07756d3a8ba1c70096bee60d7cdef84041edbb20c488c3a573762441a4b7f543dbc0ce403ce84ff7d02e7d25699917bd014ab96deead85 SHA512 b548a5338d141b3086dea372fa2cc245ba5350ee9f0d1304ef6222dc45380b66d380b092e547d54206d56ca68563b95036f445f97f72bb0ef1d48f81a74a3d4c
27 +DIST Python-3.4.8.tar.xz 14576444 BLAKE2B 262b82fbc0e4852216d2edf05f9e9194bc93be7b14a2d6ef56789b808cff274e58b2fa7134955464fd05ab36181b5861aeca31e2e05b27f0f58ac66d145bd56b SHA512 478552c72efe606cb1993024b81839c51d01f1c949564c007ab2b76016f110e1f7bd418e5de3f4f93b466ce7dbe6583d3c150830d1f28f75e0809625b568a7ec
28 DIST Python-3.5.4.tar.xz 15332320 BLAKE2B 1fc3ba4eb1ed949062961c13fd1f9851c7f9cbeb4916c06a0389349ee2d4872b2b1c2d30138822e6329b6a715f35a66df704b7a04aa4adeb95b685b8d6e45d61 SHA512 dbbe2740ee1cce5404b7b6436a9b3887e15f415a1006efa22014ec7e5b1e48c43eed0ff98f6f5b365c527b8d2525be4ce72bbe404ce71c0835529fcd6f0267ff
29 DIST Python-3.6.3.tar.xz 16974296 BLAKE2B 8220fc0c2eaa315d3972085b0f531f169adb6cfad57023ad2c115603b5a484573ea3540eb3216edd0f4514256c8edb07469cf38d17727d69cdc15cdf1f601623 SHA512 32f24a3adcb7880003c7ecdc5e53e838e774adda76b308961d8215e28db630b2fa2828097817924c76afa4212b2df3362eb64d4e10f37c0147f512ec5aa8662b
30 DIST python-gentoo-patches-2.7.14-0.tar.xz 13428 BLAKE2B 0048e48ddaaa4bef08451354fde95a123042880f26dddc9267c7f9a90fd8abb40955e26ee8c9dfc5a1165556bb3e11585b27288e635d42a4000dd3d7654c41ad SHA512 6da5b52065752b54e9215d0f0809c75167dc3690d0e94fa21dd7595626925bc5c1dd065d31b3bd696d7087f3986de145d3a335a29eb7bd77442637a7ec2863c1
31 DIST python-gentoo-patches-3.4.5-0.tar.xz 12044 BLAKE2B 7fb3cc7dcd987debd5aa263d8e26b21aad439d8e3177c06c3683406a53bbda9652175673b09b6300f6a5b62148190cd8a75c9b65a5de04d770866733fcc0ebcb SHA512 108a4845667ecdf4001fcbeffab0cfbbac87439a449a7351428b0f3e2f159e3848ee0c0dfa45c9fba893b9f9584b33722fc8bb0bd7485a1d0909c3a35ede6ed8
32 +DIST python-gentoo-patches-3.4.6-0.tar.xz 11728 BLAKE2B 2a636f5500f4c7d354f421133f086cba9a25c30d5feaaa2dc25c9c588125d7c9097baecaa11f31548fa598b5dc137ca310ad86222510c0a955fa632a6d0a4b06 SHA512 41c22dc8f1db8800fc0b97eed2b27bf1873e5de1369bd4aecf7a7a91e609a78e45a4b56fc89d575317f33a7704c0c1cad1494e8a993415a198f256e8338f49ab
33 DIST python-gentoo-patches-3.5.4-0.tar.xz 11704 BLAKE2B 4a7d71feff18c7c8c109bed10748348484d314183c3de3ec950d5ca5ce7048bb322c470f3f5bff2d63eb7f2ed99c0fe75c621df050273d9d118681b28926061d SHA512 d395a87695f700598026038d6929ea5038abd7d494294037a4dfa02d5262203dbbaa6ae258a5a7f35ff5542f6266dcf69cc0b9c3df2a047cd2f6699a87e182ec
34 DIST python-gentoo-patches-3.6.2-0.tar.xz 10744 BLAKE2B 3075754627617ac2ceee879eaf1a0e6564505655cdbdff380233a09df701a6188d64fe1f6a8c642b1fb05ef3c460a07042b6a362d655cd02717d6d9ba47983a1 SHA512 2aac1700c541202aa4f43bff4cb521b996d52ab350133318abaddb43f4b6e20548f37de472ace8024ef325ebf63fdfff0d43f8aa1f717d3c56f974b7aa1764e3
35 DIST python-prefix-2.7.14-gentoo-patches-r0.tar.xz 14736 BLAKE2B 75422fc7390f559d9864f6e22a0b85982ccbdb07d5f2507db8e528285e56d1f11d4bc0b21a0b78d5340eafd562220d2f1b9d0a78b1f7c811c5689a426a81f9f3 SHA512 bf8e5039fff834d03a5a671269905f1ea10961995f2327ea023f6ad4d9b49bf210ec746ac6f45a01ff7501f1eb616013951d164410f6c64bce04df0e8b9715c8
36 DIST python-prefix-3.4.5-gentoo-patches-r0.tar.xz 12932 BLAKE2B 228cea390cd16f68579896ccec06025446d6378ee164090a7f8ab8174d28e73e35b0e311b95ab78be7a54b21eefce7c01238e3cb31fae1f49a1706476c5abda5 SHA512 e32556c63e48d8dacd86218945147d1bbbc5777a6bb3441373827da47771a8eb387f26885acd35343cc598c719c9feec63007144fc1fdd1aca253a2ec1a19825
37 +DIST python-prefix-3.4.8-gentoo-patches-r0.tar.xz 12928 BLAKE2B d270f27485a70b4186c0d509836f66e6ae8218270cbb0a473b4579de7a8d9fa16eb2387d0441979aa62fc88e54a52f863c58d91b3df64dd6a40ad4bc4236cbb2 SHA512 84554d2b320922d7ac6e20012f847a81d6501693a4d9f2146faa8764fca4fbc5e3bf1c0f352853f1ab34ed905ab13097f2e82285ada54c9b4e219e72b39804c2
38 DIST python-prefix-3.5.4-gentoo-patches-r0.tar.xz 12768 BLAKE2B ab0cbc5430e9588f71cfd7b001a07f9a77097262f17e1f980e3945e39855e1c9437117bf4eb2d424dadf701d37d025e09627d7efdbb9f8867714039f62f261a7 SHA512 334cd8990483f973386cc6bbc962d2843449c493f7d33349fcc8f68120e246c52ea80236c99685555974e439fa877b537b32ef7d181198f58950f5e9b835b1c5
39 DIST python-prefix-3.6.3-gentoo-patches-r0.tar.xz 12676 BLAKE2B 5221ae00d16db401d5674947923451d850978d930d9449d9b4f6ae6d117c26971e2f384c5a698b7acc8d62e6a6b673f4ec870da3788f87372593a5ac4897a227 SHA512 9d1673bc7b327be6b7e95491940eeeaa40db9e94f2183f4605a9a5a7fd2e187017164e9b2ef31f3bc8d694e467de6843706d3341b4ce24d4d8717513c246b62f
40
41 diff --git a/dev-lang/python/files/3.4-getentropy-linux.patch b/dev-lang/python/files/3.4-getentropy-linux.patch
42 new file mode 100644
43 index 0000000000..9f12389bb2
44 --- /dev/null
45 +++ b/dev-lang/python/files/3.4-getentropy-linux.patch
46 @@ -0,0 +1,40 @@
47 +From 5635d44079e1bbd9c495951ede8d078e7b8d67d5 Mon Sep 17 00:00:00 2001
48 +From: Victor Stinner <victor.stinner@×××××.com>
49 +Date: Mon, 9 Jan 2017 11:10:41 +0100
50 +Subject: [PATCH] Don't use getentropy() on Linux
51 +
52 +Issue #29188: Support glibc 2.24 on Linux: don't use getentropy() function but
53 +read from /dev/urandom to get random bytes, for example in os.urandom(). On
54 +Linux, getentropy() is implemented which getrandom() is blocking mode, whereas
55 +os.urandom() should not block.
56 +---
57 + Python/random.c | 13 ++++++++++---
58 + 1 file changed, 10 insertions(+), 3 deletions(-)
59 +
60 +diff --git a/Python/random.c b/Python/random.c
61 +index af3d0bd0d5..dc6400d3b8 100644
62 +--- a/Python/random.c
63 ++++ b/Python/random.c
64 +@@ -67,9 +67,16 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise)
65 + return 0;
66 + }
67 +
68 +-/* Issue #25003: Don' use getentropy() on Solaris (available since
69 +- * Solaris 11.3), it is blocking whereas os.urandom() should not block. */
70 +-#elif defined(HAVE_GETENTROPY) && !defined(sun)
71 ++/* Issue #25003: Don't use getentropy() on Solaris (available since
72 ++ Solaris 11.3), it is blocking whereas os.urandom() should not block.
73 ++
74 ++ Issue #29188: Don't use getentropy() on Linux since the glibc 2.24
75 ++ implements it with the getrandom() syscall which can fail with ENOSYS,
76 ++ and this error is not supported in py_getentropy() and getrandom() is called
77 ++ with flags=0 which blocks until system urandom is initialized, which is not
78 ++ the desired behaviour to seed the Python hash secret nor for os.urandom():
79 ++ see the PEP 524 which was only implemented in Python 3.6. */
80 ++#elif defined(HAVE_GETENTROPY) && !defined(sun) && !defined(linux)
81 + #define PY_GETENTROPY 1
82 +
83 + /* Fill buffer with size pseudo-random bytes generated by getentropy().
84 +--
85 +2.15.0.rc2
86 +
87
88 diff --git a/dev-lang/python/files/3.6-disable-nis.patch b/dev-lang/python/files/3.6-disable-nis.patch
89 new file mode 100644
90 index 0000000000..4e81847b50
91 --- /dev/null
92 +++ b/dev-lang/python/files/3.6-disable-nis.patch
93 @@ -0,0 +1,21 @@
94 +--- a/setup.py
95 ++++ b/setup.py
96 +@@ -1332,17 +1332,7 @@ class PyBuildExt(build_ext):
97 + # Jeremy Hylton's rlimit interface
98 + exts.append( Extension('resource', ['resource.c']) )
99 +
100 +- # Sun yellow pages. Some systems have the functions in libc.
101 +- if (host_platform not in ['cygwin', 'qnx6'] and
102 +- find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
103 +- if (self.compiler.find_library_file(lib_dirs, 'nsl')):
104 +- libs = ['nsl']
105 +- else:
106 +- libs = []
107 +- exts.append( Extension('nis', ['nismodule.c'],
108 +- libraries = libs) )
109 +- else:
110 +- missing.append('nis')
111 ++ missing.append('nis')
112 + else:
113 + missing.extend(['nis', 'resource', 'termios'])
114 +
115
116 diff --git a/dev-lang/python/files/python-3.5.5-hash-unaligned.patch b/dev-lang/python/files/python-3.5.5-hash-unaligned.patch
117 new file mode 100644
118 index 0000000000..c418f40b7d
119 --- /dev/null
120 +++ b/dev-lang/python/files/python-3.5.5-hash-unaligned.patch
121 @@ -0,0 +1,43 @@
122 +The hash implementation casts the input pointer to uint64_t* and directly reads
123 +from this, which may cause unaligned accesses. Use memcpy() instead so this code
124 +will not crash with SIGBUS on sparc.
125 +
126 +--- a/Python/pyhash.c 2017-11-29 10:21:20.283094068 +0100
127 ++++ b/Python/pyhash.c 2017-11-29 10:24:26.733087813 +0100
128 +@@ -372,7 +372,7 @@ siphash24(const void *src, Py_ssize_t sr
129 + PY_UINT64_T k0 = _le64toh(_Py_HashSecret.siphash.k0);
130 + PY_UINT64_T k1 = _le64toh(_Py_HashSecret.siphash.k1);
131 + PY_UINT64_T b = (PY_UINT64_T)src_sz << 56;
132 +- const PY_UINT64_T *in = (PY_UINT64_T*)src;
133 ++ const PY_UINT8_T *in = (PY_UINT8_T*)src;
134 +
135 + PY_UINT64_T v0 = k0 ^ 0x736f6d6570736575ULL;
136 + PY_UINT64_T v1 = k1 ^ 0x646f72616e646f6dULL;
137 +@@ -381,12 +381,14 @@ siphash24(const void *src, Py_ssize_t sr
138 +
139 + PY_UINT64_T t;
140 + PY_UINT8_T *pt;
141 +- PY_UINT8_T *m;
142 ++ const PY_UINT8_T *m;
143 +
144 + while (src_sz >= 8) {
145 +- PY_UINT64_T mi = _le64toh(*in);
146 +- in += 1;
147 +- src_sz -= 8;
148 ++ PY_UINT64_T mi;
149 ++ memcpy(&mi, in, sizeof(mi));
150 ++ mi = _le64toh(mi);
151 ++ in += sizeof(mi);
152 ++ src_sz -= sizeof(mi);
153 + v3 ^= mi;
154 + DOUBLE_ROUND(v0,v1,v2,v3);
155 + v0 ^= mi;
156 +@@ -394,7 +396,7 @@ siphash24(const void *src, Py_ssize_t sr
157 +
158 + t = 0;
159 + pt = (PY_UINT8_T *)&t;
160 +- m = (PY_UINT8_T *)in;
161 ++ m = in;
162 + switch (src_sz) {
163 + case 7: pt[6] = m[6];
164 + case 6: pt[5] = m[5];
165
166 diff --git a/dev-lang/python/python-3.4.8-r1.ebuild b/dev-lang/python/python-3.4.8-r1.ebuild
167 new file mode 100644
168 index 0000000000..1a724e53a4
169 --- /dev/null
170 +++ b/dev-lang/python/python-3.4.8-r1.ebuild
171 @@ -0,0 +1,455 @@
172 +# Copyright 1999-2018 Gentoo Foundation
173 +# Distributed under the terms of the GNU General Public License v2
174 +
175 +EAPI="5"
176 +WANT_LIBTOOL="none"
177 +
178 +inherit autotools eutils flag-o-matic multilib pax-utils python-utils-r1 toolchain-funcs multiprocessing
179 +
180 +MY_P="Python-${PV/_/}"
181 +PATCHSET_VERSION="3.4.6-0"
182 +PREFIX_PATCHREV="r0"
183 +CYGWINPORTS_GITREV="8ee84829be03c2a1aa74f0f095c994c1f43f4688"
184 +
185 +DESCRIPTION="An interpreted, interactive, object-oriented programming language"
186 +HOMEPAGE="https://www.python.org/"
187 +SRC_URI="https://www.python.org/ftp/python/${PV%_rc*}/${MY_P}.tar.xz
188 + https://dev.gentoo.org/~floppym/python/python-gentoo-patches-${PATCHSET_VERSION}.tar.xz
189 + https://dev.gentoo.org/~grobian/distfiles/python-prefix-${PV}-gentoo-patches-${PREFIX_PATCHREV}.tar.xz"
190 +
191 +[[ -n ${CYGWINPORTS_GITREV} ]] &&
192 +SRC_URI+=" elibc_Cygwin? ( https://github.com/cygwinports/python3/archive/${CYGWINPORTS_GITREV}.zip )"
193 +
194 +LICENSE="PSF-2"
195 +SLOT="3.4/3.4m"
196 +KEYWORDS="~ppc-aix ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
197 +IUSE="aqua bluetooth build elibc_uclibc examples gdbm hardened ipv6 libressl +ncurses +readline sqlite +ssl +threads tk wininst +xml"
198 +
199 +# Do not add a dependency on dev-lang/python to this ebuild.
200 +# If you need to apply a patch which requires python for bootstrapping, please
201 +# run the bootstrap code on your dev box and include the results in the
202 +# patchset. See bug 447752.
203 +
204 +RDEPEND="app-arch/bzip2:0=
205 + app-arch/xz-utils:0=
206 + >=sys-libs/zlib-1.1.3:0=
207 + virtual/libffi
208 + virtual/libintl
209 + gdbm? ( sys-libs/gdbm:0=[berkdb] )
210 + ncurses? (
211 + >=sys-libs/ncurses-5.2:0=
212 + readline? ( >=sys-libs/readline-4.1:0= )
213 + )
214 + sqlite? ( >=dev-db/sqlite-3.3.8:3= )
215 + ssl? (
216 + !libressl? ( dev-libs/openssl:0= )
217 + libressl? ( dev-libs/libressl:= )
218 + )
219 + tk? (
220 + >=dev-lang/tcl-8.0:0=
221 + >=dev-lang/tk-8.0:0=[-aqua]
222 + dev-tcltk/blt:0=
223 + dev-tcltk/tix
224 + )
225 + xml? ( >=dev-libs/expat-2.1:0= )
226 + !!<sys-apps/sandbox-2.6-r1"
227 +# bluetooth requires headers from bluez
228 +DEPEND="${RDEPEND}
229 + bluetooth? ( net-wireless/bluez )
230 + virtual/pkgconfig
231 + >=sys-devel/autoconf-2.65
232 + !sys-devel/gcc[libffi(-)]"
233 +RDEPEND+=" !build? ( app-misc/mime-types )"
234 +PDEPEND=">=app-eselect/eselect-python-20140125-r1"
235 +
236 +[[ -n ${CYGWINPORTS_GITREV} ]] &&
237 +DEPEND+=" elibc_Cygwin? ( app-arch/unzip )"
238 +
239 +S="${WORKDIR}/${MY_P}"
240 +
241 +PYVER=${SLOT%/*}
242 +
243 +src_prepare() {
244 + # Ensure that internal copies of expat, libffi and zlib are not used.
245 + rm -fr Modules/expat
246 + rm -fr Modules/_ctypes/libffi*
247 + rm -fr Modules/zlib
248 +
249 + if tc-is-cross-compiler; then
250 + # Invokes BUILDPYTHON, which is built for the host arch
251 + local EPATCH_EXCLUDE="*_regenerate_platform-specific_modules.patch"
252 + fi
253 +
254 + EPATCH_SUFFIX="patch" epatch "${WORKDIR}/patches"
255 + epatch "${FILESDIR}/${PN}-3.4.3-ncurses-pkg-config.patch"
256 + epatch "${FILESDIR}/${PN}-3.4.5-cross.patch"
257 + epatch "${FILESDIR}/3.4-getentropy-linux.patch"
258 + epatch "${FILESDIR}/3.6-disable-nis.patch"
259 + epatch "${FILESDIR}/python-3.5.5-hash-unaligned.patch"
260 +
261 + # Prefix' round of patches
262 + EPATCH_EXCLUDE="${excluded_patches}" EPATCH_SUFFIX="patch" \
263 + epatch "${WORKDIR}"/python-prefix-${PV}-gentoo-patches-${PREFIX_PATCHREV}
264 +
265 + # https://forums.developer.apple.com/thread/9233, bug #572726
266 + sed -i -e '/$(RUNSHARED) .\/regen/s/^/export RUNSHARED=$(RUNSHARED); /' \
267 + Makefile.pre.in || die
268 + sed -i -e '/python$EXE/s/^/env ${RUNSHARED} /' \
269 + Lib/plat-darwin/regen || die
270 +
271 + # we provide a fully working readline also on Darwin, so don't force
272 + # usage of less functional libedit
273 + sed -i -e 's/__APPLE__/__NO_MUCKING_AROUND__/g' Modules/readline.c || die
274 +
275 + # We may have wrapped /usr/ccs/bin/nm on AIX for long TMPDIR.
276 + sed -i -e "/^NM=.*nm$/s,^.*$,NM=$(tc-getNM)," Modules/makexp_aix || die
277 +
278 + # Make sure python doesn't use the host libffi.
279 + use prefix && epatch "${FILESDIR}/python-3.2-libffi-pkgconfig.patch"
280 +
281 + if [[ -n ${CYGWINPORTS_GITREV} ]] && use elibc_Cygwin; then
282 + local p d="${WORKDIR}/python3-${CYGWINPORTS_GITREV}"
283 + for p in $(
284 + eval "$(sed -ne '/PATCH_URI="/,/"/p' < "${d}"/python3.cygport)"
285 + echo ${PATCH_URI}
286 + ); do
287 + # dropped by 01_all_prefix-no-patch-invention.patch
288 + [[ ${p} == *-tkinter-* ]] && continue
289 + epatch "${d}/${p}"
290 + done
291 + fi
292 +
293 + epatch_user
294 +
295 + sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" \
296 + configure.ac \
297 + Lib/distutils/command/install.py \
298 + Lib/distutils/sysconfig.py \
299 + Lib/site.py \
300 + Lib/sysconfig.py \
301 + Lib/test/test_site.py \
302 + Makefile.pre.in \
303 + Modules/Setup.dist \
304 + Modules/getpath.c \
305 + setup.py || die "sed failed to replace @@GENTOO_LIBDIR@@"
306 +
307 + # workaround a development build env problem and muck around
308 + # framework install to get the best of both worlds (non-standard)
309 + sed -i \
310 + -e "s:FRAMEWORKINSTALLAPPSPREFIX=\":FRAMEWORKINSTALLAPPSPREFIX=\"${EPREFIX}:" \
311 + -e '/RUNSHARED=DYLD_FRAMEWORK_PATH/s/FRAMEWORK/LIBRARY/g' \
312 + configure.ac configure || die
313 + sed -i -e '/find/s/$/ || true/' Mac/PythonLauncher/Makefile.in || die
314 +
315 + # Disable ABI flags.
316 + sed -e "s/ABIFLAGS=\"\${ABIFLAGS}.*\"/:/" -i configure.ac || die "sed failed"
317 +
318 + eautoreconf
319 +}
320 +
321 +src_configure() {
322 + local disable
323 + # disable automagic bluetooth headers detection
324 + use bluetooth || export ac_cv_header_bluetooth_bluetooth_h=no
325 + use gdbm || disable+=" gdbm"
326 + use ncurses || disable+=" _curses _curses_panel"
327 + use readline || disable+=" readline"
328 + use sqlite || disable+=" _sqlite3"
329 + use ssl || export PYTHON_DISABLE_SSL="1"
330 + use tk || disable+=" _tkinter"
331 + use xml || disable+=" _elementtree pyexpat" # _elementtree uses pyexpat.
332 + export PYTHON_DISABLE_MODULES="${disable}"
333 +
334 + if ! use xml; then
335 + ewarn "You have configured Python without XML support."
336 + ewarn "This is NOT a recommended configuration as you"
337 + ewarn "may face problems parsing any XML documents."
338 + fi
339 +
340 + if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
341 + einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
342 + fi
343 +
344 + if [[ "$(gcc-major-version)" -ge 4 ]]; then
345 + append-flags -fwrapv
346 + fi
347 +
348 + filter-flags -malign-double
349 +
350 + # https://bugs.gentoo.org/show_bug.cgi?id=50309
351 + if is-flagq -O3; then
352 + is-flagq -fstack-protector-all && replace-flags -O3 -O2
353 + use hardened && replace-flags -O3 -O2
354 + fi
355 +
356 + # Export CC so even AIX will use gcc instead of xlc_r.
357 + # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
358 + tc-export CC CXX
359 +
360 + # The configure script fails to use pkg-config correctly.
361 + # http://bugs.python.org/issue15506
362 + export ac_cv_path_PKG_CONFIG=$(tc-getPKG_CONFIG)
363 +
364 + # Set LDFLAGS so we link modules with -lpython3.2 correctly.
365 + # Needed on FreeBSD unless Python 3.2 is already installed.
366 + # Please query BSD team before removing this!
367 + append-ldflags "-L."
368 +
369 + # make sure setup.py considers Prefix' paths before system ones
370 + use prefix && append-cppflags -I"${EPREFIX}"/usr/include
371 + use prefix && append-ldflags -L"${EPREFIX}"/lib -L"${EPREFIX}"/usr/lib
372 +
373 + local dbmliborder
374 + if use gdbm; then
375 + dbmliborder+="${dbmliborder:+:}gdbm"
376 + fi
377 +
378 + BUILD_DIR="${WORKDIR}/${CHOST}"
379 + mkdir -p "${BUILD_DIR}" || die
380 + cd "${BUILD_DIR}" || die
381 +
382 + if use aqua ; then
383 + ECONF_SOURCE="${S}" OPT="" \
384 + econf \
385 + --enable-framework="${EPREFIX}"/usr/lib \
386 + --config-cache
387 + fi
388 +
389 + # pymalloc #452720
390 + ECONF_SOURCE="${S}" OPT="" \
391 + econf \
392 + $(use aqua && echo --config-cache) \
393 + --with-fpectl \
394 + --enable-shared \
395 + $(use_enable ipv6) \
396 + $(use_with threads) \
397 + --infodir='${prefix}/share/info' \
398 + --mandir='${prefix}/share/man' \
399 + --with-computed-gotos \
400 + --with-dbmliborder="${dbmliborder}" \
401 + --with-libc="" \
402 + --enable-loadable-sqlite-extensions \
403 + --with-system-expat \
404 + --with-system-ffi \
405 + --without-ensurepip \
406 + --without-pymalloc
407 +
408 + if use threads && grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
409 + eerror "configure has detected that the sem_open function is broken."
410 + eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
411 + die "Broken sem_open function (bug 496328)"
412 + fi
413 +}
414 +
415 +src_compile() {
416 + # Ensure sed works as expected
417 + # https://bugs.gentoo.org/594768
418 + local -x LC_ALL=C
419 +
420 + # Avoid invoking pgen for cross-compiles.
421 + touch Include/graminit.h Python/graminit.c || die
422 +
423 + cd "${BUILD_DIR}" || die
424 +
425 + emake CPPFLAGS= CFLAGS= LDFLAGS=
426 +
427 + # Work around bug 329499. See also bug 413751 and 457194.
428 + if has_version dev-libs/libffi[pax_kernel]; then
429 + pax-mark E python
430 + else
431 + pax-mark m python
432 + fi
433 +}
434 +
435 +src_test() {
436 + # Tests will not work when cross compiling.
437 + if tc-is-cross-compiler; then
438 + elog "Disabling tests due to crosscompiling."
439 + return
440 + fi
441 +
442 + cd "${BUILD_DIR}" || die
443 +
444 + # Skip failing tests.
445 + local skipped_tests="gdb"
446 +
447 + for test in ${skipped_tests}; do
448 + mv "${S}"/Lib/test/test_${test}.py "${T}"
449 + done
450 +
451 + local -x PYTHONDONTWRITEBYTECODE=
452 + emake test EXTRATESTOPTS="-u-network" CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
453 + local result=$?
454 +
455 + for test in ${skipped_tests}; do
456 + mv "${T}/test_${test}.py" "${S}"/Lib/test
457 + done
458 +
459 + elog "The following tests have been skipped:"
460 + for test in ${skipped_tests}; do
461 + elog "test_${test}.py"
462 + done
463 +
464 + elog "If you would like to run them, you may:"
465 + elog "cd '${EPREFIX}/usr/$(get_libdir)/python${PYVER}/test'"
466 + elog "and run the tests separately."
467 +
468 + if [[ ${result} -ne 0 ]]; then
469 + die "emake test failed"
470 + fi
471 +}
472 +
473 +src_install() {
474 + local libdir=${ED}/usr/$(get_libdir)/python${PYVER}
475 +
476 + cd "${BUILD_DIR}" || die
477 +
478 + emake DESTDIR="${D}" altinstall
479 +
480 + if use aqua ; then
481 + # avoid config.status to be triggered
482 + find Mac -name "Makefile" -exec touch \{\} + || die
483 +
484 + # Python_Launcher is kind of a wrapper, and we should fix it for
485 + # Prefix (it uses /usr/bin/pythonw) so useless
486 + # IDLE doesn't run, no idea, but definitely not used
487 + emake DESTDIR="${D}" -C Mac install_Python || die
488 + rmdir "${ED}"/Applications/Python* || die
489 + rmdir "${ED}"/Applications || die
490 +
491 + local fwdir=/usr/$(get_libdir)/Python.framework/Versions/${PYVER}
492 + ln -s "${EPREFIX}"/usr/include/python${PYVER} \
493 + "${ED}${fwdir}"/Headers || die
494 + ln -s "${EPREFIX}"/usr/lib/libpython${PYVER}.dylib \
495 + "${ED}${fwdir}"/Python || die
496 + fi
497 +
498 + sed \
499 + -e "s/\(CONFIGURE_LDFLAGS=\).*/\1/" \
500 + -e "s/\(PY_LDFLAGS=\).*/\1/" \
501 + -i "${libdir}/config-${PYVER}"*/Makefile || die "sed failed"
502 +
503 + # Fix collisions between different slots of Python.
504 + rm -f "${ED}usr/$(get_libdir)/libpython3.so"
505 +
506 + # Cheap hack to get version with ABIFLAGS
507 + local abiver=$(cd "${ED}usr/include"; echo python*)
508 + if [[ ${abiver} != python${PYVER} ]]; then
509 + # Replace python3.X with a symlink to python3.Xm
510 + rm "${ED}usr/bin/python${PYVER}" || die
511 + dosym "${abiver}" "/usr/bin/python${PYVER}"
512 + # Create python3.X-config symlink
513 + dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
514 + # Create python-3.5m.pc symlink
515 + dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
516 + fi
517 +
518 + use elibc_uclibc && rm -fr "${libdir}/test"
519 + use sqlite || rm -fr "${libdir}/"{sqlite3,test/test_sqlite*}
520 + use tk || rm -fr "${ED}usr/bin/idle${PYVER}" "${libdir}/"{idlelib,tkinter,test/test_tk*}
521 +
522 + use threads || rm -fr "${libdir}/multiprocessing"
523 + use wininst || rm -f "${libdir}/distutils/command/"wininst-*.exe
524 +
525 + dodoc "${S}"/Misc/{ACKS,HISTORY,NEWS}
526 +
527 + if use examples; then
528 + insinto /usr/share/doc/${PF}/examples
529 + find "${S}"/Tools -name __pycache__ -print0 | xargs -0 rm -fr
530 + doins -r "${S}"/Tools
531 + fi
532 + insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
533 + if use aqua ; then
534 + # we do framework, so the emake trick below returns a pathname
535 + # since that won't work here, use a (cheap) trick instead
536 + local libname=libpython${PYVER}
537 + else
538 + local libname=$(printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' | \
539 + emake --no-print-directory -s -f - 2>/dev/null)
540 + fi
541 + newins "${S}"/Tools/gdb/libpython.py "${libname}"-gdb.py
542 +
543 + newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
544 + newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
545 + sed \
546 + -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
547 + -e "s:@PYDOC@:pydoc${PYVER}:" \
548 + -i "${ED}etc/conf.d/pydoc-${PYVER}" "${ED}etc/init.d/pydoc-${PYVER}" || die "sed failed"
549 +
550 + # for python-exec
551 + local vars=( EPYTHON PYTHON_SITEDIR PYTHON_SCRIPTDIR )
552 +
553 + # if not using a cross-compiler, use the fresh binary
554 + if ! tc-is-cross-compiler; then
555 + local -x PYTHON=./python$(sed -n '/BUILDEXE=/s/^.*=\s\+//p' Makefile)
556 + local -x LD_LIBRARY_PATH=${LD_LIBRARY_PATH+${LD_LIBRARY_PATH}:}${PWD}
557 + local -x DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH+${DYLD_LIBRARY_PATH}:}${PWD}
558 + else
559 + vars=( PYTHON "${vars[@]}" )
560 + fi
561 +
562 + python_export "python${PYVER}" "${vars[@]}"
563 + echo "EPYTHON='${EPYTHON}'" > epython.py || die
564 + python_domodule epython.py
565 +
566 + # python-exec wrapping support
567 + local pymajor=${PYVER%.*}
568 + mkdir -p "${D}${PYTHON_SCRIPTDIR}" || die
569 + # python and pythonX
570 + ln -s "../../../bin/${abiver}" \
571 + "${D}${PYTHON_SCRIPTDIR}/python${pymajor}" || die
572 + ln -s "python${pymajor}" \
573 + "${D}${PYTHON_SCRIPTDIR}/python" || die
574 + # python-config and pythonX-config
575 + # note: we need to create a wrapper rather than symlinking it due
576 + # to some random dirname(argv[0]) magic performed by python-config
577 + cat > "${D}${PYTHON_SCRIPTDIR}/python${pymajor}-config" <<-EOF || die
578 + #!/bin/sh
579 + exec "${abiver}-config" "\${@}"
580 + EOF
581 + chmod +x "${D}${PYTHON_SCRIPTDIR}/python${pymajor}-config" || die
582 + ln -s "python${pymajor}-config" \
583 + "${D}${PYTHON_SCRIPTDIR}/python-config" || die
584 + # 2to3, pydoc, pyvenv
585 + ln -s "../../../bin/2to3-${PYVER}" \
586 + "${D}${PYTHON_SCRIPTDIR}/2to3" || die
587 + ln -s "../../../bin/pydoc${PYVER}" \
588 + "${D}${PYTHON_SCRIPTDIR}/pydoc" || die
589 + ln -s "../../../bin/pyvenv-${PYVER}" \
590 + "${D}${PYTHON_SCRIPTDIR}/pyvenv" || die
591 + # idle
592 + if use tk; then
593 + ln -s "../../../bin/idle${PYVER}" \
594 + "${D}${PYTHON_SCRIPTDIR}/idle" || die
595 + fi
596 +}
597 +
598 +pkg_preinst() {
599 + if has_version "<${CATEGORY}/${PN}-${PYVER}" && ! has_version ">=${CATEGORY}/${PN}-${PYVER}_alpha"; then
600 + python_updater_warning="1"
601 + fi
602 +}
603 +
604 +eselect_python_update() {
605 + if [[ -z "$(eselect python show)" || ! -f "${EROOT}usr/bin/$(eselect python show)" ]]; then
606 + eselect python update
607 + fi
608 +
609 + if [[ -z "$(eselect python show --python${PV%%.*})" || ! -f "${EROOT}usr/bin/$(eselect python show --python${PV%%.*})" ]]; then
610 + eselect python update --python${PV%%.*}
611 + fi
612 +}
613 +
614 +pkg_postinst() {
615 + eselect_python_update
616 +
617 + if [[ "${python_updater_warning}" == "1" ]]; then
618 + ewarn "You have just upgraded from an older version of Python."
619 + ewarn
620 + ewarn "Please adjust PYTHON_TARGETS (if so desired), and run emerge with the --newuse or --changed-use option to rebuild packages installing python modules."
621 + fi
622 +}
623 +
624 +pkg_postrm() {
625 + eselect_python_update
626 +}