aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-admin/eselect-python/files/python-eselect.patch')
-rw-r--r--app-admin/eselect-python/files/python-eselect.patch368
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.?"