diff options
Diffstat (limited to 'dev-lang/python/python-3.10.20.ebuild')
| -rw-r--r-- | dev-lang/python/python-3.10.20.ebuild | 415 |
1 files changed, 181 insertions, 234 deletions
diff --git a/dev-lang/python/python-3.10.20.ebuild b/dev-lang/python/python-3.10.20.ebuild index 6d287d54c604..64368bf20f91 100644 --- a/dev-lang/python/python-3.10.20.ebuild +++ b/dev-lang/python/python-3.10.20.ebuild @@ -1,16 +1,14 @@ -# Copyright 1999-2026 Gentoo Authors +# Copyright 2021-2026 Liguros 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 -inherit prefix toolchain-funcs verify-sig +inherit autotools check-reqs flag-o-matic multiprocessing pax-utils prefix 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}" +PATCHSET="python-gentoo-patches-3.10.15" DESCRIPTION="An interpreted, interactive, object-oriented programming language" HOMEPAGE=" @@ -19,7 +17,7 @@ HOMEPAGE=" " SRC_URI=" https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz - https://distfiles.gentoo.org/pub/proj/python/patchsets/${PYVER%t}/${PATCHSET}.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 ) @@ -28,11 +26,8 @@ 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 -" +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" RESTRICT="!test? ( test )" # Do not add a dependency on dev-lang/python to this ebuild. @@ -43,39 +38,41 @@ RESTRICT="!test? ( test )" RDEPEND=" app-arch/bzip2:= app-arch/xz-utils:= - app-misc/mime-types + app-crypt/libb2 >=dev-libs/expat-2.1:= + dev-lang/python-exec[python_targets_python${PYVER/./_}(-)] dev-libs/libffi:= - dev-libs/mpdecimal:= dev-python/gentoo-common - >=virtual/zlib-1.1.3:= + sys-apps/util-linux:= + >=sys-libs/zlib-1.1.3:= virtual/libcrypt:= virtual/libintl + ensurepip? ( dev-python/ensurepip-wheels ) 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:= ) + 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 - dev-python/ensurepip-pip - dev-python/ensurepip-setuptools - ) + test? ( app-arch/xz-utils[extra-filters(+)] ) valgrind? ( dev-debug/valgrind ) " # autoconf-archive needed to eautoreconf @@ -84,15 +81,10 @@ BDEPEND=" app-alternatives/awk virtual/pkgconfig verify-sig? ( sec-keys/openpgp-keys-python ) -" -PDEPEND=" - ensurepip? ( - dev-python/ensurepip-pip - dev-python/ensurepip-setuptools - ) -" + !sys-devel/gcc[libffi(-)]" +PDEPEND="app-eselect/eselect-python" -VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc +VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/python.org.asc # large file tests involve a 2.5G file being copied (duplicated) CHECKREQS_DISK_BUILD=5500M @@ -121,6 +113,7 @@ src_prepare() { rm -r Modules/expat || die rm -r Modules/_ctypes/libffi* || die + local PATCHES=( "${WORKDIR}/${PATCHSET}" ) @@ -139,89 +132,21 @@ 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}" - - if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then - einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}" - fi + 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) + fi + # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile. # PKG_CONFIG needed for cross. tc-export CXX PKG_CONFIG @@ -231,80 +156,6 @@ 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 @@ -316,15 +167,12 @@ src_configure() { # here. It also matches the default upstream PROFILE_TASK. --timeout 1200 - "${COMMON_TEST_SKIPS[@]}" - - -x test_dtrace + -x test_gdb # 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 @@ -336,34 +184,6 @@ 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+=( @@ -384,17 +204,18 @@ 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-system-libmpdec + --with-platlibdir=lib + --with-pkg-config=yes --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip - $(use_with debug assertions) + $(use_with lto) $(use_enable pgo optimizations) $(use_with readline readline "$(usex libedit editline readline)") $(use_with valgrind) @@ -403,19 +224,69 @@ src_configure() { # disable implicit optimization/debugging flags local -x OPT= - # https://bugs.gentoo.org/700012 - if tc-is-lto; then - append-cflags $(test-flags-CC -ffat-lto-objects) + 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 + ) + myeconfargs+=( - --with-lto + # Point the imminent CHOST build to the Python we just + # built for CBUILD. + --with-build-python="${WORKDIR}"/${P}-${CBUILD}/python ) - fi - 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}" + 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 fi # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get @@ -438,6 +309,20 @@ 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 } @@ -455,14 +340,12 @@ 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= - local -x TMPDIR=/var/tmp + + addpredict "/usr/lib/python${PYVER}/site-packages" fi # also need to clear the flags explicitly here or they end up @@ -487,29 +370,52 @@ 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)" - "${COMMON_TEST_SKIPS[@]}" + + # fails + -x test_gdb ) + 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= - local -x TMPDIR=/var/tmp + # workaround https://bugs.gentoo.org/775416 + addwrite "/usr/lib/python${PYVER}/site-packages" - nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \ + nonfatal emake 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} - emake DESTDIR="${D}" TEST_MODULES=no altinstall + # -j1 hack for now for bug #843458 + emake -j1 DESTDIR="${D}" altinstall # Fix collisions between different slots of Python. rm "${ED}/usr/$(get_libdir)/libpython3.so" || die @@ -543,7 +449,7 @@ src_install() { fi if ! use tk; then rm -r "${ED}/usr/bin/idle${PYVER}" || die - rm -r "${libdir}/"{idlelib,tkinter} || die + rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die fi ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die @@ -569,4 +475,45 @@ 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 } |
