#!/bin/bash # __rvm_select implementation version patch_level function __rvm_select { if [[ -z "$rvm_ruby_string" ]] ; then rvm_ruby_string="$rvm_ruby_interpreter" if [[ ! -z "$rvm_ruby_version" ]] ; then rvm_ruby_string="$rvm_ruby_string-$rvm_ruby_version" ; fi if [[ ! -z "$rvm_ruby_patch_level" ]] ; then rvm_ruby_string="$rvm_ruby_string-$rvm_ruby_patch_level" ; fi if [[ ! -z "$rvm_ruby_revision" ]] ; then rvm_ruby_string="$rvm_ruby_string-$rvm_ruby_revision" ; fi fi __rvm_ruby_string if [[ "1.8" = "$rvm_ruby_version" ]] ; then rvm_ruby_version="1.8.6" ; fi if [[ "1.9" = "$rvm_ruby_version" ]] ; then rvm_ruby_version="1.9.1" ; fi case "$rvm_ruby_interpreter" in macruby) if [[ "Darwin" = "$(uname)" ]] ; then rvm_ruby_repo_url="${rvm_ruby_repo_url:-"$(__rvm_db "macruby_repo_url")"}" rvm_ruby_version="${rvm_ruby_version:-head}" rvm_ruby_package_name=${rvm_ruby_interpreter}-${rvm_ruby_version} #rvm_ruby_version="${rvm_ruby_version:-"$(__rvm_db "macruby_version")"}" #rvm_ruby_package_name=${rvm_ruby_interpreter}_nightly-${rvm_ruby_version} #rvm_url="http://dl.getdropbox.com/u/163257/$rvm_ruby_package_name.pkg" # 'nightly' builds unset rvm_ruby_patch_level else __rvm_log "fail" "MacRuby can only be installed on a Darwin OS." fi ;; rbx|rubinius) rvm_ruby_interpreter="rbx" rvm_ruby_version="${rvm_ruby_version:-head}" #rvm_ruby_revision="head" unset rvm_ruby_patch_level rvm_ruby_repo_url=${rvm_rbx_repo_url:-"$(__rvm_db "rubinius_repo_url")"} rvm_ruby_string="rbx-head" rvm_url=$rvm_ruby_repo_url rvm_ruby_configure="" rvm_ruby_make="build" rvm_ruby_make_install="" ;; jruby) rvm_jruby_repo_url="${rvm_jruby_repo_url:-"git://kenai.com/jruby~main"}" rvm_ruby_version="${rvm_ruby_version:-"$(__rvm_db "jruby_version")"}" unset rvm_ruby_patch_level if match "$rvm_ruby_version" "^1.4" ; then rvm_ruby_version="1.4.0RC1" rvm_ruby_string="jruby-1.4.0RC1" rvm_package_file="$rvm_ruby_interpreter-bin-${rvm_ruby_version}" else rvm_package_file="$rvm_ruby_interpreter-bin-$rvm_ruby_version" rvm_ruby_string="${rvm_ruby_interpreter}-${rvm_ruby_version}" fi rvm_url="http://dist.codehaus.org/$rvm_ruby_interpreter/$rvm_ruby_version/$rvm_package_file.tar.gz" alias jruby_ng="jruby --ng" alias jruby_ng_server="jruby --ng-server" ;; ruby-enterprise|ree) rvm_ruby_interpreter=ree rvm_ruby_version=${rvm_ruby_version:-"$(__rvm_db "ree_version")"} if [[ -z "$rvm_ruby_patch_level" ]] ; then rvm_ruby_patch_level="${rvm_ruby_patch_level:-$(__rvm_db "${rvm_ruby_interpreter}_${rvm_ruby_version}_patch_level")}" else rvm_ruby_patch_level="$(echo $rvm_ruby_patch_level | sed 's#^p##')" fi rvm_ruby_string="${rvm_ruby_interpreter}-${rvm_ruby_version}-${rvm_ruby_patch_level}" if [[ "$rvm_ruby_version" != "head" ]] ; then if [[ ! -z "$rvm_ruby_revision" ]] ; then unset rvm_ruby_patch_level rvm_ruby_package_file rvm_ruby_package_name="ree-$rvm_ruby_version-$rvm_ruby_revision" else rvm_ruby_package_file="ruby-enterprise-$rvm_ruby_version-$rvm_ruby_patch_level" rvm_url="${rvm_url:-$(__rvm_db "${rvm_ruby_interpreter}_${rvm_ruby_version}_url")}/$rvm_ruby_package_file.tar.gz" fi fi if ! match "$rvm_ruby_version" "^1\.8" ; then __rvm_log "fail" "Unknown Ruby Enterprise Edition version: $rvm_ruby_version" fi ;; mput|shyouhei) rvm_ruby_interpreter="mput" rvm_ruby_version="head" rvm_ruby_string="mput-head" unset rvm_ruby_patch_level rvm_ruby_repo_url=${rvm_mput_repo_url:-"$(__rvm_db "shyouhei_repo_url")"} rvm_url=$rvm_ruby_repo_url unset rvm_ruby_configure rvm_ruby_make rvm_ruby_make_install ;; ruby) if [[ ! -z "$rvm_ruby_tag" ]] ; then rvm_ruby_version=$(echo $rvm_ruby_tag | sed 's#^v##' | sed 's#/##' | awk -F'_' '{print 1 "." $2 "." $3 }') # rvm_ruby_patch_level=$rvm_ruby_tag # $(echo $rvm_ruby_tag | sed 's#^v##' | sed 's#/##' | awk -F'_' '{print $4 }') if [[ -z "$rvm_ruby_patch_level" ]] ; then rvm_ruby_patch_level=$rvm_ruby_tag ; fi fi if [[ ! -z "$rvm_head_flag" ]] ; then rvm_ruby_repo_url="${rvm_ruby_repo_url:-"$(__rvm_db "ruby_repo_url")"}" ; fi if [[ -z "$rvm_ruby_version" ]] ; then rvm_ruby_version=$(__rvm_db "ruby_version") ; fi if [[ -z "$rvm_ruby_patch_level" ]] ; then rvm_ruby_patch_level="$(__rvm_db "ruby_${rvm_ruby_version/ /}_patch_level")" ; fi if [[ -z "$rvm_ruby_patch_level" ]] ; then unset rvm_ruby_patch_level ; fi if [[ -z "$rvm_ruby_version" ]] ; then __rvm_log "fail" "Unknown ruby version: $rvm_ruby_version" ; fi ;; default|system|current|user) #no-op? ;; *) if [[ ! -z "$MY_RUBY_HOME" ]] ; then rvm_ruby_string=$(basename $MY_RUBY_HOME) __rvm_select else __rvm_log "fail" "Ruby implementation '$rvm_ruby_interpreter' is not known." fi esac if [[ ! -z "$rvm_ruby_revision" ]] ; then if [[ "head" = "$rvm_ruby_revision" ]] || [[ "trunk" = "$rvm_ruby_revision" ]] ; then rvm_ruby_patch_level="head" else rvm_ruby_patch_level="$rvm_ruby_revision" fi fi __rvm_gems_select if [[ ! -z "$rvm_ruby_interpreter" ]] && [[ ! -z "$rvm_ruby_version" ]] && [[ "system" != "$rvm_ruby_interpreter" ]] ; then rvm_major_version=$(echo $rvm_ruby_version | awk -F'.' '{ print $2 }') rvm_minor_version=$(echo $rvm_ruby_version | awk -F'.' '{ print $3 }') rvm_ruby_package_name="$rvm_ruby_string" rvm_ruby_home="$rvm_path/$rvm_ruby_string" rvm_ruby_log_path="$rvm_log_path/$rvm_ruby_string" rvm_ruby_src_path="$rvm_src_path/$rvm_ruby_string" rvm_ruby_binary="$rvm_ruby_home/bin/ruby" rvm_ruby_irbrc="$rvm_ruby_home/.irbrc" if [[ -z "$rvm_gem_set_name" ]] ; then rvm_ruby_gem_home="${rvm_gem_path}/${rvm_ruby_interpreter}/${rvm_ruby_version}" else rvm_ruby_gem_home="${rvm_gem_path}/${rvm_ruby_interpreter}/${rvm_ruby_version}%${rvm_gem_set_name}" fi rvm_ruby_selected_flag=1 export rvm_ruby_interpreter rvm_ruby_version rvm_ruby_repo_url rvm_ruby_package_name rvm_url rvm_ruby_patch_level rvm_ruby_configure rvm_ruby_make rvm_ruby_make_install rvm_ruby_revision rvm_ruby_tag rvm_major_version rvm_minor_version rvm_gem_set_name rvm_gem_path rvm_ruby_gem_home rvm_path rvm_src_path rvm_bin_path rvm_ruby_binary rvm_ruby_home rvm_log_path rvm_ruby_log_path rvm_src_path rvm_ruby_src_path rvm_ruby_irbrc rvm_ruby_selected_flag rvm_ruby_string else rvm_ruby_gem_home="$GEM_HOME" fi } function __rvm_use { if [[ -z "$rvm_ruby_selected_flag" ]] ; then __rvm_select $* ; fi if [[ -z "$rvm_ruby_interpreter" ]] ; then rvm_ruby_interpreter="default" ; fi if [[ "default" = "$rvm_ruby_interpreter" ]] ; then PATH=$(echo $PATH | tr ':' '\n' | awk '$0 !~ /rvm/' | paste -sd : -) PATH=$rvm_bin_path:$PATH ; export PATH if [[ -s $rvm_path/default ]] ; then source $rvm_path/default else rvm_ruby_interpreter="system" __rvm_log "warn" "no default rvm specified, defaulting to pre-rvm sytem." unset GEM_HOME GEM_PATH MY_RUBY_HOME RUBY_VERSION IRBRC if [[ -s $rvm_path/system ]] ; then source $rvm_path/system ; fi fi elif [[ "system" = "$rvm_ruby_interpreter" ]] ; then unset GEM_HOME GEM_PATH MY_RUBY_HOME RUBY_VERSION IRBRC PATH=$(echo $PATH | tr ':' '\n' | awk '$0 !~ /rvm/' | paste -sd : -) PATH=$rvm_bin_path:$PATH ; export PATH if [[ -s $rvm_path/system ]] ; then grep "^MY_RUBY_HOME='$rvm_path" "$rvm_path/system" > /dev/null if [[ $? -eq 0 ]] ; then rm -f $rvm_path/system # 'system' should *not* point to an rvm ruby. else source $rvm_path/system fi fi else GEM_HOME=$rvm_ruby_gem_home ; export GEM_HOME GEM_PATH=$rvm_ruby_gem_home ; export GEM_PATH MY_RUBY_HOME=$rvm_ruby_home ; export MY_RUBY_HOME RUBY_VERSION=$rvm_ruby_string ; export RUBY_VERSION IRBRC="$rvm_ruby_irbrc" ; export IRBRC if [[ -z "$IRBRC" ]] ; then unset IRBRC ; fi if [[ ! -d $MY_RUBY_HOME ]] ; then __rvm_log "warn" "$rvm_ruby_interpreter $rvm_ruby_string is not installed.\nTo install do: 'rvm install $rvm_ruby_string'" if [[ ! -z "$rvm_install_on_use_flag" ]] ; then __rvm_install_ruby $rvm_ruby_interpreter $rvm_ruby_version $rvm_ruby_patch_level fi fi __rvm_irbrc PATH=$(echo $PATH | tr ':' '\n' | awk '$0 !~ /rvm/' | paste -sd : -) PATH=$rvm_bin_path:$PATH ; export PATH PATH=$MY_RUBY_HOME/bin:$GEM_HOME/bin:$rvm_path/bin:$PATH ; export PATH fi if [[ ! -z "$rvm_default_flag" ]] && [[ "default" != "$rvm_ruby_interpreter" ]] ; then if [[ "system" = "$rvm_ruby_interpreter" ]] ; then rm -f $rvm_path/default rm -f $rvm_path/bin/default* else RUBY_VERSION="$($MY_RUBY_HOME/bin/ruby -v | sed 's#^\(.*\) (.*$#\1#')" export GEM_HOME GEM_PATH MY_RUBY_HOME RUBY_VERSION echo "PATH=$MY_RUBY_HOME/bin:$GEM_HOME/bin:$rvm_path/bin:\$PATH ; export PATH" > $rvm_path/default for variable in RUBY_VERSION GEM_HOME GEM_PATH MY_RUBY_HOME IRBRC ; do eval "export $variable" eval value=\$${variable} if [[ ! -z "$value" ]] ; then echo "${variable}='$value' ; export ${variable}" >> $rvm_path/default else echo "unset ${variable}" >> $rvm_path/default fi done ; unset variable value if [[ -s "$rvm_path/bin/$rvm_ruby_string" ]] ; then ln -fs "$rvm_path/bin/$rvm_ruby_string" "$rvm_path/bin/default-ruby" # So that people know what it's for :) ln -fs "$rvm_path/bin/gem-$rvm_ruby_string" "$rvm_path/bin/default-gem" ln -fs "$rvm_path/bin/irb-$rvm_ruby_string" "$rvm_path/bin/default-irb" else rm -f $rvm_path/bin/default* fi fi unset rvm_default_flag fi if [[ ! -z "$rvm_load_flag" ]] ; then __rvm_gems_load ; fi if [[ ! -z "$rvm_dump_flag" ]] ; then __rvm_gems_dump ; fi } __rvm_ruby_string() { if [[ ! -z "$rvm_ruby_string" ]] ; then if [[ "system" = "$rvm_ruby_string" ]] ; then __rvm_unset_ruby_variables rvm_ruby_interpreter="system" else ruby_string="${rvm_ruby_string/ruby-enterprise/ree}" __rvm_unset_ruby_variables if [[ ! -z "$(echo "$ruby_string" | awk -F'%' '{print $2}')" ]] ; then rvm_gem_set_name=$(echo "$ruby_string" | awk -F'%' '{print $2}') fi ruby_string=$(echo "$ruby_string" | awk -F'%' '{print $1}') rvm_ruby_interpreter=$(echo $ruby_string | awk -F'-' '{print $1}') rvm_ruby_version=$(echo $ruby_string | awk -F'-' '{print $2}') if [[ "$rvm_ruby_version" != "head" ]] ; then patch_level=$(echo $ruby_string | awk -F'-' '{print $3}') if [[ ! -z "$patch_level" ]] ; then rvm_ruby_patch_level="p$patch_level" ; fi else unset rvm_ruby_version rvm_head_flag=1 rvm_ruby_revision="head" rvm_ruby_patch_level="head" fi if match "$rvm_ruby_interpreter" "^1\.[8-9]" ; then rvm_ruby_patch_level=$rvm_ruby_version rvm_ruby_version=$rvm_ruby_interpreter rvm_ruby_interpreter="ruby" if [[ -z "$rvm_ruby_patch_level" ]] ; then if [[ "$rvm_ruby_version" != "head" ]] ; then rvm_ruby_patch_level="p$(__rvm_db "${rvm_ruby_interpreter}_${rvm_ruby_version}_patch_level")" else unset rvm_ruby_version rvm_head_flag=1 rvm_ruby_revision="head" rvm_ruby_patch_level="head" fi fi elif match "$rvm_ruby_interpreter" "^1\.[3-4]" ; then rvm_ruby_version=$rvm_ruby_interpreter rvm_ruby_interpreter=jruby unset rvm_ruby_patch_level fi if match "$rvm_ruby_patch_level" "^r" ; then rvm_ruby_revision=$rvm_ruby_patch_level unset rvm_ruby_patch_level fi if [[ "head" = "$rvm_ruby_version" ]] || [[ "head" = "$rvm_ruby_patch_level" ]] || [[ 1 = "$rvm_head_flag" ]] ; then rvm_ruby_patch_level="head" rvm_head_flag=1 if [[ "rbx" = "$rvm_ruby_interpreter" ]] ; then unset rvm_ruby_patch_level ; fi if [[ "mput" = "$rvm_ruby_interpreter" ]] ; then unset rvm_ruby_patch_level ; fi else revision=$(echo $ruby_string | awk -F'-' '{print $NF}') if [[ ! -z "$revision" ]] ; then rvm_ruby_patch_level="${rvm_ruby_patch_level:-p${patch_level}}" ; fi if [[ ! -z "$revision" ]] ; then if match "$revision" "^[0-9]\.[0-9]" ; then unset rvm_ruby_revision rvm_ruby_tag elif match "$revision" "^p" ; then rvm_ruby_patch_level="$revision" # if [[ "preview" == "$revision" ]] ; then elif match "$revision" "^[0-9]" ; then if [[ "ree" = "$rvm_ruby_interpreter" ]] ; then rvm_ruby_patch_level="$revision" unset rvm_ruby_revision else rvm_ruby_revision="r$revision" fi elif match "$revision" "^r" ; then unset rvm_ruby_patch_level rvm_ruby_revision="$revision" elif match "$revision" "^t" ; then unset rvm_ruby_patch_level rvm_ruby_revision rvm_ruby_tag="$revision" else unset rvm_ruby_patch_level rvm_ruby_revision rvm_ruby_tag fi ; unset revision else patch_level="$(__rvm_db "${rvm_ruby_interpreter}_${rvm_ruby_version}_patch_level")" if [[ ! -z "$patch_level" ]] ; then rvm_ruby_patch_level="p$(__rvm_db "${rvm_ruby_interpreter}_${rvm_ruby_version}_patch_level")" else unset rvm_ruby_patch_level fi ; unset patch_level fi fi if [[ ! -z "$rvm_ruby_revision" ]] ; then rvm_ruby_string="$rvm_ruby_interpreter-$rvm_ruby_version-$rvm_ruby_revision" elif [[ ! -z "$rvm_ruby_patch_level" ]] ; then if match "$rvm_ruby_patch_level" "^[0-9]" ; then rvm_ruby_patch_level="p$rvm_ruby_patch_level" fi rvm_ruby_patch_level="$(echo $rvm_ruby_patch_level | sed 's#^pp#p#')" # sanity check, thanks sfpyra rvm_ruby_string="$rvm_ruby_interpreter-$rvm_ruby_version-$rvm_ruby_patch_level" else rvm_ruby_string="$rvm_ruby_interpreter-$rvm_ruby_version" fi unset ruby_string fi fi return 0 }