diff options
Diffstat (limited to 'app-admin/eselect-python/python.eselect')
-rw-r--r-- | app-admin/eselect-python/python.eselect | 479 |
1 files changed, 0 insertions, 479 deletions
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 : |