summaryrefslogtreecommitdiff
path: root/dev-lang/python/python-3.10.20.ebuild
diff options
context:
space:
mode:
Diffstat (limited to 'dev-lang/python/python-3.10.20.ebuild')
-rw-r--r--dev-lang/python/python-3.10.20.ebuild415
1 files changed, 234 insertions, 181 deletions
diff --git a/dev-lang/python/python-3.10.20.ebuild b/dev-lang/python/python-3.10.20.ebuild
index 64368bf20f91..7b1f2281cfa1 100644
--- a/dev-lang/python/python-3.10.20.ebuild
+++ b/dev-lang/python/python-3.10.20.ebuild
@@ -1,14 +1,16 @@
-# Copyright 2021-2026 Liguros Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI=8
+
+EAPI="8"
WANT_LIBTOOL="none"
-inherit autotools check-reqs flag-o-matic multiprocessing pax-utils prefix python-utils-r1 toolchain-funcs verify-sig
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix toolchain-funcs verify-sig
MY_PV=${PV/_rc/rc}
MY_P="Python-${MY_PV%_p*}"
PYVER=$(ver_cut 1-2)
-PATCHSET="python-gentoo-patches-3.10.15"
+PATCHSET="python-gentoo-patches-${MY_PV}"
DESCRIPTION="An interpreted, interactive, object-oriented programming language"
HOMEPAGE="
@@ -17,7 +19,7 @@ HOMEPAGE="
"
SRC_URI="
https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
- https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ https://distfiles.gentoo.org/pub/proj/python/patchsets/${PYVER%t}/${PATCHSET}.tar.xz
verify-sig? (
https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
)
@@ -26,8 +28,11 @@ S="${WORKDIR}/${MY_P}"
LICENSE="PSF-2"
SLOT="${PYVER}"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="bluetooth build +ensurepip examples gdbm hardened libedit lto +ncurses pgo +readline +sqlite +ssl test tk valgrind"
+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.
@@ -38,16 +43,15 @@ RESTRICT="!test? ( test )"
RDEPEND="
app-arch/bzip2:=
app-arch/xz-utils:=
- app-crypt/libb2
+ app-misc/mime-types
>=dev-libs/expat-2.1:=
- dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
dev-libs/libffi:=
+ dev-libs/mpdecimal:=
dev-python/gentoo-common
- sys-apps/util-linux:=
- >=sys-libs/zlib-1.1.3:=
+ sys-apps/util-linux
+ >=virtual/zlib-1.1.3:=
virtual/libcrypt:=
virtual/libintl
- ensurepip? ( dev-python/ensurepip-wheels )
gdbm? ( sys-libs/gdbm:=[berkdb] )
ncurses? ( >=sys-libs/ncurses-5.2:= )
readline? (
@@ -55,24 +59,23 @@ RDEPEND="
libedit? ( dev-libs/libedit:= )
)
sqlite? ( >=dev-db/sqlite-3.3.8:3= )
- ssl? (
- >=dev-libs/openssl-1.1.1:=
-
- )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
tk? (
>=dev-lang/tcl-8.0:=
>=dev-lang/tk-8.0:=
dev-tcltk/blt:=
dev-tcltk/tix
)
- !!<sys-apps/sandbox-2.21
- !build? ( app-misc/mime-types )
"
# bluetooth requires headers from bluez
DEPEND="
${RDEPEND}
bluetooth? ( net-wireless/bluez )
- test? ( app-arch/xz-utils[extra-filters(+)] )
+ test? (
+ app-arch/xz-utils
+ dev-python/ensurepip-pip
+ dev-python/ensurepip-setuptools
+ )
valgrind? ( dev-debug/valgrind )
"
# autoconf-archive needed to eautoreconf
@@ -81,10 +84,15 @@ BDEPEND="
app-alternatives/awk
virtual/pkgconfig
verify-sig? ( sec-keys/openpgp-keys-python )
- !sys-devel/gcc[libffi(-)]"
-PDEPEND="app-eselect/eselect-python"
+"
+PDEPEND="
+ ensurepip? (
+ dev-python/ensurepip-pip
+ dev-python/ensurepip-setuptools
+ )
+"
-VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/python.org.asc
+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
@@ -113,7 +121,6 @@ src_prepare() {
rm -r Modules/expat || die
rm -r Modules/_ctypes/libffi* || die
-
local PATCHES=(
"${WORKDIR}/${PATCHSET}"
)
@@ -132,21 +139,89 @@ src_prepare() {
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} -fno-lto"
+ 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 and bug #864911.
+ 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.
+ --without-lto
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS=disabled
+ MODULE__DBM=disabled
+ MODULE__GDBM=disabled
+ MODULE__DBM=disabled
+ MODULE__SQLITE3=disabled
+ MODULE__HASHLIB=disabled
+ MODULE__SSL=disabled
+ MODULE__CURSES=disabled
+ MODULE__CURSES_PANEL=disabled
+ MODULE_READLINE=disabled
+ MODULE__TKINTER=disabled
+ MODULE_PYEXPAT=disabled
+ MODULE_ZLIB=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the Python it was pointed to
+ # immediately.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" emake
+ popd &> /dev/null || die
+}
+
src_configure() {
- local disable
# disable automagic bluetooth headers detection
if ! use bluetooth; then
local -x ac_cv_header_bluetooth_bluetooth_h=no
fi
+ local disable
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ export PYTHON_DISABLE_MODULES="${disable}"
- append-flags -fwrapv
- filter-flags -malign-double
-
- # https://bugs.gentoo.org/700012
- if is-flagq -flto || is-flagq '-flto=*'; then
- append-cflags $(test-flags-CC -ffat-lto-objects)
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
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
@@ -156,6 +231,80 @@ src_configure() {
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
+ )
+
+ # 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
+ )
+ ;;
+ powerpc64-*) # big endian
+ COMMON_TEST_SKIPS+=(
+ -x test_descr
+ )
+ ;;
+ 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
+ -x test_descr
+ # 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
@@ -167,12 +316,15 @@ src_configure() {
# here. It also matches the default upstream PROFILE_TASK.
--timeout 1200
- -x test_gdb
+ "${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
@@ -184,6 +336,34 @@ src_configure() {
-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+=(
@@ -204,18 +384,17 @@ src_configure() {
--enable-ipv6
--infodir='${prefix}/share/info'
--mandir='${prefix}/share/man'
- --with-computed-gotos
--with-dbmliborder="${dbmliborder}"
--with-libc=
--enable-loadable-sqlite-extensions
--without-ensurepip
+ --without-lto
--with-system-expat
--with-system-ffi
- --with-platlibdir=lib
- --with-pkg-config=yes
+ --with-system-libmpdec
--with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
- $(use_with lto)
+ $(use_with debug assertions)
$(use_enable pgo optimizations)
$(use_with readline readline "$(usex libedit editline readline)")
$(use_with valgrind)
@@ -224,69 +403,19 @@ src_configure() {
# disable implicit optimization/debugging flags
local -x OPT=
- if tc-is-cross-compiler ; then
- # 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
- local -x CFLAGS_NODIST=${CFLAGS_FOR_BUILD}
- local -x LDFLAGS_NODIST=${LDFLAGS_FOR_BUILD}
- local -x CFLAGS= LDFLAGS=
-
- # We need to build our own Python on CBUILD first, and feed it in.
- # bug #847910
- local myeconfargs_cbuild=(
- "${myeconfargs[@]}"
-
- --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
- )
-
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
myeconfargs+=(
- # Point the imminent CHOST build to the Python we just
- # built for CBUILD.
- --with-build-python="${WORKDIR}"/${P}-${CBUILD}/python
+ --with-lto
)
+ fi
- mkdir "${WORKDIR}"/${P}-${CBUILD} || die
- pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
- # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
- # libdir correctly for cross.
- PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" \
- ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
-
- # Avoid as many dependencies as possible for the cross build.
- cat >> Makefile <<-EOF || die
- MODULE_NIS_STATE=disabled
- MODULE__DBM_STATE=disabled
- MODULE__GDBM_STATE=disabled
- MODULE__DBM_STATE=disabled
- MODULE__SQLITE3_STATE=disabled
- MODULE__HASHLIB_STATE=disabled
- MODULE__SSL_STATE=disabled
- MODULE__CURSES_STATE=disabled
- MODULE__CURSES_PANEL_STATE=disabled
- MODULE_READLINE_STATE=disabled
- MODULE__TKINTER_STATE=disabled
- MODULE_PYEXPAT_STATE=disabled
- MODULE_ZLIB_STATE=disabled
- EOF
-
- # 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.
- PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" emake
- popd &> /dev/null || die
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ export PATH="${WORKDIR}/${P}-${CBUILD}:${PATH}"
fi
# pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
@@ -309,20 +438,6 @@ src_configure() {
die "Broken sem_open function (bug 496328)"
fi
- # force-disable modules we don't want built
- local disable_modules=( NIS )
- use gdbm || disable_modules+=( _GDBM _DBM )
- use sqlite || disable_modules+=( _SQLITE3 )
- use ssl || disable_modules+=( _HASHLIB _SSL )
- use ncurses || disable_modules+=( _CURSES _CURSES_PANEL )
- use readline || disable_modules+=( READLINE )
- use tk || disable_modules+=( _TKINTER )
-
- local mod
- for mod in "${disable_modules[@]}"; do
- echo "MODULE_${mod}_STATE=disabled"
- done >> Makefile || die
-
# install epython.py as part of stdlib
echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
}
@@ -340,12 +455,14 @@ src_compile() {
# 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=
-
- addpredict "/usr/lib/python${PYVER}/site-packages"
+ local -x TMPDIR=/var/tmp
fi
# also need to clear the flags explicitly here or they end up
@@ -370,52 +487,29 @@ src_test() {
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)"
-
- # fails
- -x test_gdb
+ "${COMMON_TEST_SKIPS[@]}"
)
- if use sparc ; then
- # bug #788022
- test_opts+=(
- -x test_multiprocessing_fork
- -x test_multiprocessing_forkserver
- )
- fi
-
- # workaround docutils breaking tests
- cat > Lib/docutils.py <<-EOF || die
- raise ImportError("Thou shalt not import!")
- EOF
-
# bug 660358
local -x COLUMNS=80
local -x PYTHONDONTWRITEBYTECODE=
- # workaround https://bugs.gentoo.org/775416
- addwrite "/usr/lib/python${PYVER}/site-packages"
+ local -x TMPDIR=/var/tmp
- nonfatal emake test EXTRATESTOPTS="${test_opts[*]}" \
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
local ret=${?}
- rm Lib/docutils.py || die
-
[[ ${ret} -eq 0 ]] || die "emake test failed"
}
src_install() {
local libdir=${ED}/usr/lib/python${PYVER}
- # -j1 hack for now for bug #843458
- emake -j1 DESTDIR="${D}" altinstall
+ emake DESTDIR="${D}" TEST_MODULES=no altinstall
# Fix collisions between different slots of Python.
rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
@@ -449,7 +543,7 @@ src_install() {
fi
if ! use tk; then
rm -r "${ED}/usr/bin/idle${PYVER}" || die
- rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ rm -r "${libdir}/"{idlelib,tkinter} || die
fi
ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
@@ -475,45 +569,4 @@ src_install() {
-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
-}
-
-pkg_postinst() {
- local v
- for v in ${REPLACING_VERSIONS}; do
- if ver_test "${v}" -lt 3.11.0_beta4-r2; then
- ewarn "Python 3.11.0b4 has changed its module ABI. The .pyc files"
- ewarn "installed previously are no longer valid and will be regenerated"
- ewarn "(or ignored) on the next import. This may cause sandbox failures"
- ewarn "when installing some packages and checksum mismatches when removing"
- ewarn "old versions. To actively prevent this, rebuild all packages"
- ewarn "installing Python 3.11 modules, e.g. using:"
- ewarn
- ewarn " emerge -1v /usr/lib/python3.11/site-packages"
- fi
- done
}