diff options
Diffstat (limited to 'app-admin/eselect-python/files/python-eselect.patch')
-rw-r--r-- | app-admin/eselect-python/files/python-eselect.patch | 368 |
1 files changed, 368 insertions, 0 deletions
diff --git a/app-admin/eselect-python/files/python-eselect.patch b/app-admin/eselect-python/files/python-eselect.patch new file mode 100644 index 0000000..2ab8984 --- /dev/null +++ b/app-admin/eselect-python/files/python-eselect.patch @@ -0,0 +1,368 @@ +diff -ur eselect-python-20111108.orig/python.eselect eselect-python-20111108/python.eselect +--- eselect-python-20111108.orig/python.eselect 2011-11-09 07:15:22.000000000 +0800 ++++ eselect-python-20111108/python.eselect 2012-06-02 17:50:04.149917271 +0800 +@@ -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,29 @@ + 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 + } + + # 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 +89,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 +100,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 +191,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 +222,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 +238,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 "${interpreter#pypy-c}" + else + echo -n "${interpreter}" + fi +@@ -229,14 +258,25 @@ + } + + 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) ++ ++ [[ ${1:0:2} == '--' ]] ++ + 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,65 @@ + + 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[@]}" ++ ++ 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:" + +- 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[@]}" + +- 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[@]}" ++ else ++ 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[@]}" ++ fi + } + + ### set action ### +@@ -280,6 +366,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 +376,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 +401,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 +414,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 +440,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 +456,10 @@ + --ignore) + ignored_slots+=("${2}") + shift;; ++ --pypy1) ++ pypy1="1" ++ python_version_option="--pypy-c1" ++ ;; + --python2) + python2="1" + python_version_option="--python2" +@@ -374,19 +477,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.?" |