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-lang/python/
Date: Mon, 05 Sep 2022 07:44:27
Message-Id: 1662363859.bb02f714c788064ce376c1fb001ab5e2b469a31e.mgorny@gentoo
1 commit: bb02f714c788064ce376c1fb001ab5e2b469a31e
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Mon Sep 5 07:38:56 2022 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Mon Sep 5 07:44:19 2022 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=bb02f714
7
8 dev-lang/python: Backport more bignum fixes to 3.9.13_p6
9
10 Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
11
12 dev-lang/python/Manifest | 1 +
13 dev-lang/python/python-3.9.13_p6.ebuild | 402 ++++++++++++++++++++++++++++++++
14 2 files changed, 403 insertions(+)
15
16 diff --git a/dev-lang/python/Manifest b/dev-lang/python/Manifest
17 index c8c9c0ba11fe..5f933f532ddf 100644
18 --- a/dev-lang/python/Manifest
19 +++ b/dev-lang/python/Manifest
20 @@ -19,3 +19,4 @@ DIST python-gentoo-patches-3.8.13_p6.tar.xz 27968 BLAKE2B 0cafbdfed47e0d58a9798c
21 DIST python-gentoo-patches-3.8.13_p7.tar.xz 41332 BLAKE2B e61fe83b1260fbdc3086384834914625ae361c3ab2365f5f86c454423f4738b1aa20f46cf95b8a64b54b7cc000761964d5db65383bba9bdcc2a86894aacbdd5b SHA512 e71fff8291c4dfec43d3609e84de2fe6afc29ee6087410f047e972294e555e5a17b7f8d19778a79e67bad66855fd7a163b5a047aee99ee357d5306d7cd01f989
22 DIST python-gentoo-patches-3.9.13_p4.tar.xz 22072 BLAKE2B a0e084eff35d075d2255b139d0db114d282cb6c9c0c2ea51a8ecb7f5f1dc8096d6578ae5f804b7583a2b7842152b5723ad802ca816d46813c40aaa756118afc8 SHA512 cdf8d43fd5263c4956be234f36c0767215ab2495705d4f2a060b32ecbfbe159e618e31693b0538a1b970f7b27ebe4953063f585930d074dcaf59f2f61486e6b6
23 DIST python-gentoo-patches-3.9.13_p5.tar.xz 35660 BLAKE2B be3fe3a4db5e94a06c6bcb36eee71fd7e33cf27a4f3a259e5d0bd332b4765e77d5753247ddf5bbc3cbf10647f55e1897c943a7149afc76a9649d634fbfaff682 SHA512 7d6f1d215df0e50b1b4837f62c160d3262c6d9a29dad1a3f82590f5f84245defcd9b3de500ec78f01a3308275647b7a5e72a16c7425aec1edb841ba079100e1b
24 +DIST python-gentoo-patches-3.9.13_p6.tar.xz 37508 BLAKE2B 6d55aec9ae139cbe6d35b84335174d5fba5784bf52eb665e2d3a27693a2abb843bce1f190c92bfd173359c3782cae06a6b3520932b08aec678332928c5a27277 SHA512 1b1dec45d959849bf72b0646329e8cf74301e0f5373d6e2dbefb63d60fdddbe9fc33abda7d2312af8c52feadf3bacd04b627626d876acecc8984d3192a2d029d
25
26 diff --git a/dev-lang/python/python-3.9.13_p6.ebuild b/dev-lang/python/python-3.9.13_p6.ebuild
27 new file mode 100644
28 index 000000000000..57aa423c9b08
29 --- /dev/null
30 +++ b/dev-lang/python/python-3.9.13_p6.ebuild
31 @@ -0,0 +1,402 @@
32 +# Copyright 1999-2022 Gentoo Authors
33 +# Distributed under the terms of the GNU General Public License v2
34 +
35 +EAPI="7"
36 +WANT_LIBTOOL="none"
37 +
38 +inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
39 +inherit python-utils-r1 toolchain-funcs verify-sig
40 +
41 +MY_PV=${PV/_rc/rc}
42 +MY_P="Python-${MY_PV%_p*}"
43 +PYVER=$(ver_cut 1-2)
44 +PATCHSET="python-gentoo-patches-${MY_PV}"
45 +
46 +DESCRIPTION="An interpreted, interactive, object-oriented programming language"
47 +HOMEPAGE="
48 + https://www.python.org/
49 + https://github.com/python/cpython/
50 +"
51 +SRC_URI="
52 + https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
53 + https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
54 + verify-sig? (
55 + https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
56 + )
57 +"
58 +S="${WORKDIR}/${MY_P}"
59 +
60 +LICENSE="PSF-2"
61 +SLOT="${PYVER}"
62 +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
63 +IUSE="
64 + bluetooth build +ensurepip examples gdbm hardened lto +ncurses pgo
65 + +readline +sqlite +ssl test tk +xml
66 +"
67 +RESTRICT="!test? ( test )"
68 +
69 +# Do not add a dependency on dev-lang/python to this ebuild.
70 +# If you need to apply a patch which requires python for bootstrapping, please
71 +# run the bootstrap code on your dev box and include the results in the
72 +# patchset. See bug 447752.
73 +
74 +RDEPEND="
75 + app-arch/bzip2:=
76 + app-arch/xz-utils:=
77 + dev-lang/python-exec[python_targets_python3_9(-)]
78 + dev-libs/libffi:=
79 + sys-apps/util-linux:=
80 + >=sys-libs/zlib-1.1.3:=
81 + virtual/libcrypt:=
82 + virtual/libintl
83 + ensurepip? ( dev-python/ensurepip-wheels )
84 + gdbm? ( sys-libs/gdbm:=[berkdb] )
85 + ncurses? ( >=sys-libs/ncurses-5.2:= )
86 + readline? ( >=sys-libs/readline-4.1:= )
87 + sqlite? ( >=dev-db/sqlite-3.3.8:3= )
88 + ssl? ( >=dev-libs/openssl-1.1.1:= )
89 + tk? (
90 + >=dev-lang/tcl-8.0:=
91 + >=dev-lang/tk-8.0:=
92 + dev-tcltk/blt:=
93 + dev-tcltk/tix
94 + )
95 + xml? ( >=dev-libs/expat-2.1:= )
96 +"
97 +# bluetooth requires headers from bluez
98 +DEPEND="
99 + ${RDEPEND}
100 + bluetooth? ( net-wireless/bluez )
101 + test? ( app-arch/xz-utils[extra-filters(+)] )
102 +"
103 +# autoconf-archive needed to eautoreconf
104 +BDEPEND="
105 + sys-devel/autoconf-archive
106 + virtual/awk
107 + virtual/pkgconfig
108 + verify-sig? ( sec-keys/openpgp-keys-python )
109 +"
110 +RDEPEND+="
111 + !build? ( app-misc/mime-types )
112 +"
113 +
114 +VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/python.org.asc
115 +
116 +# large file tests involve a 2.5G file being copied (duplicated)
117 +CHECKREQS_DISK_BUILD=5500M
118 +
119 +QA_PKGCONFIG_VERSION=${PYVER}
120 +
121 +pkg_pretend() {
122 + use test && check-reqs_pkg_pretend
123 +}
124 +
125 +pkg_setup() {
126 + use test && check-reqs_pkg_setup
127 +}
128 +
129 +src_unpack() {
130 + if use verify-sig; then
131 + verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
132 + fi
133 + default
134 +}
135 +
136 +src_prepare() {
137 + # Ensure that internal copies of expat and libffi are not used.
138 + rm -r Modules/expat || die
139 + rm -r Modules/_ctypes/libffi* || die
140 +
141 + local PATCHES=(
142 + "${WORKDIR}/${PATCHSET}"
143 + )
144 +
145 + default
146 +
147 + # https://bugs.gentoo.org/850151
148 + sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
149 +
150 + # force the correct number of jobs
151 + # https://bugs.gentoo.org/737660
152 + local jobs=$(makeopts_jobs)
153 + sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
154 + sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
155 +
156 + eautoreconf
157 +}
158 +
159 +src_configure() {
160 + # disable automagic bluetooth headers detection
161 + if ! use bluetooth; then
162 + local -x ac_cv_header_bluetooth_bluetooth_h=no
163 + fi
164 + local disable
165 + use gdbm || disable+=" gdbm"
166 + use ncurses || disable+=" _curses _curses_panel"
167 + use readline || disable+=" readline"
168 + use sqlite || disable+=" _sqlite3"
169 + use ssl || export PYTHON_DISABLE_SSL="1"
170 + use tk || disable+=" _tkinter"
171 + use xml || disable+=" _elementtree pyexpat" # _elementtree uses pyexpat.
172 + export PYTHON_DISABLE_MODULES="${disable}"
173 +
174 + if ! use xml; then
175 + ewarn "You have configured Python without XML support."
176 + ewarn "This is NOT a recommended configuration as you"
177 + ewarn "may face problems parsing any XML documents."
178 + fi
179 +
180 + if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
181 + einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
182 + fi
183 +
184 + append-flags -fwrapv
185 + filter-flags -malign-double
186 +
187 + # https://bugs.gentoo.org/700012
188 + if is-flagq -flto || is-flagq '-flto=*'; then
189 + append-cflags $(test-flags-CC -ffat-lto-objects)
190 + fi
191 +
192 + # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
193 + # PKG_CONFIG needed for cross.
194 + tc-export CXX PKG_CONFIG
195 +
196 + # Fix implicit declarations on cross and prefix builds. Bug #674070.
197 + if use ncurses; then
198 + append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
199 + fi
200 +
201 + local dbmliborder=
202 + if use gdbm; then
203 + dbmliborder+="${dbmliborder:+:}gdbm"
204 + fi
205 +
206 + if use pgo; then
207 + local profile_task_flags=(
208 + -m test
209 + "-j$(makeopts_jobs)"
210 + --pgo-extended
211 + -x test_gdb
212 + -u-network
213 +
214 + # All of these seem to occasionally hang for PGO inconsistently
215 + # They'll even hang here but be fine in src_test sometimes.
216 + # bug #828535 (and related: bug #788022)
217 + -x test_asyncio
218 + -x test_httpservers
219 + -x test_logging
220 + -x test_multiprocessing_fork
221 + -x test_socket
222 + -x test_xmlrpc
223 + )
224 +
225 + if has_version "app-arch/rpm" ; then
226 + # Avoid sandbox failure (attempts to write to /var/lib/rpm)
227 + profile_task_flags+=(
228 + -x test_distutils
229 + )
230 + fi
231 + local -x PROFILE_TASK="${profile_task_flags[*]}"
232 + fi
233 +
234 + local myeconfargs=(
235 + # glibc-2.30 removes it; since we can't cleanly force-rebuild
236 + # Python on glibc upgrade, remove it proactively to give
237 + # a chance for users rebuilding python before glibc
238 + ac_cv_header_stropts_h=no
239 +
240 + --enable-shared
241 + --enable-ipv6
242 + --infodir='${prefix}/share/info'
243 + --mandir='${prefix}/share/man'
244 + --with-computed-gotos
245 + --with-dbmliborder="${dbmliborder}"
246 + --with-libc=
247 + --enable-loadable-sqlite-extensions
248 + --without-ensurepip
249 + --with-system-expat
250 + --with-system-ffi
251 + --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
252 +
253 + $(use_with lto)
254 + $(use_enable pgo optimizations)
255 + )
256 +
257 + # disable implicit optimization/debugging flags
258 + local -x OPT=
259 + # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
260 + # propagated to sysconfig for built extensions
261 + local -x CFLAGS_NODIST=${CFLAGS}
262 + local -x LDFLAGS_NODIST=${LDFLAGS}
263 + local -x CFLAGS= LDFLAGS=
264 +
265 + econf "${myeconfargs[@]}"
266 +
267 + if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
268 + eerror "configure has detected that the sem_open function is broken."
269 + eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
270 + die "Broken sem_open function (bug 496328)"
271 + fi
272 +
273 + # install epython.py as part of stdlib
274 + echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
275 +}
276 +
277 +src_compile() {
278 + # Ensure sed works as expected
279 + # https://bugs.gentoo.org/594768
280 + local -x LC_ALL=C
281 + # Prevent using distutils bundled by setuptools.
282 + # https://bugs.gentoo.org/823728
283 + export SETUPTOOLS_USE_DISTUTILS=stdlib
284 +
285 + # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
286 + # end up writing bytecode & violating sandbox.
287 + # bug #831897
288 + local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
289 +
290 + if use pgo ; then
291 + # bug 660358
292 + local -x COLUMNS=80
293 + local -x PYTHONDONTWRITEBYTECODE=
294 +
295 + addpredict /usr/lib/python3.9/site-packages
296 + fi
297 +
298 + # also need to clear the flags explicitly here or they end up
299 + # in _sysconfigdata*
300 + emake CPPFLAGS= CFLAGS= LDFLAGS=
301 +
302 + # Restore saved value from above.
303 + local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
304 +
305 + # Work around bug 329499. See also bug 413751 and 457194.
306 + if has_version dev-libs/libffi[pax-kernel]; then
307 + pax-mark E python
308 + else
309 + pax-mark m python
310 + fi
311 +}
312 +
313 +src_test() {
314 + # Tests will not work when cross compiling.
315 + if tc-is-cross-compiler; then
316 + elog "Disabling tests due to crosscompiling."
317 + return
318 + fi
319 +
320 + local test_opts=(
321 + -u-network
322 + -j "$(makeopts_jobs)"
323 +
324 + # fails
325 + -x test_gdb
326 + )
327 +
328 + if use sparc ; then
329 + # bug #788022
330 + test_opts+=(
331 + -x test_multiprocessing_fork
332 + -x test_multiprocessing_forkserver
333 + )
334 + fi
335 +
336 + # bug 660358
337 + local -x COLUMNS=80
338 + local -x PYTHONDONTWRITEBYTECODE=
339 +
340 + emake test EXTRATESTOPTS="${test_opts[*]}" \
341 + CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty || die "emake test failed"
342 +}
343 +
344 +src_install() {
345 + local libdir=${ED}/usr/lib/python${PYVER}
346 +
347 + emake DESTDIR="${D}" altinstall
348 +
349 + # Remove static library
350 + rm "${ED}"/usr/$(get_libdir)/libpython*.a || die
351 +
352 + # Fix collisions between different slots of Python.
353 + rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
354 +
355 + # Cheap hack to get version with ABIFLAGS
356 + local abiver=$(cd "${ED}/usr/include"; echo python*)
357 + if [[ ${abiver} != python${PYVER} ]]; then
358 + # Replace python3.X with a symlink to python3.Xm
359 + rm "${ED}/usr/bin/python${PYVER}" || die
360 + dosym "${abiver}" "/usr/bin/python${PYVER}"
361 + # Create python3.X-config symlink
362 + dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
363 + # Create python-3.5m.pc symlink
364 + dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
365 + fi
366 +
367 + # python seems to get rebuilt in src_install (bug 569908)
368 + # Work around it for now.
369 + if has_version dev-libs/libffi[pax-kernel]; then
370 + pax-mark E "${ED}/usr/bin/${abiver}"
371 + else
372 + pax-mark m "${ED}/usr/bin/${abiver}"
373 + fi
374 +
375 + rm -r "${libdir}"/ensurepip/_bundled || die
376 + if ! use ensurepip; then
377 + rm -r "${libdir}"/ensurepip || die
378 + fi
379 + if ! use sqlite; then
380 + rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
381 + fi
382 + if ! use tk; then
383 + rm -r "${ED}/usr/bin/idle${PYVER}" || die
384 + rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
385 + fi
386 +
387 + dodoc Misc/{ACKS,HISTORY,NEWS}
388 +
389 + if use examples; then
390 + docinto examples
391 + find Tools -name __pycache__ -exec rm -fr {} + || die
392 + dodoc -r Tools
393 + fi
394 + insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
395 + local libname=$(
396 + printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
397 + emake --no-print-directory -s -f - 2>/dev/null
398 + )
399 + newins Tools/gdb/libpython.py "${libname}"-gdb.py
400 +
401 + newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
402 + newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
403 + sed \
404 + -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
405 + -e "s:@PYDOC@:pydoc${PYVER}:" \
406 + -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
407 + "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
408 +
409 + # python-exec wrapping support
410 + local pymajor=${PYVER%.*}
411 + local EPYTHON=python${PYVER}
412 + local scriptdir=${D}$(python_get_scriptdir)
413 + mkdir -p "${scriptdir}" || die
414 + # python and pythonX
415 + ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
416 + ln -s "python${pymajor}" "${scriptdir}/python" || die
417 + # python-config and pythonX-config
418 + # note: we need to create a wrapper rather than symlinking it due
419 + # to some random dirname(argv[0]) magic performed by python-config
420 + cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
421 + #!/bin/sh
422 + exec "${abiver}-config" "\${@}"
423 + EOF
424 + chmod +x "${scriptdir}/python${pymajor}-config" || die
425 + ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
426 + # 2to3, pydoc
427 + ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
428 + ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
429 + # idle
430 + if use tk; then
431 + ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
432 + fi
433 +}