commit:     2165b4dec2fab95d6a5af46630ec840832f0b4e6
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Mar  4 03:34:18 2026 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Mar  4 03:42:58 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2165b4de

dev-lang/python: Bump to 3.12.13

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-lang/python/Manifest              |   3 +
 dev-lang/python/python-3.12.13.ebuild | 602 ++++++++++++++++++++++++++++++++++
 2 files changed, 605 insertions(+)

diff --git a/dev-lang/python/Manifest b/dev-lang/python/Manifest
index babaec7af900..395e8ed20f75 100644
--- a/dev-lang/python/Manifest
+++ b/dev-lang/python/Manifest
@@ -10,6 +10,8 @@ DIST Python-3.11.15.tar.xz 20332596 BLAKE2B 
8be4dd30aff7a2615fd37754dc6ed1caede1
 DIST Python-3.11.15.tar.xz.asc 833 BLAKE2B 
dd4134701ef36d22c7bca8ea16794d3e85dc2a2b6323b2babfdeb2652ade1db8b7d4256cb68a40ee1c1a2b5885666e25791c1e4d6c044cc8d49f68693ec65887
 SHA512 
673822ca037acb521bf7d3e7433f83cc2d60c8d102cfbf6695234e2a50ce12a7003040ad4017438510ebbb1ff0ba6727253fae250b07bc0e3d24b5578e80be52
 DIST Python-3.12.12.tar.xz 20798712 BLAKE2B 
3ce140b5b2c5e3b055118c8595385c7d79582c64cd8dfe9dbd062f8e38a7a995bf51f7c61e1faa768bd36c315c3493d27cd81c7425c7416454f41f77431eac0f
 SHA512 
4b99d240dd96a6e154909dcffe87f8bb38193d634cd80a1c3d9e819b7a63af2afa46d5e6423e81f00dd388840dc29a4a71580f6aa1ce9a12e559c1d63f65a205
 DIST Python-3.12.12.tar.xz.asc 963 BLAKE2B 
243d7e8000768b562ff771ec8dd8fdc6be2bc36174a1f0f8b00038df2264c9d1c8a14913d07df2826fead822a16db18ef08b40d553f6a9bdc0ea39645d6d798a
 SHA512 
32c10fd427c6f9f11595493d1b4d4c3cade85bffd439fe11e8b0b2c619e06734097b6aaedfdb4fe035b7fdd7196714dba77cdc806923e4454d5bcf60056991a0
+DIST Python-3.12.13.tar.xz 20801708 BLAKE2B 
94b99c75e3aba1d1a953b5447f8ad6b7ebec921bc8cf32a9dfd449e574e4b7e2a010f0f267c31c859acec0092669203c71c90386c80203968126d9dbfb6ae85d
 SHA512 
e1eb66f0b34581f0155e3ce25ba72cf0b4b1107672ed0ad3e86bcfe616945c9204c41ffc492f32b1066b9154913ff88343038967ad8711dd05e6f2332fdb735b
+DIST Python-3.12.13.tar.xz.asc 963 BLAKE2B 
e6bc572fd207fe203cf8018bca89777c7033e46d25cc598b5715658f556d26b6f3b1652f13518850ad62a37254ab4ecf5f770197cb847306ffef96b747840e88
 SHA512 
903fd3baa7e29891bb00fb159ec9c43804a71002c4cd38902d25bf4e5167f856b37d211a5b1098ee60e1ea41f8a10a1596dd2382edc6d7367d55dd4154807fc7
 DIST Python-3.13.11.tar.xz 22704352 BLAKE2B 
6c9c4dddcda36a0210155b759c01101b0429b17622d76a50881533b454335298e9f71ba300710afea2039425a08e4e1ea7eab27a18dc871950c3a32ad93ce663
 SHA512 
11a910785bb3edeb3888331f29d2514d539f08b07d3125186364ab0e261dab29c7e7c70fe08d89718c38b6053cbe932ac4a6062ac291871e6f4173d29425264a
 DIST Python-3.13.11.tar.xz.asc 963 BLAKE2B 
a6e21908f8161ed014455a609004b9bce461cae61f1b3b26d56c2582e01134f7adb1634c12dc99a8c3a290564a42e5b1bdbec6cb6faaf3ea41245e8a2e17ed1c
 SHA512 
10beaba6d0e84f0335c0add480114e98a64133ec70d320593349de86091ccbdd69743559297f9c8c5e9926089890fd0e7881388e86084f46a413e9579c59d23c
 DIST Python-3.13.12.tar.xz 22926488 BLAKE2B 
a744a81e39e4897abcaf11d6186c106d703c668ca41beefc8d56003d3b37b84a64284f0e9ca9dcc26a6b7ac6faf495b98e5172159ff91e8c01d52993cdc354b7
 SHA512 
5edecdf13999d8629f31543dffdcba521dbb5633577e481ee49275e377509a2f6d700624c26f95b57a8ff9501378d10d7c07c1d0e7e19be0d6c88f05b6315a13
@@ -39,6 +41,7 @@ DIST python-gentoo-patches-3.11.14.tar.xz 15968 BLAKE2B 
5bd091046feee03afd59a87b
 DIST python-gentoo-patches-3.11.15.tar.xz 15988 BLAKE2B 
16e98450749ebd1c617acbb9aba380fff50a8f7dba19f3f99edd3bd387c1a5d61d78cbf493cf003dfe03d2be59374ad89077b39fe203059bbbb881ae02a72ea5
 SHA512 
b705c72a585e315eb3ba69ffbf2a80836f0fc894fa8ae2c22768e6aa8ac2a23aada5def3d2635193793f58e3da81f0f10281c47bd8e129e1fd2c9167d292265b
 DIST python-gentoo-patches-3.12.11.tar.xz 12020 BLAKE2B 
b419d32b1d7bef9408027edda7eac9a920a877e1b8f521483df595199bad1bbadd9dd9500079c09beab63286a801bfb25da5f93a5d31462ed3e457a6e40ad6af
 SHA512 
1b0eaff4c0df06554525a50576da7eadb4067c4f2970851e5c9e3e527a9ccc4216cbd65c45fd562af4a1cedc2c66278a74bee5cf5c1a65df8feb22f34f5a19e4
 DIST python-gentoo-patches-3.12.12.tar.xz 12012 BLAKE2B 
4a030f976e73160f74dd760a8cac55a5889bf821e998b717962aac8b79780c314dfbabf93a6919daa75565c3ef31dcf6af87f3ec6768db0ff02154c4c112ab08
 SHA512 
d5ee32b93fb4a1910a8e3aa0486ae284885c05bd03ada3540f4990b4f12c837cd154e76511db663542dde74d652c3d1d279098319dcc991e7195e8db5befea12
+DIST python-gentoo-patches-3.12.13.tar.xz 12084 BLAKE2B 
598ea3d4a395a99d7b78fb592b486efc0af0625309a044442b1eaa81761621110a2de16abff09840426a53b35c0f848531b2e272cb80b970319bf55585603087
 SHA512 
26ecf8065cc71ad36c1ce43727f8eec4b0b660c99ed0612c807b99f069851d71b0517da48187464b90bffccc4278cee462166f8972c405bb07d70751f0e2d499
 DIST python-gentoo-patches-3.13.11.tar.xz 8948 BLAKE2B 
bb6402400f931fed5d0fa2530f816ba78d7f6aff766e72692884a391929df76cedcc9a9b7a709d8ebffb38fe9256dd78a2b668d49951e07bf61a5388bce49b34
 SHA512 
f184a682a888a8781aa1a4eb3983d5861d4eec2d0c0729ab95f867aa4a901c65865cc429e9b871c62d5d113509c3f621c7c81d7c7e4600b8a712a8ec256270a9
 DIST python-gentoo-patches-3.13.12.tar.xz 8992 BLAKE2B 
e7a26ddbd76f337a0f3958e55d6f77864308d3db5b5b8bec36aa50c1845d28284c6d0ce4c847eb0ca2a51367baaf454be9c62bc1932ffdff5a4ee06c9701c3b4
 SHA512 
ef87942f8d1d145112b2275d1fce9f6faea19c37ed3e37fd8762f4470ecaa1d87f5a471f287d3e1bf7507af351894c15872ceea0ea41d4903707c12d4cf0c4d0
 DIST python-gentoo-patches-3.13.4.tar.xz 8912 BLAKE2B 
e3d9f2a12f801dc75e09c5301757f35216d712b5e5394f2ec3ce1d79d0cb57571dbca525e3d5c35b90fa059c2b78ee24341b6a51cbe9691deac84c9ee0578824
 SHA512 
1a7141accb7aa70c7bd8dd12528f7de031dfeab9ff089f3d044da0b7b52461e2d6d7d1467161e0fe1e259d9fa06d70bcf107d86ad3590e8cf73aa1132ef3aaf9

diff --git a/dev-lang/python/python-3.12.13.ebuild 
b/dev-lang/python/python-3.12.13.ebuild
new file mode 100644
index 000000000000..5a069bb5d614
--- /dev/null
+++ b/dev-lang/python/python-3.12.13.ebuild
@@ -0,0 +1,602 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+       https://www.python.org/
+       https://github.com/python/cpython/
+"
+SRC_URI="
+       https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+       https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+       verify-sig? (
+               https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+       )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 
~riscv ~s390 ~sparc ~x86"
+IUSE="
+       bluetooth debug +ensurepip examples gdbm libedit +ncurses pgo
+       +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+       app-arch/bzip2:=
+       app-arch/xz-utils:=
+       app-crypt/libb2
+       app-misc/mime-types
+       >=dev-libs/expat-2.1:=
+       dev-libs/libffi:=
+       dev-libs/mpdecimal:=
+       dev-python/gentoo-common
+       >=virtual/zlib-1.1.3:=
+       virtual/libcrypt:=
+       virtual/libintl
+       gdbm? ( sys-libs/gdbm:=[berkdb] )
+       kernel_linux? ( sys-apps/util-linux:= )
+       ncurses? ( >=sys-libs/ncurses-5.2:= )
+       readline? (
+               !libedit? ( >=sys-libs/readline-4.1:= )
+               libedit? ( dev-libs/libedit:= )
+       )
+       sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+       ssl? ( >=dev-libs/openssl-1.1.1:= )
+       tk? (
+               >=dev-lang/tcl-8.0:=
+               >=dev-lang/tk-8.0:=
+               dev-tcltk/blt:=
+               dev-tcltk/tix
+       )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+       ${RDEPEND}
+       bluetooth? ( net-wireless/bluez )
+       test? (
+               app-arch/xz-utils
+               dev-python/ensurepip-pip
+               dev-python/ensurepip-setuptools
+               dev-python/ensurepip-wheel
+       )
+       valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+       dev-build/autoconf-archive
+       app-alternatives/awk
+       virtual/pkgconfig
+       verify-sig? ( >=sec-keys/openpgp-keys-python-20221025 )
+"
+if [[ ${PV} != *_alpha* ]]; then
+       RDEPEND+="
+               dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+       "
+fi
+PDEPEND="
+       ensurepip? ( dev-python/ensurepip-pip )
+"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+       use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+       use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+       if use verify-sig; then
+               verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+       fi
+       default
+}
+
+src_prepare() {
+       # Ensure that internal copies of expat and libffi are not used.
+       # TODO: Makefile has annoying deps on expat headers
+       #rm -r Modules/expat || die
+
+       local PATCHES=(
+               "${WORKDIR}/${PATCHSET}"
+       )
+
+       default
+
+       # force the correct number of jobs
+       # https://bugs.gentoo.org/737660
+       sed -i -e "s:-j0:-j$(makeopts_jobs):" Makefile.pre.in || die
+
+       # breaks tests when using --with-wheel-pkg-dir
+       rm -r Lib/test/wheeldata || die
+
+       eautoreconf
+}
+
+build_cbuild_python() {
+       # Hack to workaround get_libdir not being able to handle CBUILD, bug 
#794181
+       local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) 
--keep-system-libs --libs-only-L libffi)
+
+       # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+       # propagated to sysconfig for built extensions
+       #
+       # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD 
Python anyway)
+       local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+       local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+       local -x CFLAGS= LDFLAGS=
+       local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+       local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+       # We need to build our own Python on CBUILD first, and feed it in.
+       # bug #847910
+       local myeconfargs_cbuild=(
+               "${myeconfargs[@]}"
+
+               --prefix="${BROOT}"/usr
+               --libdir="${cbuild_libdir:2}"
+
+               # Avoid needing to load the right libpython.so.
+               --disable-shared
+
+               # As minimal as possible for the mini CBUILD Python
+               # we build just for cross to satisfy --with-build-python.
+               --without-lto
+               --without-readline
+               --disable-optimizations
+       )
+
+       mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+       pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+
+       # Avoid as many dependencies as possible for the cross build.
+       mkdir Modules || die
+       cat > Modules/Setup.local <<-EOF || die
+               *disabled*
+               nis
+               _dbm _gdbm
+               _sqlite3
+               _hashlib _ssl
+               _curses _curses_panel
+               readline
+               _tkinter
+               pyexpat
+               zlib
+               # We disabled these for CBUILD because Python's setup.py can't 
handle locating
+               # libdir correctly for cross. This should be rechecked for the 
pure Makefile approach,
+               # and uncommented if needed.
+               #_ctypes _crypt
+       EOF
+
+       ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+       # Unfortunately, we do have to build this immediately, and
+       # not in src_compile, because CHOST configure for Python
+       # will check the existence of the --with-build-python value
+       # immediately.
+       emake
+       popd &> /dev/null || die
+}
+
+src_configure() {
+       # disable automagic bluetooth headers detection
+       if ! use bluetooth; then
+               local -x ac_cv_header_bluetooth_bluetooth_h=no
+       fi
+
+       filter-flags -malign-double
+
+       # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+       # PKG_CONFIG needed for cross.
+       tc-export CXX PKG_CONFIG
+
+       local dbmliborder=
+       if use gdbm; then
+               dbmliborder+="${dbmliborder:+:}gdbm"
+       fi
+
+       # Set baseline test skip flags.
+       COMMON_TEST_SKIPS=(
+               # running gdb inside an ebuild as non-root, within sandbox,
+               # and possibly within a container is unreliable
+               -x test_gdb
+               # this is actually test_gdb.test_pretty_print
+               -x test_pretty_print
+       )
+
+       # Arch-specific skips.  See #931888 for a collection of these.
+       case ${CHOST} in
+               alpha*)
+                       COMMON_TEST_SKIPS+=(
+                               -x test_builtin
+                               -x test_capi
+                               -x test_cmath
+                               -x test_float
+                               # timeout
+                               -x test_free_threading
+                               -x test_math
+                               -x test_numeric_tower
+                               -x test_random
+                               -x test_statistics
+                               # bug 653850
+                               -x test_resource
+                               -x test_strtod
+                       )
+                       ;;
+               mips*)
+                       COMMON_TEST_SKIPS+=(
+                               -x test_ctypes
+                               -x test_external_inspection
+                               -x test_statistics
+                       )
+                       ;;
+               riscv*)
+                       COMMON_TEST_SKIPS+=(
+                               -x test_urllib2
+                       )
+                       ;;
+               sparc*)
+                       COMMON_TEST_SKIPS+=(
+                               # bug 788022
+                               -x test_multiprocessing_fork
+                               -x test_multiprocessing_forkserver
+                               -x test_multiprocessing_spawn
+
+                               -x test_ctypes
+                               # bug 931908
+                               -x test_exceptions
+                       )
+                       ;;
+       esac
+
+       # musl-specific skips
+       use elibc_musl && COMMON_TEST_SKIPS+=(
+               # various musl locale deficiencies
+               -x test__locale
+               -x test_c_locale_coercion
+               -x test_locale
+               -x test_re
+
+               # known issues with find_library on musl
+               # https://bugs.python.org/issue21622
+               -x test_ctypes
+
+               # fpathconf, ttyname errno values
+               -x test_os
+       )
+
+       if use pgo; then
+               local profile_task_flags=(
+                       -m test
+                       "-j$(makeopts_jobs)"
+                       --pgo-extended
+                       -u-network
+
+                       # We use a timeout because of how often we've had hang 
issues
+                       # here. It also matches the default upstream 
PROFILE_TASK.
+                       --timeout 1200
+
+                       "${COMMON_TEST_SKIPS[@]}"
+
+                       -x test_dtrace
+
+                       # All of these seem to occasionally hang for PGO 
inconsistently
+                       # They'll even hang here but be fine in src_test 
sometimes.
+                       # bug #828535 (and related: bug #788022)
+                       -x test_asyncio
+                       -x test_concurrent_futures
+                       -x test_httpservers
+                       -x test_logging
+                       -x test_multiprocessing_fork
+                       -x test_socket
+                       -x test_xmlrpc
+
+                       # Hangs (actually runs indefinitely executing itself w/ 
many cpython builds)
+                       # bug #900429
+                       -x test_tools
+               )
+
+               # Arch-specific skips.  See #931888 for a collection of these.
+               case ${CHOST} in
+                       alpha*)
+                               profile_task_flags+=(
+                                       -x test_os
+                               )
+                               ;;
+                       hppa*)
+                               profile_task_flags+=(
+                                       -x test_descr
+                                       # bug 931908
+                                       -x test_exceptions
+                                       -x test_os
+                               )
+                               ;;
+                       powerpc64-*) # big endian
+                               profile_task_flags+=(
+                                       # bug 931908
+                                       -x test_exceptions
+                               )
+                               ;;
+                       riscv*)
+                               profile_task_flags+=(
+                                       -x test_statistics
+                               )
+                               ;;
+               esac
+
+               if has_version "app-arch/rpm" ; then
+                       # Avoid sandbox failure (attempts to write to 
/var/lib/rpm)
+                       profile_task_flags+=(
+                               -x test_distutils
+                       )
+               fi
+               local -x PROFILE_TASK="${profile_task_flags[*]}"
+       fi
+
+       local myeconfargs=(
+               # glibc-2.30 removes it; since we can't cleanly force-rebuild
+               # Python on glibc upgrade, remove it proactively to give
+               # a chance for users rebuilding python before glibc
+               ac_cv_header_stropts_h=no
+
+               --enable-shared
+               --without-static-libpython
+               --enable-ipv6
+               --infodir='${prefix}/share/info'
+               --mandir='${prefix}/share/man'
+               --with-dbmliborder="${dbmliborder}"
+               --with-libc=
+               --enable-loadable-sqlite-extensions
+               --without-ensurepip
+               --without-lto
+               --with-system-expat
+               --with-system-libmpdec
+               --with-platlibdir=lib
+               --with-pkg-config=yes
+               --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+               $(use_with debug assertions)
+               $(use_enable pgo optimizations)
+               $(use_with readline readline "$(usex libedit editline 
readline)")
+               $(use_with valgrind)
+       )
+
+       if tc-is-lto; then
+               myeconfargs+=(
+                       --with-lto
+               )
+       fi
+
+       # Force-disable modules we don't want built.
+       # See Modules/Setup for docs on how this works. Setup.local contains 
our local deviations.
+       cat > Modules/Setup.local <<-EOF || die
+               *disabled*
+               nis
+               $(usev !gdbm '_gdbm _dbm')
+               $(usev !sqlite '_sqlite3')
+               $(usev !ssl '_hashlib _ssl')
+               $(usev !ncurses '_curses _curses_panel')
+               $(usev !readline 'readline')
+               $(usev !tk '_tkinter')
+       EOF
+
+       # disable implicit optimization/debugging flags
+       local -x OPT=
+
+       if tc-is-cross-compiler ; then
+               build_cbuild_python
+               myeconfargs+=(
+                       # Point the imminent CHOST build to the Python we just
+                       # built for CBUILD.
+                       --with-build-python="${WORKDIR}"/${P}-${CBUILD}/python
+               )
+       fi
+
+       # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+       # propagated to sysconfig for built extensions
+       local -x CFLAGS_NODIST=${CFLAGS}
+       local -x LDFLAGS_NODIST=${LDFLAGS}
+       local -x CFLAGS= LDFLAGS=
+
+       # Fix implicit declarations on cross and prefix builds. Bug #674070.
+       if use ncurses; then
+               append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+       fi
+
+       econf "${myeconfargs[@]}"
+
+       if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+               eerror "configure has detected that the sem_open function is 
broken."
+               eerror "Please ensure that /dev/shm is mounted as a tmpfs with 
mode 1777."
+               die "Broken sem_open function (bug 496328)"
+       fi
+
+       # install epython.py as part of stdlib
+       echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+       # Ensure sed works as expected
+       # https://bugs.gentoo.org/594768
+       local -x LC_ALL=C
+       export PYTHONSTRICTEXTENSIONBUILD=1
+
+       # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+       # end up writing bytecode & violating sandbox.
+       # bug #831897
+       local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+       # Gentoo hack to disable accessing system site-packages
+       export GENTOO_CPYTHON_BUILD=1
+
+       if use pgo ; then
+               # bug 660358
+               local -x COLUMNS=80
+               local -x PYTHONDONTWRITEBYTECODE=
+               local -x TMPDIR=/var/tmp
+       fi
+
+       # also need to clear the flags explicitly here or they end up
+       # in _sysconfigdata*
+       emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+       # Restore saved value from above.
+       local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+       # Work around bug 329499. See also bug 413751 and 457194.
+       if has_version dev-libs/libffi[pax-kernel]; then
+               pax-mark E python
+       else
+               pax-mark m python
+       fi
+}
+
+src_test() {
+       # Tests will not work when cross compiling.
+       if tc-is-cross-compiler; then
+               elog "Disabling tests due to crosscompiling."
+               return
+       fi
+
+       # this just happens to skip test_support.test_freeze that is broken
+       # without bundled expat
+       # TODO: get a proper skip for it upstream
+       local -x LOGNAME=buildbot
+
+       local test_opts=(
+               --verbose3
+               -u-network
+               -j "$(makeopts_jobs)"
+               "${COMMON_TEST_SKIPS[@]}"
+       )
+
+       # bug 660358
+       local -x COLUMNS=80
+       local -x PYTHONDONTWRITEBYTECODE=
+       local -x TMPDIR=/var/tmp
+
+       nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+               CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+       local ret=${?}
+
+       [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+       local libdir=${ED}/usr/lib/python${PYVER}
+
+       # the Makefile rules are broken
+       # https://github.com/python/cpython/issues/100221
+       mkdir -p "${libdir}"/lib-dynload || die
+
+       # -j1 hack for now for bug #843458
+       emake -j1 DESTDIR="${D}" TEST_MODULES=no altinstall
+
+       # Fix collisions between different slots of Python.
+       rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+       # Cheap hack to get version with ABIFLAGS
+       local abiver=$(cd "${ED}/usr/include"; echo python*)
+       if [[ ${abiver} != python${PYVER} ]]; then
+               # Replace python3.X with a symlink to python3.Xm
+               rm "${ED}/usr/bin/python${PYVER}" || die
+               dosym "${abiver}" "/usr/bin/python${PYVER}"
+               # Create python3.X-config symlink
+               dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+               # Create python-3.5m.pc symlink
+               dosym "python-${PYVER}.pc" 
"/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+       fi
+
+       # python seems to get rebuilt in src_install (bug 569908)
+       # Work around it for now.
+       if has_version dev-libs/libffi[pax-kernel]; then
+               pax-mark E "${ED}/usr/bin/${abiver}"
+       else
+               pax-mark m "${ED}/usr/bin/${abiver}"
+       fi
+
+       rm -r "${libdir}"/ensurepip/_bundled || die
+       if ! use sqlite; then
+               rm -r "${libdir}/"sqlite3 || die
+       fi
+       if ! use tk; then
+               rm -r "${ED}/usr/bin/idle${PYVER}" || die
+               rm -r "${libdir}/"{idlelib,tkinter} || die
+       fi
+
+       ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+       dodoc Misc/{ACKS,HISTORY,NEWS}
+
+       if use examples; then
+               docinto examples
+               find Tools -name __pycache__ -exec rm -fr {} + || die
+               dodoc -r Tools
+       fi
+       insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+       local libname=$(
+               printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+               emake --no-print-directory -s -f - 2>/dev/null
+       )
+       newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+       newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+       newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+       sed \
+               -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+               -e "s:@PYDOC@:pydoc${PYVER}:" \
+               -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+               "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+       # python-exec wrapping support
+       local pymajor=${PYVER%.*}
+       local EPYTHON=python${PYVER}
+       local scriptdir=${D}$(python_get_scriptdir)
+       mkdir -p "${scriptdir}" || die
+       # python and pythonX
+       ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+       ln -s "python${pymajor}" "${scriptdir}/python" || die
+       # python-config and pythonX-config
+       # note: we need to create a wrapper rather than symlinking it due
+       # to some random dirname(argv[0]) magic performed by python-config
+       cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+               #!/bin/sh
+               exec "${abiver}-config" "\${@}"
+       EOF
+       chmod +x "${scriptdir}/python${pymajor}-config" || die
+       ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+       # 2to3, pydoc
+       ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+       ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+       # idle
+       if use tk; then
+               ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+       fi
+}

Reply via email to