diff options
Diffstat (limited to 'app-admin/eselect-python')
-rw-r--r-- | app-admin/eselect-python/Manifest | 1 | ||||
-rw-r--r-- | app-admin/eselect-python/eselect-python-20111108-r1.ebuild | 63 | ||||
-rw-r--r-- | app-admin/eselect-python/files/python-eselect.patch | 378 | ||||
-rw-r--r-- | app-admin/eselect-python/files/wrapper.patch | 25 | ||||
-rw-r--r-- | app-admin/eselect-python/metadata.xml | 5 | ||||
-rw-r--r-- | app-admin/eselect-python/python.eselect | 479 |
6 files changed, 0 insertions, 951 deletions
diff --git a/app-admin/eselect-python/Manifest b/app-admin/eselect-python/Manifest deleted file mode 100644 index 99c09d4..0000000 --- a/app-admin/eselect-python/Manifest +++ /dev/null @@ -1 +0,0 @@ -DIST eselect-python-20111108.tar.bz2 64959 SHA256 34d7618808a3c1d22e6763bc6c67d5ae47a1fa371f5e91de95a911da9aceba5e SHA512 59a493128753ae968c6fa30eb870f52198de7bb5090213ef0b8c0d3d8b1f552ac514174dd1e97e54dd9434432be1a68ad01853d1ffb21e53d28d08f623199dac WHIRLPOOL 605730de7fee70cf5a33e15c8e16a938807c5ed32f80ff0435a196f03cb38ce397092626c88df598b1b88dab7ee3b8c7f3105b9f3b88acb13fe532f964b8aced diff --git a/app-admin/eselect-python/eselect-python-20111108-r1.ebuild b/app-admin/eselect-python/eselect-python-20111108-r1.ebuild deleted file mode 100644 index e07e59b..0000000 --- a/app-admin/eselect-python/eselect-python-20111108-r1.ebuild +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright 1999-2012 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-python/eselect-python-20111108.ebuild,v 1.2 2012/04/26 14:53:20 aballier Exp $ - -# Keep the EAPI low here because everything else depends on it. -# We want to make upgrading simpler. - -EAPI=2 -ESVN_PROJECT="eselect-python" -ESVN_REPO_URI="https://overlays.gentoo.org/svn/proj/python/projects/eselect-python/trunk" - -inherit eutils -if [[ ${PV} == "99999999" ]] ; then - inherit autotools subversion eutils -else - SRC_URI="mirror://gentoo/${P}.tar.bz2" - KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd" -fi - -DESCRIPTION="Eselect module for management of multiple Python versions" -HOMEPAGE="http://www.gentoo.org" - -LICENSE="GPL-2" -SLOT="0" -IUSE="" - -RDEPEND=">=app-admin/eselect-1.2.3" -# Avoid autotool deps for released versions for circ dep issues. -if [[ ${PV} == "99999999" ]] ; then - DEPEND="sys-devel/autoconf" -else - DEPEND="" -fi - -src_unpack() { - unpack ${A} - cd "${S}" - [[ -x configure ]] || eautoreconf -} - -src_prepare() { - epatch "${FILESDIR}"/python-eselect.patch - epatch "${FILESDIR}"/wrapper.patch || die -} - -src_install() { - keepdir /etc/env.d/python - emake DESTDIR="${D}" install || die -} - -pkg_preinst() { - if has_version "<${CATEGORY}/${PN}-20090804" || ! has_version "${CATEGORY}/${PN}"; then - run_eselect_python_update="1" - fi -} - -pkg_postinst() { - if [[ "${run_eselect_python_update}" == "1" ]]; then - ebegin "Running \`eselect python update\`" - eselect python update --ignore 3.0 --ignore 3.1 --ignore 3.2 > /dev/null - eend "$?" - fi -} diff --git a/app-admin/eselect-python/files/python-eselect.patch b/app-admin/eselect-python/files/python-eselect.patch deleted file mode 100644 index 42f7ba7..0000000 --- a/app-admin/eselect-python/files/python-eselect.patch +++ /dev/null @@ -1,378 +0,0 @@ -diff -ur eselect-python-20111108.orig/python.eselect eselect-python-20111108/python.eselect ---- python.eselect 2011-11-09 07:15:22.000000000 +0800 -+++ python.eselect 2012-06-25 21:48:00.142723058 +0800 -@@ -1,4 +1,4 @@ --# Copyright 1999-2010 Gentoo Foundation -+# Copyright 1999-2010 Gentoo Foundation - # Distributed under the terms of the GNU General Public License v2 - # $Id: $ - -@@ -15,9 +15,11 @@ - - # Find a list of Python versions - find_targets() { -- local interpreter interpreters="python?.?" -+ local interpreter interpreters="python?.?" pypyinterpreters="pypy-c1.?" - -- if [[ "${PYTHON_INTERPRETERS_GROUP}" == "2" ]]; then -+ if [[ "${PYTHON_INTERPRETERS_GROUP}" == "1" ]]; then -+ interpreters="pypy-c1.?" -+ elif [[ "${PYTHON_INTERPRETERS_GROUP}" == "2" ]]; then - interpreters="python2.?" - elif [[ "${PYTHON_INTERPRETERS_GROUP}" == "3" ]]; then - interpreters="python3.?" -@@ -25,8 +27,8 @@ - - # Think twice before adding jython to this list. /usr/bin/jython - # is a bash wrapper that calls java-config, which is a Python -- # script, so you need a valid /usr/bin/python to start jython. -- for interpreter in "${INTERPRETER_PATH}"${interpreters}; do -+ # script, so you need a valid /usr/bin/python to start jython. Adding pypy -+ for interpreter in "${INTERPRETER_PATH}"${interpreters} "${INTERPRETER_PATH}"${pypyinterpreters}; do - if [[ -f "${interpreter}" ]]; then - echo ${interpreter#${INTERPRETER_PATH}} - fi -@@ -40,8 +42,9 @@ - } - - set_python_config() { -- local script="${INTERPRETER_PATH}python-config" target="${1}" -- cat << EOF > "${script}" -+ local script="${INTERPRETER_PATH}python-config" pyscript=${INTERPRETER_PATH}pypy-config target="${1}" -+ if [[ "${target:0:6}" == "python" ]]; then -+ cat << EOF > "${script}" - #!/usr/bin/env bash - # Gentoo python-config wrapper script - -@@ -49,18 +52,31 @@ - python_config="\${EPYTHON/python/python-config-}" - "\${0%/*}/\${python_config:-${target}}" "\$@" - EOF -- chmod a+rx "${script}" -+ chmod a+rx "${script}" -+ elif [[ "${target:0:6}" == "pypy-c" ]]; then -+ cat << EOF > "${pyscript}" -+#!/usr/bin/env bash -+# Gentoo python-config wrapper script -+ -+[[ "\${EPYTHON}" =~ (/|^python\$) ]] && EPYTHON="${target/-config-/}" -+python_config="\${EPYTHON/python/python-config-}" -+"\${0%/*}/\${python_config:-${target}}" "\$@" -+EOF -+ chmod a+rx "${pyscript}" -+ fi -+ # We always need a "${script}" -+ ln -s "${pyscript}" "${script}" - } - - # Try to remove python and python.1 symlinks - remove_symlinks() { - local symlink symlink_target symlink_target_found - if [[ "${SET_MAIN_ACTIVE_PYTHON_INTERPRETER}" == "1" ]]; then -- rm -f "${INTERPRETER_PATH}"{idle,pydoc,python,python-config,pythonw} &> /dev/null || return 1 -+ rm -f "${INTERPRETER_PATH}"{idle,pydoc,python,pypy,python-config,pythonw} &> /dev/null || return 1 - rm -f "${MAN_PATH}"python.1{,.gz,.bz2,.lzma,.xz} &> /dev/null || return 1 - fi - -- for symlink in "${INTERPRETER_PATH}python"?; do -+ for symlink in "${INTERPRETER_PATH}python"? "${INTERPRETER_PATH}pypy-c"?; do - [[ ! -L "${symlink}" ]] && continue - symlink_target_found=0 - for symlink_target in "${symlink}".?; do -@@ -75,7 +91,7 @@ - rm -f "${INTERPRETER_PATH%/bin/}/lib/Python.framework}"/{Headers,Python,Resources} - } - --# Set a man page symlink -+# Set a man page symlink; pypy apparently does not come with man pages - set_man_symlink() { - local target="${1}" x extension - -@@ -86,13 +102,15 @@ - fi - done - -- if [[ -z "${extension}" ]]; then -+ if [[ -z "${extension}" && "${target:0:4}" != "pypy" ]]; then - echo "Couldn't find a man page for ${target}; skipping." 1>&2 - return 1 - fi - - pushd "${MAN_PATH}" 1> /dev/null -- ln -nfs "${target}${extension}" "python${extension}" -+ if [[ "${target:0:4}" != "pypy" ]]; then -+ ln -nfs "${target}${extension}" "python${extension}" -+ fi - popd 1> /dev/null - } - -@@ -175,17 +193,22 @@ - - describe_show_options() { - echo "--ABI : Show Python ABI in format of PYTHON_ABI variable" -+ echo "--pypy-c1 : Show active pypy 1 interpreter" - echo "--python2 : Show active Python 2 interpreter" - echo "--python3 : Show active Python 3 interpreter" -+ echo "" - } - - do_show() { -- local ABI="0" interpreter python2="0" python3="0" -+ local ABI="0" interpreter python2="0" python3="0" pypy1="0" - while [[ $# > 0 ]]; do - case "$1" in - --ABI) - ABI="1" - ;; -+ --pypy1) -+ pypy1="1" -+ ;; - --python2) - python2="1" - ;; -@@ -201,9 +224,15 @@ - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - -- if [[ "${python2}" == "1" ]]; then -+ if [[ "${pypy1}" == "1" ]]; then -+ interpreter="$(readlink "${INTERPRETER_PATH}pypy-c1")" -+ elif [[ "${python2}" == "1" ]]; then - interpreter="$(readlink "${INTERPRETER_PATH}python2")" - elif [[ "${python3}" == "1" ]]; then - interpreter="$(readlink "${INTERPRETER_PATH}python3")" -@@ -211,8 +240,10 @@ - interpreter="$(<"${ENV_D_PATH}/python/config")" - fi - -- if [[ "${ABI}" == "1" ]]; then -+ if [[ "${ABI}" == "1" && "${interpreter:0:6}" == "python" ]]; then - echo -n "${interpreter#python}" -+ elif [[ "${ABI}" == "1" && "${interpreter:0:6}" == "pypy-c" ]]; then -+ echo -n 2.7-"${interpreter/c/}" - else - echo -n "${interpreter}" - fi -@@ -229,14 +260,23 @@ - } - - describe_list_options() { -+ echo "--pypy1 : List installed Pypy 1 interpreters" - echo "--python2 : List installed Python 2 interpreters" - echo "--python3 : List installed Python 3 interpreters" - } - - do_list() { -- local active i python_descriptive_name="Python" python_version_option= python2="0" python3="0" targets=() -+ local active i python_descriptive_name="Python" python_version_option= python2="0" python3="0" -+ local pypy1="0" targets=() active_version=$(do_show) -+ - while [[ $# > 0 ]]; do - case "$1" in -+ --pypy1) -+ pypy1="1" -+ python_descriptive_name="Pypy 1" -+ python_version_option="--pypy1" -+ PYTHON_INTERPRETERS_GROUP="1" -+ ;; - --python2) - python2="1" - python_descriptive_name="Python 2" -@@ -258,19 +298,69 @@ - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - -- targets=($(find_targets)) -+ combined_targets=($(find_targets)) -+ # $(find_targets) captures pypy entries; need to filter them from the list -+ if [[ $PYTHON_INTERPRETERS_GROUP > "1" ]]; then -+ for (( j=0 ; j < ${#combined_targets[@]} ; j++ )) -+ do -+ if [[ ${combined_targets[$j]:0:4} == "pypy" ]]; then -+ break -+ fi -+ targets[$j]="${combined_targets[$j]}" -+ done - -- write_list_start "Available ${python_descriptive_name} interpreters:" - -- active="$(do_show ${python_version_option})" -- for ((i = 0; i < ${#targets[@]}; i++)); do -- if [[ ${targets[${i}]} == ${active} ]]; then -- targets[${i}]="$(highlight_marker "${targets[${i}]}")" -- fi -- done -- write_numbered_list -m "(none found)" "${targets[@]}" -+ write_list_start "Available ${python_descriptive_name} interpreters:" -+ -+ active="$(do_show ${python_version_option})" -+ for ((i = 0; i < ${#targets[@]}; i++)); do -+ if [[ ${targets[${i}]} == ${active} ]]; then -+ targets[${i}]="$(highlight_marker "${targets[${i}]}")" -+ fi -+ done -+ write_numbered_list -m "(none found)" "${targets[@]}" -+ -+ elif [[ $PYTHON_INTERPRETERS_GROUP == "1" ]]; then -+ # pypy entries duplicate, filter to only 1 of each -+ for (( j=0 ; j < ${#combined_targets[@]} ; j++ )) -+ do -+ if [[ $j -gt 0 && "${combined_targets[$j]}" == "${combined_targets[0]}" ]]; then -+ break -+ fi -+ targets[$j]="${combined_targets[$j]}" -+ done -+ write_list_start "Available ${python_descriptive_name} interpreters:" -+ -+ if [[ "${active_version:0:4}" == "pypy" ]]; then -+ active="$(do_show ${python_version_option})" -+ for ((i = 0; i < ${#targets[@]}; i++)); do -+ if [[ ${targets[${i}]} == ${active} ]]; then -+ targets[${i}]="$(highlight_marker "${targets[${i}]}")" -+ fi -+ done -+ fi -+ write_numbered_list -m "(none found)" "${targets[@]}" -+ -+ else -+ targets=($(find_targets)) active=($(find_targets)) -+ -+ write_list_start "Available ${python_descriptive_name} interpreters:" -+ -+ active="$(do_show ${python_version_option})" -+ -+ for ((i = 0; i < ${#targets[@]}; i++)); do -+ if [[ ${targets[${i}]} == ${active} ]]; then -+ targets[${i}]="$(highlight_marker "${targets[${i}]}")" -+ fi -+ done -+ write_numbered_list -m "(none found)" "${targets[@]}" -+ fi - } - - ### set action ### -@@ -280,6 +370,7 @@ - } - - describe_set_options() { -+ echo "--pypy-c1 : Set active Pypy-c 1 interpreter without setting of main active Python interpreter if it is not set to Pypy-c 1" - echo "--python2 : Set active Python 2 interpreter without setting of main active Python interpreter if it is not set to Python 2" - echo "--python3 : Set active Python 3 interpreter without setting of main active Python interpreter if it is not set to Python 3" - } -@@ -289,10 +380,14 @@ - } - - do_set() { -- local main_active_python_interpreter python2="0" python3="0" -+ local main_active_python_interpreter python2="0" python3="0" pypy1="0" - SET_MAIN_ACTIVE_PYTHON_INTERPRETER="1" - while [[ $# > 0 ]]; do - case "$1" in -+ --pypy1) -+ pypy1="1" -+ PYTHON_INTERPRETERS_GROUP="1" -+ ;; - --python2) - python2="1" - PYTHON_INTERPRETERS_GROUP="2" -@@ -310,6 +405,10 @@ - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - - if [[ $# -lt 1 ]]; then -@@ -319,9 +418,11 @@ - else - main_active_python_interpreter="$(do_show)" - if [[ "${python2}" == "1" && "${main_active_python_interpreter}" != "python2."* ]]; then -- SET_MAIN_ACTIVE_PYTHON_INTERPRETER="0" -- elif [[ "${python3}" == "1" && "${main_active_python_interpreter}" != "python3."* ]]; then -- SET_MAIN_ACTIVE_PYTHON_INTERPRETER="0" -+ if [[ "${python3}" == "1" && "${main_active_python_interpreter}" != "python3."* ]]; then -+ if [[ "${pypy1}" == "1" && "${main_active_python_interpreter}" != "pypy-c1."* ]]; then -+ SET_MAIN_ACTIVE_PYTHON_INTERPRETER="0" -+ fi -+ fi - fi - - if ! set_scripts_and_symlinks "${1}"; then -@@ -343,12 +444,14 @@ - describe_update_options() { - echo "--if-unset : Do not override existing implementation" - echo "--ignore SLOT : Ignore SLOT when setting symlinks" -+ echo "--pypy-c1 : Set active Pypy-c 1 interpreter without setting of main active Python interpreter if it is not set to Pypy-c 1" - echo "--python2 : Set active Python 2 interpreter without setting of main active Python interpreter if it is not set to Python 2" - echo "--python3 : Set active Python 3 interpreter without setting of main active Python interpreter if it is not set to Python 3" - } - - do_update() { -- local if_unset="0" ignored_slots=() interpreters="python?.?" python2="0" python3="0" python_version_option= slot= target targets=() -+ local if_unset="0" ignored_slots=() interpreters="python?.?" python2="0" python3="0" pypy1="0" -+ local python_version_option= slot= target targets=() - while [[ $# > 0 ]]; do - case "$1" in - --if-unset) -@@ -357,6 +460,10 @@ - --ignore) - ignored_slots+=("${2}") - shift;; -+ --pypy1) -+ pypy1="1" -+ python_version_option="--pypy-c1" -+ ;; - --python2) - python2="1" - python_version_option="--python2" -@@ -374,19 +481,28 @@ - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" -+ elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then -+ die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - -+ # This reduceS by 3 lines - if [[ "${if_unset}" == "1" && -f "${INTERPRETER_PATH}python" && -f "${ENV_D_PATH}/python/config" ]]; then -- if [[ "${python2}" == "1" && -f "${INTERPRETER_PATH}python2" ]]; then -- return -- elif [[ "${python3}" == "1" && -f "${INTERPRETER_PATH}python3" ]]; then -- return -- elif [[ "${python2}" == "0" && "${python3}" == "0" ]]; then -- return -+ if [[ "${pypy1}" == "1" && -f "${INTERPRETER_PATH}pypy1" ]]; then -+ if [[ "${python2}" == "1" && -f "${INTERPRETER_PATH}python2" ]]; then -+ if [[ "${python3}" == "1" && -f "${INTERPRETER_PATH}python3" ]]; then -+ if [[ "${python2}" == "0" && "${python3}" == "0" && "${pypy1}" == "0" ]]; then -+ return -+ fi -+ fi -+ fi - fi - fi - -- if [[ "${python2}" == "1" ]]; then -+ if [[ "${pypy1}" == "1" ]]; then -+ interpreters="pypy-c1.?" -+ elif [[ "${python2}" == "1" ]]; then - interpreters="python2.?" - elif [[ "${python3}" == "1" ]]; then - interpreters="python3.?" diff --git a/app-admin/eselect-python/files/wrapper.patch b/app-admin/eselect-python/files/wrapper.patch deleted file mode 100644 index f15ca2e..0000000 --- a/app-admin/eselect-python/files/wrapper.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -ur eselect-python-20111108.orig/python-wrapper.c eselect-python-20111108/python-wrapper.c ---- python-wrapper.c 2011-11-09 07:15:22.000000000 +0800 -+++ python-wrapper.c 2012-06-06 15:14:49.712818087 +0800 -@@ -82,7 +82,7 @@ - /* True if a valid file name, and not "python" */ - int valid_interpreter(const char* name) - { -- if (! name || ! *name || (strcmp(name, "python") == 0)) -+ if (! name || ! *name || (strcmp(name, "python") == 0) || (strncmp(name, "pypy-c", 6) == 0) ) - { - return 0; - } -@@ -91,10 +91,9 @@ - - int get_version(const char* name) - { -- /* Only find files beginning with "python" - this is a fallback, -- * so we only want CPython -+ /* Find files beginning with "python" && "pypy-c1"; so we want CPython && pypy. - */ -- if (! valid_interpreter(name) || strncmp(name, "python", 6) != 0) -+ if (! (valid_interpreter(name)) || strncmp(name, "python", 6) != 0 || (strncmp(name, "pypy-c", 6) != 0)) - return -1; - int pos = 6; - int major = 0; diff --git a/app-admin/eselect-python/metadata.xml b/app-admin/eselect-python/metadata.xml deleted file mode 100644 index 301d220..0000000 --- a/app-admin/eselect-python/metadata.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> -<pkgmetadata> - <herd>python</herd> -</pkgmetadata> diff --git a/app-admin/eselect-python/python.eselect b/app-admin/eselect-python/python.eselect deleted file mode 100644 index 25b4552..0000000 --- a/app-admin/eselect-python/python.eselect +++ /dev/null @@ -1,479 +0,0 @@ -# Copyright 1999-2010 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Id: $ - -DESCRIPTION="Manage Python symlinks" -MAINTAINER="python@gentoo.org" -SVN_DATE='$Date: 2010-08-02 12:23:53 -0400 (Mon, 02 Aug 2010) $' -VERSION=$(svn_date_to_version "${SVN_DATE}" ) - -ENV_D_PATH="${EROOT%/}/etc/env.d" -INTERPRETER_PATH="${EROOT%/}/usr/bin/" -MAN_PATH="${EROOT%/}/usr/share/man/man1/" - -PYTHON_INTERPRETERS_GROUP="" - -# Find a list of Python versions -find_targets() { - local interpreter interpreters="python?.?" pypyinterpreters="pypy-c1.?" - - if [[ "${PYTHON_INTERPRETERS_GROUP}" == "1" ]]; then - interpreters="pypy-c1.?" - elif [[ "${PYTHON_INTERPRETERS_GROUP}" == "2" ]]; then - interpreters="python2.?" - elif [[ "${PYTHON_INTERPRETERS_GROUP}" == "3" ]]; then - interpreters="python3.?" - fi - - # Think twice before adding jython to this list. /usr/bin/jython - # is a bash wrapper that calls java-config, which is a Python - # script, so you need a valid /usr/bin/python to start jython. Adding pypy - for interpreter in "${INTERPRETER_PATH}"${interpreters} "${INTERPRETER_PATH}"${pypyinterpreters}; do - if [[ -f "${interpreter}" ]]; then - echo ${interpreter#${INTERPRETER_PATH}} - fi - done -} - -set_python() { - local symlink="${INTERPRETER_PATH}python" target="${1}" - ln -s python-wrapper "${symlink}" - echo "${target}" > "${ENV_D_PATH}/python/config" -} - -set_python_config() { - local script="${INTERPRETER_PATH}python-config" pyscript=${INTERPRETER_PATH}pypy-config target="${1}" - if [[ "${target:0:6}" == "python" ]]; then - cat << EOF > "${script}" -#!/usr/bin/env bash -# Gentoo python-config wrapper script - -[[ "\${EPYTHON}" =~ (/|^python\$) ]] && EPYTHON="${target/-config-/}" -python_config="\${EPYTHON/python/python-config-}" -"\${0%/*}/\${python_config:-${target}}" "\$@" -EOF - chmod a+rx "${script}" - elif [[ "${target:0:6}" == "pypy-c" ]]; then - cat << EOF > "${pyscript}" -#!/usr/bin/env bash -# Gentoo python-config wrapper script - -[[ "\${EPYTHON}" =~ (/|^python\$) ]] && EPYTHON="${target/-config-/}" -python_config="\${EPYTHON/python/python-config-}" -"\${0%/*}/\${python_config:-${target}}" "\$@" -EOF - chmod a+rx "${pyscript}" - fi -} - -# Try to remove python and python.1 symlinks -remove_symlinks() { - local symlink symlink_target symlink_target_found - if [[ "${SET_MAIN_ACTIVE_PYTHON_INTERPRETER}" == "1" ]]; then - rm -f "${INTERPRETER_PATH}"{idle,pydoc,python,pypy,python-config,pythonw} &> /dev/null || return 1 - rm -f "${MAN_PATH}"python.1{,.gz,.bz2,.lzma,.xz} &> /dev/null || return 1 - fi - - for symlink in "${INTERPRETER_PATH}python"? "${INTERPRETER_PATH}pypy-c"?; do - [[ ! -L "${symlink}" ]] && continue - symlink_target_found=0 - for symlink_target in "${symlink}".?; do - [[ -f "${symlink_target}" ]] && symlink_target_found=1 - done - if [[ "${symlink_target_found}" -eq 0 ]]; then - rm -f "${symlink}" - fi - done - - # Files of Mac OS X framework - rm -f "${INTERPRETER_PATH%/bin/}/lib/Python.framework}"/{Headers,Python,Resources} -} - -# Set a man page symlink; pypy apparently does not come with man pages -set_man_symlink() { - local target="${1}" x extension - - for x in ".1" ".1.bz2" ".1.gz" ".1.lzma" ".1.xz"; do - if [[ -e "${MAN_PATH}${target}${x}" ]]; then - extension="${x}" - break - fi - done - - if [[ -z "${extension}" && "${target:0:4}" != "pypy" ]]; then - echo "Couldn't find a man page for ${target}; skipping." 1>&2 - return 1 - fi - - pushd "${MAN_PATH}" 1> /dev/null - if [[ "${target:0:4}" != "pypy" ]]; then - ln -nfs "${target}${extension}" "python${extension}" - fi - popd 1> /dev/null -} - -# Set python-config script and appropriate symlinks -set_scripts_and_symlinks() { - local target="${1}" targets=($(find_targets)) - if is_number "${target}" && [[ ${target} -ge 1 ]]; then - target=${targets[$((${target} - 1))]} - fi - - if ! has ${target} "${targets[@]}"; then - die -q "Invalid target ${target}" - fi - if [[ -f "${INTERPRETER_PATH}${target}" ]]; then - if ! remove_symlinks; then - die -q "Cannot remove symlinks" - fi - - if [[ "${SET_MAIN_ACTIVE_PYTHON_INTERPRETER}" == "1" ]]; then - set_man_symlink "${target}" - fi - - pushd "${INTERPRETER_PATH}" 1> /dev/null - - ln -nfs "${target}" "${target%.*}" - if [[ "${SET_MAIN_ACTIVE_PYTHON_INTERPRETER}" == "1" ]]; then - set_python "${target}" - set_python_config "${target/python/python-config-}" - ln -nfs "${target/python/pydoc}" pydoc - # idle is optionally installed - if [[ -f "${target/python/idle}" ]]; then - ln -nfs "${target/python/idle}" idle - fi - # 2to3 for >=2.6 - if [[ -f "${target/python/2to3-}" ]]; then - ln -nfs "${target/python/2to3-}" 2to3 - fi - - # Wrapper for graphical applications on Mac OS X - if [[ -f "${target/python/pythonw}" ]] ; then - ln -nfs "${target/python/pythonw}" pythonw - fi - - # Files of Mac OS X framework - local framework_dir="${INTERPRETER_PATH%/bin/}/lib/Python.framework" - if [[ -d "${framework_dir}" ]]; then - local version="${target#python}" - pushd "${framework_dir}" 1> /dev/null - ln -nfs "Versions/${version}/Headers" - ln -nfs "Versions/${version}/Python" - ln -nfs "Versions/${version}/Resources" - popd 1> /dev/null - fi - fi - - popd 1> /dev/null - else - die -q "Target \"${1}\" doesn't appear to be valid!" - fi -} - -# Set the content of /etc/env.d/65python-docs -set_python_docs() { - local path target="${1#python}" variable - rm -f "${ENV_D_PATH}/65python-docs" - if [[ -f "${ENV_D_PATH}/60python-docs-${target}" ]]; then - variable="PYTHONDOCS_${target//./_}" - path="$(. "${ENV_D_PATH}/60python-docs-${target}"; echo -n "${!variable}")" - if [[ -d "${path}" ]]; then - echo "PYTHONDOCS=\"${path}\"" > "${ENV_D_PATH}/65python-docs" - fi - fi -} - -### show action ### - -describe_show() { - echo "Show main active Python interpreter" -} - -describe_show_options() { - echo "--ABI : Show Python ABI in format of PYTHON_ABI variable" - echo "--pypy-c1 : Show active pypy 1 interpreter" - echo "--python2 : Show active Python 2 interpreter" - echo "--python3 : Show active Python 3 interpreter" - echo "" -} - -do_show() { - local ABI="0" interpreter python2="0" python3="0" pypy1="0" - while [[ $# > 0 ]]; do - case "$1" in - --ABI) - ABI="1" - ;; - --pypy1) - pypy1="1" - ;; - --python2) - python2="1" - ;; - --python3) - python3="1" - ;; - *) - die -q "Unrecognized argument '$1'" - ;; - esac - shift - done - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then - die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then - die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - - if [[ "${pypy1}" == "1" ]]; then - interpreter="$(readlink "${INTERPRETER_PATH}pypy-c1")" - elif [[ "${python2}" == "1" ]]; then - interpreter="$(readlink "${INTERPRETER_PATH}python2")" - elif [[ "${python3}" == "1" ]]; then - interpreter="$(readlink "${INTERPRETER_PATH}python3")" - elif [[ -f "${ENV_D_PATH}/python/config" ]]; then - interpreter="$(<"${ENV_D_PATH}/python/config")" - fi - - if [[ "${ABI}" == "1" && "${interpreter:0:6}" == "python" ]]; then - echo -n "${interpreter#python}" - elif [[ "${ABI}" == "1" && "${interpreter:0:6}" == "pypy-c" ]]; then - echo -n "${interpreter#pypy-c}" - else - echo -n "${interpreter}" - fi - - if [[ -n "${interpreter}" ]]; then - echo - fi -} - -### list action ### - -describe_list() { - echo "List installed Python interpreters" -} - -describe_list_options() { - echo "--pypy-c1 : List installed Pypy-c 1 interpreters" - echo "--python2 : List installed Python 2 interpreters" - echo "--python3 : List installed Python 3 interpreters" -} - -do_list() { - local active i python_descriptive_name="Python" python_version_option= python2="0" python3="0" - local pypy1="0" targets=() - while [[ $# > 0 ]]; do - case "$1" in - --pypy1) - pypy1="1" - python_descriptive_name="Pypy 1" - python_version_option="--pypy-c1" - PYTHON_INTERPRETERS_GROUP="1" - ;; - --python2) - python2="1" - python_descriptive_name="Python 2" - python_version_option="--python2" - PYTHON_INTERPRETERS_GROUP="2" - ;; - --python3) - python3="1" - python_descriptive_name="Python 3" - python_version_option="--python3" - PYTHON_INTERPRETERS_GROUP="3" - ;; - *) - die -q "Unrecognized argument '$1'" - ;; - esac - shift - done - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then - die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then - die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - - targets=($(find_targets)) - - write_list_start "Available ${python_descriptive_name} interpreters:" - - active="$(do_show ${python_version_option})" - for ((i = 0; i < ${#targets[@]}; i++)); do - if [[ ${targets[${i}]} == ${active} ]]; then - targets[${i}]="$(highlight_marker "${targets[${i}]}")" - fi - done - write_numbered_list -m "(none found)" "${targets[@]}" -} - -### set action ### - -describe_set() { - echo "Set main active Python interpreter" -} - -describe_set_options() { - echo "--pypy-c1 : Set active Pypy-c 1 interpreter without setting of main active Python interpreter if it is not set to Pypy-c 1" - echo "--python2 : Set active Python 2 interpreter without setting of main active Python interpreter if it is not set to Python 2" - echo "--python3 : Set active Python 3 interpreter without setting of main active Python interpreter if it is not set to Python 3" - echo -} - -describe_set_parameters() { - echo "<target>" -} - -do_set() { - local main_active_python_interpreter python2="0" python3="0" pypy1="0" - SET_MAIN_ACTIVE_PYTHON_INTERPRETER="1" - while [[ $# > 0 ]]; do - case "$1" in - --pypy1) - pypy1="1" - PYTHON_INTERPRETERS_GROUP="1" - ;; - --python2) - python2="1" - PYTHON_INTERPRETERS_GROUP="2" - ;; - --python3) - python3="1" - PYTHON_INTERPRETERS_GROUP="3" - ;; - *) - break - ;; - esac - shift - done - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then - die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then - die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - - if [[ $# -lt 1 ]]; then - die -q "'eselect python set' requires Python interpreter filename" - elif [[ $# -gt 1 ]]; then - die -q "'eselect python set' requires 1 argument" - else - main_active_python_interpreter="$(do_show)" - if [[ "${python2}" == "1" && "${main_active_python_interpreter}" != "python2."* ]]; then - if [[ "${python3}" == "1" && "${main_active_python_interpreter}" != "python3."* ]]; then - if [[ "${pypy1}" == "1" && "${main_active_python_interpreter}" != "pypy-c1."* ]]; then - SET_MAIN_ACTIVE_PYTHON_INTERPRETER="0" - fi - fi - fi - - if ! set_scripts_and_symlinks "${1}"; then - die -q "Can't set new provider" - fi - - if [[ "${SET_MAIN_ACTIVE_PYTHON_INTERPRETER}" == "1" ]]; then - set_python_docs "${1}" - fi - fi -} - -### update action ### - -describe_update() { - echo "Switch to the most recent CPython interpreter" -} - -describe_update_options() { - echo "--if-unset : Do not override existing implementation" - echo "--ignore SLOT : Ignore SLOT when setting symlinks" - echo "--pypy-c1 : Set active Pypy-c 1 interpreter without setting of main active Python interpreter if it is not set to Pypy-c 1" - echo "--python2 : Set active Python 2 interpreter without setting of main active Python interpreter if it is not set to Python 2" - echo "--python3 : Set active Python 3 interpreter without setting of main active Python interpreter if it is not set to Python 3" -} - -do_update() { - local if_unset="0" ignored_slots=() interpreters="python?.?" python2="0" python3="0" pypy1="0" - local python_version_option= slot= target targets=() - while [[ $# > 0 ]]; do - case "$1" in - --if-unset) - if_unset="1" - ;; - --ignore) - ignored_slots+=("${2}") - shift;; - --pypy1) - pypy1="1" - python_version_option="--pypy-c1" - ;; - --python2) - python2="1" - python_version_option="--python2" - ;; - --python3) - python3="1" - python_version_option="--python3" - ;; - *) - die -q "Unrecognized argument '$1'" - ;; - esac - shift - done - - if [[ "${python2}" == "1" && "${python3}" == "1" ]]; then - die -q "'--python2' and '--python3' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python2}" == "1" ]]; then - die -q "'--pypy-c1' and '--python2' options cannot be specified simultaneously" - elif [[ "${pypy1}" == "1" && "${python3}" == "1" ]]; then - die -q "'--pypy-c1' and '--python3' options cannot be specified simultaneously" - fi - - # This reduceS by 3 lines - if [[ "${if_unset}" == "1" && -f "${INTERPRETER_PATH}python" && -f "${ENV_D_PATH}/python/config" ]]; then - if [[ "${pypy1}" == "1" && -f "${INTERPRETER_PATH}pypy1" ]]; then - if [[ "${python2}" == "1" && -f "${INTERPRETER_PATH}python2" ]]; then - if [[ "${python3}" == "1" && -f "${INTERPRETER_PATH}python3" ]]; then - if [[ "${python2}" == "0" && "${python3}" == "0" && "${pypy1}" == "0" ]]; then - return - fi - fi - fi - fi - fi - - if [[ "${pypy1}" == "1" ]]; then - interpreters="pypy-c1.?" - elif [[ "${python2}" == "1" ]]; then - interpreters="python2.?" - elif [[ "${python3}" == "1" ]]; then - interpreters="python3.?" - fi - - targets=($(cd "${INTERPRETER_PATH}"; ls ${interpreters} 2> /dev/null | sort -r)) - - # Ignore slots - for slot in ${ignored_slots[@]}; do - targets=(${targets[@]/python${slot}/}) - done - - if [[ ${#targets[@]} -gt 0 ]]; then - target=${targets[0]} - echo "Switching to ${target}" - do_set ${python_version_option} ${target} - else - die -q "No Python interpreter available" - fi -} - -# vim: set ft=eselect : |