aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-admin')
-rw-r--r--app-admin/eselect-python/ChangeLog7
-rw-r--r--app-admin/eselect-python/Manifest1
-rw-r--r--app-admin/eselect-python/eselect-python-20111108-r1.ebuild63
-rw-r--r--app-admin/eselect-python/files/python-eselect.patch378
-rw-r--r--app-admin/eselect-python/files/wrapper.patch25
-rw-r--r--app-admin/eselect-python/metadata.xml5
-rw-r--r--app-admin/eselect-python/python.eselect479
7 files changed, 0 insertions, 958 deletions
diff --git a/app-admin/eselect-python/ChangeLog b/app-admin/eselect-python/ChangeLog
deleted file mode 100644
index ca61fa3..0000000
--- a/app-admin/eselect-python/ChangeLog
+++ /dev/null
@@ -1,7 +0,0 @@
-*eselect-python-20111108-r1 (25 Jun 2012)
-
- 25 Jun 2012; <testuser@gentoo.org> +eselect-python-20111108-r1.ebuild,
- +files/python-eselect.patch, +files/wrapper.patch, +metadata.xml,
- +python.eselect:
- [app-admin/eselect-python] A pypy aware version
-
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 9cceab7..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
-+7# 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 0319f2e..0000000
--- a/app-admin/eselect-python/python.eselect
+++ /dev/null
@@ -1,479 +0,0 @@
-# Copyright 1999-2012 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 :