# Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI="6" WANT_LIBTOOL="none" inherit autotools flag-o-matic pax-utils python-utils-r1 toolchain-funcs MY_P="Python-${PV}" PATCHSET_VERSION="3.6.8" DESCRIPTION="An interpreted, interactive, object-oriented programming language" HOMEPAGE="https://www.python.org/" SRC_URI="https://www.python.org/ftp/python/${PV}/${MY_P}.tar.xz https://dev.gentoo.org/~floppym/python/python-gentoo-patches-${PATCHSET_VERSION}.tar.xz" LICENSE="PSF-2" SLOT="3.6/3.6m" KEYWORDS="alpha amd64 arm ~arm64 ~hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86" IUSE="bluetooth build examples gdbm hardened ipv6 libressl +ncurses +readline sqlite +ssl test +threads tk wininst +xml" 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:0= app-arch/xz-utils:0= >=sys-libs/zlib-1.1.3:0= virtual/libffi:= virtual/libintl gdbm? ( sys-libs/gdbm:0=[berkdb] ) ncurses? ( >=sys-libs/ncurses-5.2:0= ) readline? ( >=sys-libs/readline-4.1:0= ) sqlite? ( >=dev-db/sqlite-3.3.8:3= ) ssl? ( !libressl? ( dev-libs/openssl:0= ) libressl? ( dev-libs/libressl:0= ) ) tk? ( >=dev-lang/tcl-8.0:0= >=dev-lang/tk-8.0:0= dev-tcltk/blt:0= dev-tcltk/tix ) xml? ( >=dev-libs/expat-2.1:0= ) !!/dev/null) newins "${S}"/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" # for python-exec local vars=( EPYTHON PYTHON_SITEDIR PYTHON_SCRIPTDIR ) # if not using a cross-compiler, use the fresh binary if ! tc-is-cross-compiler; then local -x PYTHON=./python local -x LD_LIBRARY_PATH=${LD_LIBRARY_PATH+${LD_LIBRARY_PATH}:}${PWD} else vars=( PYTHON "${vars[@]}" ) fi python_export "python${PYVER}" "${vars[@]}" echo "EPYTHON='${EPYTHON}'" > epython.py || die python_domodule epython.py # python-exec wrapping support local pymajor=${PYVER%.*} mkdir -p "${D}${PYTHON_SCRIPTDIR}" || die # python and pythonX ln -s "../../../bin/${abiver}" \ "${D}${PYTHON_SCRIPTDIR}/python${pymajor}" || die ln -s "python${pymajor}" \ "${D}${PYTHON_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 > "${D}${PYTHON_SCRIPTDIR}/python${pymajor}-config" <<-EOF || die #!/bin/sh exec "${abiver}-config" "\${@}" EOF chmod +x "${D}${PYTHON_SCRIPTDIR}/python${pymajor}-config" || die ln -s "python${pymajor}-config" \ "${D}${PYTHON_SCRIPTDIR}/python-config" || die # 2to3, pydoc, pyvenv ln -s "../../../bin/2to3-${PYVER}" \ "${D}${PYTHON_SCRIPTDIR}/2to3" || die ln -s "../../../bin/pydoc${PYVER}" \ "${D}${PYTHON_SCRIPTDIR}/pydoc" || die ln -s "../../../bin/pyvenv-${PYVER}" \ "${D}${PYTHON_SCRIPTDIR}/pyvenv" || die # idle if use tk; then ln -s "../../../bin/idle${PYVER}" \ "${D}${PYTHON_SCRIPTDIR}/idle" || die fi } pkg_preinst() { if has_version "<${CATEGORY}/${PN}-${PYVER}" && ! has_version ">=${CATEGORY}/${PN}-${PYVER}_alpha"; then python_updater_warning="1" fi } eselect_python_update() { if [[ -z "$(eselect python show)" || ! -f "${EROOT}usr/bin/$(eselect python show)" ]]; then eselect python update fi if [[ -z "$(eselect python show --python${PV%%.*})" || ! -f "${EROOT}usr/bin/$(eselect python show --python${PV%%.*})" ]]; then eselect python update --python${PV%%.*} fi } pkg_postinst() { eselect_python_update if [[ "${python_updater_warning}" == "1" ]]; then ewarn "You have just upgraded from an older version of Python." ewarn ewarn "Please adjust PYTHON_TARGETS (if so desired), and run emerge with the --newuse or --changed-use option to rebuild packages installing python modules." fi } pkg_postrm() { eselect_python_update }