123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 |
- #!/usr/bin/env bash
- is_a_function()
- {
- \typeset -f $1 >/dev/null 2>&1 || return $?
- }
- # Functions RVM is built on
- # __rvm_string_match <value> <string|glob>
- if
- [[ -n "${ZSH_VERSION:-}" ]]
- then
- __rvm_string_match()
- {
- \typeset _string _search
- _string="$1"
- shift
- while (( $# ))
- do
- _search="$1"
- _search="${_search// /[[:space:]]}"
- _search="${_search//\#/\#}"
- eval "\
- case \"\${_string}\" in\
- ($_search) return 0 ;;\
- esac\
- "
- shift
- done
- return 1
- }
- else
- __rvm_string_match()
- {
- \typeset _string
- _string="$1"
- shift
- while (( $# ))
- do
- case "${_string}" in
- (${1// /[[:space:]]}) return 0 ;;
- esac
- shift
- done
- return 1
- }
- fi
- __rvm_array_contains()
- {
- \typeset _search _iterator
- _search="$1"
- shift
- for _iterator
- do
- case "${_iterator}" in
- (${_search}) return 0 ;;
- esac
- done
- return 1
- }
- __rvm_array_add_or_update()
- {
- \typeset _array_name _variable _separator _value _local_value
- \typeset -a _array_value_old _array_value_new
- _array_name="$1"
- _variable="$2"
- _separator="$3"
- _value="${4##${_separator}}"
- _array_value_new=()
- eval "_array_value_old=( \"\${${_array_name}[@]}\" )"
- case " ${_array_value_old[*]} " in
- (*[[:space:]]${_variable}*)
- for _local_value in "${_array_value_old[@]}"
- do
- case "${_local_value}" in
- (${_variable}*)
- _array_value_new+=( "${_local_value}${_separator}${_value}" )
- ;;
- (*)
- _array_value_new+=( "${_local_value}" )
- ;;
- esac
- done
- ;;
- (*)
- _array_value_new=( "${_array_value_old[@]}" "${_variable}${_value}" )
- ;;
- esac
- eval "${_array_name}=( \"\${_array_value_new[@]}\" )"
- }
- __rvm_array_prepend_or_ignore()
- {
- \typeset _array_name _variable _separator _value _prefix _local_value
- \typeset -a _array_value_old _array_value_new
- _array_name="$1"
- _variable="$2"
- _separator="$3"
- _value="$4"
- _prefix="$5"
- _array_value_new=()
- eval "_array_value_old=( \"\${${_array_name}[@]}\" )"
- case " ${_array_value_old[*]} " in
- (*[[:space:]]${_variable}*)
- for _local_value in "${_array_value_old[@]}"
- do
- case "${_local_value}" in
- (${_variable}*${_prefix}*)
- rvm_debug "__rvm_array_prepend_or_ignore ${_array_name} ${_local_value}"
- _array_value_new+=( "${_local_value}" )
- ;;
- (${_variable}*)
- rvm_debug "__rvm_array_prepend_or_ignore ${_array_name} ${_variable}\"${_value}${_separator}${_local_value#${_variable}}\""
- _array_value_new+=( "${_variable}${_value}${_separator}${_local_value#${_variable}}" )
- ;;
- (*)
- _array_value_new+=( "${_local_value}" )
- ;;
- esac
- done
- eval "${_array_name}=( \"\${_array_value_new[@]}\" )"
- ;;
- esac
- }
- # Drop in replacement for sed -i compatible with OpenBSD
- # Assumes that filename is the first argument, all others are passed onto sed
- __rvm_sed_i()
- {
- \typeset _filename _executable _user
- [[ -n "${1:-}" ]] || {
- rvm_debug "no file given for __rvm_sed_i"
- return 0
- }
- _filename="$1"
- shift
- if [[ -x "${_filename}" ]]
- then _executable=true
- fi
- _user="$( __rvm_statf "%u:%g" "%u:%g" "${_filename}" )"
- {
- __rvm_sed "$@" < "${_filename}" > "${_filename}.new" &&
- \command \mv -f "${_filename}.new" "${_filename}"
- } 2>&1 | rvm_debug_stream
- if [[ -n "${_executable:-}" && ! -x "${_filename}" ]]
- then chmod +x "${_filename}"
- fi
- if [[ "$_user" != "$( __rvm_statf "%u:%g" "%u:%g" "${_filename}" )" ]]
- then chown "$_user" "${_filename}"
- fi
- }
- # Drop in cd which _doesnt't_ respect cdpath
- __rvm_cd()
- {
- \typeset old_cdpath ret
- ret=0
- old_cdpath="${CDPATH}"
- CDPATH="."
- chpwd_functions="" builtin cd "$@" || ret=$?
- CDPATH="${old_cdpath}"
- return $ret
- }
- __rvm_setup_utils_functions()
- {
- \typeset gnu_tools_path gnu_prefix gnu_util
- \typeset -a gnu_utils gnu_missing
- gnu_utils=( awk cp date find sed tail tar xargs )
- gnu_missing=()
- if is_a_function __rvm_setup_utils_functions_${_system_name}
- then __rvm_setup_utils_functions_${_system_name} "$@" || return $?
- else __rvm_setup_utils_functions_Other "$@" || return $?
- fi
- }
- __rvm_setup_utils_functions_Solaris()
- {
- case "${_system_version}" in
- (10)
- gnu_tools_path=/opt/csw/bin
- gnu_prefix="g"
- ;;
- (11)
- gnu_tools_path=/usr/gnu/bin
- gnu_prefix=""
- ;;
- esac
- if [[ -x $gnu_tools_path/${gnu_prefix}grep ]]
- then eval "__rvm_grep() { GREP_OPTIONS=\"\" $gnu_tools_path/${gnu_prefix}grep \"\$@\" || return \$?; }"
- else gnu_missing+=( ${gnu_prefix}grep )
- fi
- if [[ "${_system_name}" == "OpenIndiana" || "${_system_version}" == "11" ]]
- then __rvm_stat() { \command \stat "$@" || return $?; }
- elif [[ -x $gnu_tools_path/${gnu_prefix}stat ]]
- then eval "__rvm_stat() { $gnu_tools_path/${gnu_prefix}stat \"\$@\" || return \$?; }"
- else gnu_missing+=( ${gnu_prefix}stat )
- fi
- if [[ "${_system_name}" == "SmartOS" ]]
- then __rvm_which() { \command \which "$@" || return $?; }
- elif [[ -x $gnu_tools_path/${gnu_prefix}which ]]
- then eval "__rvm_which() { $gnu_tools_path/${gnu_prefix}which \"\$@\" || return \$?; }"
- else gnu_missing+=( ${gnu_prefix}which )
- fi
- for gnu_util in "${gnu_utils[@]}"
- do
- if [[ -x $gnu_tools_path/$gnu_prefix$gnu_util ]]
- then eval "__rvm_$gnu_util() { $gnu_tools_path/$gnu_prefix$gnu_util \"\$@\" || return \$?; }"
- else gnu_missing+=( $gnu_prefix$gnu_util )
- fi
- done
- if
- (( ${#gnu_missing[@]} ))
- then
- rvm_error "ERROR: Missing GNU tools: ${gnu_missing[@]}. Make sure they are installed in '$gnu_tools_path/' before using RVM!"
- if [[ "${_system_name} ${_system_version}" == "Solaris 10" ]]
- then rvm_error "You might want to look at OpenCSW project to install the above mentioned tools (https://www.opencsw.org/about)"
- fi
- exit 200
- fi
- }
- __rvm_setup_utils_functions_OSX()
- {
- if
- [[ -x /usr/bin/stat ]]
- then
- __rvm_stat() { /usr/bin/stat "$@" || return $?; }
- else
- rvm_error "ERROR: Missing (executable) /usr/bin/stat. Falling back to '\\\\command \\\\stat' which might be something else."
- __rvm_stat() { \command \stat "$@" || return $?; }
- fi
- __rvm_setup_utils_functions_common
- }
- __rvm_setup_utils_functions_Other()
- {
- __rvm_stat() { \command \stat "$@" || return $?; }
- __rvm_setup_utils_functions_common
- }
- __rvm_setup_utils_functions_common()
- {
- __rvm_grep() { GREP_OPTIONS="" \command \grep "$@" || return $?; }
- if \command \which --skip-alias --skip-functions which >/dev/null 2>&1
- then __rvm_which() { \command \which --skip-alias --skip-functions "$@" || return $?; }
- elif \command \which whence >/dev/null 2>&1 && \command \whence whence >/dev/null 2>&1
- then __rvm_which() { \command \whence -p "$@" || return $?; }
- elif \command \which which >/dev/null 2>&1
- then __rvm_which() { \command \which "$@" || return $?; }
- elif \which which >/dev/null 2>&1
- then __rvm_which() { \which "$@" || return $?; }
- else
- \typeset __result=$?
- rvm_error "ERROR: Missing proper 'which' command. Make sure it is installed before using RVM!"
- return ${__result}
- fi
- for gnu_util in "${gnu_utils[@]}"
- do eval "__rvm_$gnu_util() { \\$gnu_util \"\$@\" || return \$?; }"
- done
- }
- __rvm_setup_utils_functions || return $?
- # detect system after setting up __rvm_sed and before setting up __rvm_statf
- source "${rvm_scripts_path}/functions/db"
- source "${rvm_scripts_path}/functions/detect/system"
- __rvm_setup_statf_function()
- {
- if
- [[ "${_system_type}" == Darwin || "${_system_type}" == BSD ]]
- then
- __rvm_statf()
- {
- __rvm_stat -f "$2" "$3"
- }
- else
- __rvm_statf()
- {
- __rvm_stat -c "$1" "$3"
- }
- fi
- }
- __rvm_setup_statf_function || return $?
- __rvm_setup_sudo_function()
- {
- if is_a_function __rvm_setup_sudo_function_${_system_name}
- then __rvm_setup_sudo_function_${_system_name} "$@" || return $?
- else __rvm_setup_sudo_function_Other "$@" || return $?
- fi
- }
- __rvm_setup_sudo_function_PCLinuxOS()
- {
- __rvm_sudo()
- {
- if
- [[ "$1" == "-p" ]]
- then
- rvm_printf_to_stderr "${2//%p/[root]/}"
- shift 2
- fi
- su -c "$*"
- }
- }
- __rvm_setup_sudo_function_Solaris()
- {
- if
- [[ -x /opt/csw/bin/sudo ]]
- then
- __rvm_sudo()
- {
- /opt/csw/bin/sudo "$@"
- }
- elif
- [[ -x /usr/bin/sudo ]]
- then
- __rvm_sudo()
- {
- /usr/bin/sudo "$@"
- }
- else
- rvm_debug "Warning: No '/opt/csw/bin/sudo' found."
- fi
- }
- __rvm_setup_sudo_function_Other()
- {
- if
- __rvm_which sudo >/dev/null 2>&1
- then
- __rvm_sudo()
- {
- \command \sudo "$@"
- }
- else
- rvm_debug "Warning: No 'sudo' found."
- fi
- }
- __rvm_setup_sudo_function || return $?
- # Utils that are not needed for RVM installation
- # but have non-standard paths in Solaris 10
- other_utils=( ant automake autoreconf libtoolize make mount patch readlink )
- if
- [[ "${_system_name} ${_system_version}" == "Solaris 10" ]]
- then
- __rvm_ant() { /usr/sfw/bin/ant "$@" || return $?; }
- __rvm_automake() { /opt/csw/bin/automake "$@" || return $?; }
- __rvm_autoreconf() { /opt/csw/bin/autoreconf "$@" || return $?; }
- __rvm_libtoolize() { /opt/csw/bin/libtoolize "$@" || return $?; }
- __rvm_make() { /opt/csw/bin/gmake "$@" || return $?; }
- __rvm_mount() { /sbin/mount "$@" || return $?; }
- __rvm_patch() { /opt/csw/bin/gpatch "$@" || return $?; }
- __rvm_readlink() { /opt/csw/bin/greadlink "$@" || return $?; }
- else
- for other_util in "${other_utils[@]}"
- do eval "__rvm_$other_util() { \\$other_util \"\$@\" || return \$?; }"
- done
- fi
- unset other_util other_utils
- __rvm_readlink_deep()
- {
- eval "
- while [[ -n \"\${$1}\" && -L \"\${$1}\" ]]
- do $1=\"\$(__rvm_readlink \"\${$1}\")\"
- done
- "
- }
- ## duplication marker 32fosjfjsznkjneuera48jae
- __rvm_curl_output_control()
- {
- if
- (( ${rvm_quiet_curl_flag:-0} == 1 ))
- then
- __flags+=( "--silent" "--show-error" )
- elif
- [[ " $*" == *" -s"* || " $*" == *" --silent"* ]]
- then
- # make sure --show-error is used with --silent
- [[ " $*" == *" -S"* || " $*" == *" -sS"* || " $*" == *" --show-error"* ]] ||
- {
- __flags+=( "--show-error" )
- }
- fi
- }
- ## duplication marker 32fosjfjsznkjneuera48jae
- # -S is automatically added to -s
- __rvm_curl()
- (
- \typeset curl_path
- if
- [[ "${_system_name} ${_system_version}" == "Solaris 10" ]] &&
- ! __rvm_which curl >/dev/null 2>&1
- then
- curl_path=/opt/csw/bin/
- else
- curl_path=""
- fi
- __rvm_which ${curl_path}curl >/dev/null 2>&1 ||
- {
- rvm_error "RVM requires 'curl'. Install 'curl' first and try again."
- return 200
- }
- \typeset -a __flags
- __flags=( --fail --location )
- # allow overriding default 30 minutes for download, but should be plenty of time
- if [[ -n "${rvm_curl_flags[*]}" ]]
- then __flags+=( "${rvm_curl_flags[@]}" )
- else __flags+=( --max-redirs 10 --max-time 1800 )
- fi
- [[ "$*" == *"--max-time"* ]] ||
- [[ "$*" == *"--connect-timeout"* ]] ||
- [[ "${__flags[*]}" == *"--connect-timeout"* ]] ||
- __flags+=( --connect-timeout 30 --retry-delay 2 --retry 3 )
- if [[ -n "${rvm_proxy:-}" ]]
- then __flags+=( --proxy "${rvm_proxy:-}" )
- fi
- __rvm_curl_output_control
- unset curl
- __rvm_debug_command ${curl_path}curl "${__flags[@]}" "$@" || return $?
- )
- is_parent_of()
- {
- \typeset name pid ppid pname
- name=$1
- pid=$2
- while [[ -n "$pid" && "$pid" != "0" ]]
- do
- case "`uname`" in
- (SunOS)
- read ppid pname <<<"$(\command \ps -p $pid -o ppid= -o comm=)"
- ;;
- (*)
- read ppid pname <<<"$(\command \ps -p $pid -o ppid= -o ucomm=)"
- ;;
- esac
- if [[ -n "$ppid" && -n "$pname" ]]
- then
- if [[ "$pname" == "$name" ]]
- then
- echo $pid
- return 0
- else
- pid=$ppid
- fi
- else
- break
- fi
- done
- return 1
- }
- __rvm_string_includes()
- {
- \typeset __search __text="$1"
- shift
- for __search in "$@"
- do
- if [[ " ${__text} " == *" ${__search} "* ]]
- then return 0
- fi
- done
- return 1
- }
- __function_on_stack()
- {
- __rvm_string_includes "${FUNCNAME[*]}" "$@" || return $?
- }
- # read lines from file / stdin(-)
- __rvm_read_lines()
- {
- \typeset IFS
- # NEW LINE, BE CAREFUL
- IFS="
- "
- if [[ "${2:--}" == "-" ]]
- then eval "$1=( \$( \command \cat - ) )"
- else eval "$1=( \$( \command \cat \"\${2:--}\" ) )"
- fi
- }
- __setup_lang_fallback()
- {
- if
- [[ -z "${LANG:-}" ]]
- then
- LANG="$(
- {
- locale -a | __rvm_grep "^en_US.utf8" ||
- locale -a | __rvm_grep "^en_US" ||
- locale -a | __rvm_grep "^en" ||
- locale -a
- } 2>/dev/null | \command \head -n 1
- )"
- : LANG=${LANG:=en_US.utf-8}
- export LANG
- rvm_warn "\$LANG was empty, setting up LANG=$LANG, if it fails again try setting LANG to something sane and try again."
- fi
- }
- __rvm_ruby_config_save()
- {
- \typeset ruby_path
- ruby_path="${1:-$rvm_ruby_home/bin/ruby}"
- case "$ruby_path" in
- (*/mruby*)
- __rvm_ruby_config_save_mruby "${2:-${ruby_path%%/bin/ruby}/config}"
- ;;
- (*)
- __rvm_ruby_config_save_generic "$2"
- ;;
- esac
- }
- __rvm_ruby_config_save_mruby()
- {
- echo "target_cpu=\"$_system_arch\"" > "$1"
- }
- __rvm_ruby_config_save_generic()
- {
- \typeset config_path default_config_path
- default_config_path="#{RbConfig::CONFIG[\"prefix\"]}/config"
- config_path="${1:-$default_config_path}"
- "$ruby_path" -rrbconfig -e '\
- File.open("'"$config_path"'","w") { |file|
- RbConfig::CONFIG.sort.each{|key,value|
- file.write("#{key.gsub(/\.|-/,"_")}=\"#{value.to_s.gsub("$","\\$")}\"\n")
- }
- }
- ' >/dev/null 2>&1
- }
- __rvm_record_ruby_configs()
- {
- \typeset __dir
- for __dir in "$rvm_path/rubies/"*
- do
- if
- [[ ! -L "${__dir}" && ! -s "${__dir}/config" && -x "${__dir}/bin/ruby" ]]
- then
- __rvm_ruby_config_save "${__dir}/bin/ruby" "${__dir}/config" ||
- {
- \typeset string="${__dir##*/}"
- rvm_error " Can not save config data for ruby: '${string}', most likely it is broken installation and you can:
- - try fix it: 'rvm reinstall ${string}', OR:
- - remove it: 'rvm uninstall ${string} --gems'"
- }
- fi
- done
- }
- __rvm_ls() { \command \ls "$@" || return $?; }
|