#!/bin/bash # __rvm_select implementation version patch_level function __rvm_select { rvm_ruby_interpreter="${1:-$rvm_ruby_interpreter}" rvm_ruby_interpreter="${rvm_ruby_interpreter:-ruby}" # Default is standard ruby temp=$(echo $rvm_ruby_interpreter | awk '{print substr($1, 0, 1)}') if [ ! -z "$(echo $temp | grep '[0-9]')" ] ; then rvm_ruby_version=$rvm_ruby_interpreter rvm_ruby_interpreter="ruby" fi ; unset temp if [ "$rvm_ruby_version" = "1.8" ] ; then rvm_ruby_version="1.8.6" ; fi if [ "$rvm_ruby_version" = "1.9" ] ; then rvm_ruby_version="1.9.1" ; fi case "$rvm_ruby_interpreter" in macruby) if [ "`uname`" = "Darwin" ] ; then rvm_ruby_repo_url="${rvm_ruby_repo_url:-`__rvm_db "macruby_repo_url"`}" 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" # For now we are only supporting the '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_version="head" unset rvm_ruby_patch_level rvm_ruby_interpreter="rubinius" rvm_ruby_repo_url=`__rvm_db "rubinius_repo_url"` rvm_ruby_configure="" rvm_ruby_make="build" rvm_ruby_make_install="" #rvm_ruby_rev="head" ;; jruby) rvm_ruby_version="${rvm_ruby_version:-`__rvm_db "jruby_version"`}" unset rvm_ruby_patch_level if [ "$rvm_ruby_version" != "1.2.0" -a "$rvm_ruby_version" != "1.3.1" ] ; then __rvm_log "fail" "Unknown jRuby version: $rvm_ruby_version" fi alias jruby_ng="jruby --ng" alias jruby_ng_server="jruby --ng-server" ;; ruby-enterprise|ree) rvm_ruby_interpreter=`__rvm_db "ree_interpreter"` rvm_ruby_version=${rvm_ruby_version:-`__rvm_db "ree_version"`} rvm_ruby_patch_level="${3:-`__rvm_db "ree_patch_level"`}" if [ "$rvm_ruby_version" != "1.8.6" ] ; then __rvm_log "fail" "Unknown Ruby Enterprise Edition version: $rvm_ruby_version" fi ;; 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 }') fi rvm_ruby_version=${rvm_ruby_version:-`__rvm_db "ruby_version"`} # Default verison is 1.8.6 rvm_ruby_patch_level=${rvm_ruby_patch_level:-`__rvm_db "ruby_${rvm_ruby_version}_patch_level"`} # Default verison is 1.8.6 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) #noop? ;; *) __rvm_log "fail" "Ruby implementation '$rvm_ruby_interpreter' is not known." esac if [ ! -z "$rvm_ruby_rev" ] ; then if [ "$rvm_ruby_rev" = "head" -o "$rvm_ruby_rev" = "trunk" ] ; then rvm_ruby_patch_level="head" else rvm_ruby_patch_level="$rvm_ruby_rev" fi fi if [ ! -z "$rvm_ruby_interpreter" -a ! -z "$rvm_ruby_version" -a "$rvm_ruby_interpreter" != "system" ] ; then rvm_major_version=$(echo $rvm_ruby_version | awk -F'.' '{ print $2 }') rvm_minor_version=$(echo $rvm_ruby_version | awk -F'.' '{ print $3 }') if [ -z "$rvm_gem_set_name" ] ; then rvm_gem_home="$rvm_gem_path/$rvm_ruby_interpreter/$rvm_ruby_version" else if [ ! -z "$rvm_gem_set_name_rm" -a -d $rvm_gem_path/$rvm_ruby_interpreter/$rvm_ruby_version-$rvm_gem_set_name ] ; then rm -rf $rvm_gem_path/$rvm_ruby_interpreter/$rvm_ruby_version-$rvm_gem_set_name/ if [ "$rvm_gem_set_name_rm" = "$rvm_gem_set_name" ] ; then unset rvm_gem_set_name ; fi else rvm_gem_home="$rvm_gem_path/$rvm_ruby_interpreter/$rvm_ruby_version-$rvm_gem_set_name" fi if [ ! -z "$rvm_load" ] ; then # TODO: Load a .gemset file. echo "Loading $rvm_load_file file... (not :)" cat $rvm_load_file | $( while read line ; do # for line in `cat $rvm_load_file` ; do if [ -z "`echo $line | sed 's/ //g' | grep '^#'`" ] ; then # Skip comment lines gem=`echo $line | awk -F';' '{print $1}'` prefix=`echo $line | awk -F';' '{print $2}'` if [ -z "$vars" ] ; then GEM_HOME="$rvm_gem_home" gem install --no-rdoc --no-ri -q $gem else eval "GEM_HOME='$rvm_gem_home' $prefix gem install --no-rdoc --no-ri -q $gem" fi unset gem prefix fi done ) fi if [ ! -z "$rvm_dump" ] ; then if [ -z "$rvm_gem_set_name" ] ; then file_name="default" else file_name="$rvm_gem_set_name" fi echo "# $rvm_gem_set_name.gemset generated gem dump file. Note that any env variable settings will be missing. Append these after using a ';' field separator" > $rvm_gem_set_name.gemset gems="`gem list | sed 's/[\(|\)]//g' | sed 's/, /,/g' | tr ' ' ';'`" for gem in $gems ; do name=`echo $gem | awk -F';' '{print $1}'` if [ -z "$rvm_gem_latest" ] ; then versions=`echo $gem | awk -F';' '{print $2}' | sed 's/,/ /g'` for version in $versions ; do echo "$name -v$version" >> $file_name.gemset done unset version else echo "$name" >> $file_name.gemset fi unset name done unset file_name gems versions fi fi mkdir -p $rvm_gem_home if [ -z "$rvm_ruby_patch_level" ] ; then rvm_ruby_package_name="${rvm_ruby_package_name:-"$rvm_ruby_interpreter-$rvm_ruby_version"}" rvm_ruby_home="${rvm_ruby_home:-"$rvm_path/$rvm_ruby_interpreter-$rvm_ruby_version"}" else rvm_ruby_package_name="${rvm_ruby_package_name:-"$rvm_ruby_interpreter-$rvm_ruby_version-$rvm_ruby_patch_level"}" rvm_ruby_home="${rvm_ruby_home:-"$rvm_path/$rvm_ruby_interpreter-$rvm_ruby_version-$rvm_ruby_patch_level"}" fi rvm_ruby_log_path="$rvm_log_path/$rvm_ruby_package_name" rvm_ruby_src_path="$rvm_source_path/$rvm_ruby_package_name" rvm_ruby_binary="$rvm_ruby_home/bin/ruby" rvm_ruby_irbrc="$rvm_ruby_home/.irbrc" rvm_selected=1 export rvm_ruby_interpreter rvm_ruby_version rvm_ruby_repo_url rvm_ruby_version rvm_ruby_package_name rvm_url rvm_ruby_patch_level rvm_ruby_configure rvm_ruby_make rvm_ruby_make_install rvm_ruby_rev rvm_ruby_tag rvm_major_version rvm_minor_version rvm_gem_set_name rvm_gem_path rvm_gem_home rvm_path rvm_source_path rvm_bin_path rvm_ruby_binary rvm_ruby_package_name rvm_ruby_home rvm_log_path rvm_ruby_log_path rvm_source_path rvm_ruby_src_path rvm_ruby_irbrc rvm_selected else rvm_gem_home=$GEM_HOME fi } function __rvm_use { if [ -z "$rvm_selected" ] ; then __rvm_select $* ; fi if [ -z "$rvm_ruby_interpreter" ] ; then rvm_ruby_interpreter="default" ; fi if [ "$rvm_ruby_interpreter" = "default" ] ; then if [ -s $rvm_path/default ] ; then source $rvm_path/default else __rvm_log "error" "no default rvm specified, defaulting to pre-rvm sytem." unset GEM_HOME MY_RUBY_HOME IRBRC PATH="$rvm_default_path" ; export PATH if [ -s $rvm_path/system ] ; then source $rvm_path/system fi fi elif [ "$rvm_ruby_interpreter" = "system" ] ; then unset GEM_HOME MY_RUBY_HOME IRBRC PATH="$rvm_default_path" ; export PATH if [ -s $rvm_path/system ] ; then source $rvm_path/system fi else GEM_HOME=$rvm_gem_home ; export GEM_HOME MY_RUBY_HOME=$rvm_ruby_home ; export MY_RUBY_HOME IRBRC="$rvm_ruby_irbrc" ; export IRBRC if [ -z "$IRBRC" ] ; then unset IRBRC ; fi # Install if not installed if [ ! -d $MY_RUBY_HOME ] ; then __rvm_log "warn" "$rvm_ruby_interpreter $rvm_ruby_version is not installed." __rvm_install-ruby $rvm_ruby_interpreter $rvm_ruby_version $rvm_ruby_patch_level fi if [ ! -s "$rvm_ruby_irbrc" ] ; then rvm_irbrc_file=`cat < "${rvm_ruby_package_name} > ", # default prompt :PROMPT_S => "${rvm_ruby_package_name}%l> ", # known continuation :PROMPT_C => "${rvm_ruby_package_name} > ", :PROMPT_N => "${rvm_ruby_package_name} ?> ", # unknown continuation :RETURN => " => %s \n", :AUTO_INDENT => true } @prompt_mode = :DEFAULT IRB.conf[:PROMPT][@prompt_mode] = @prompt IRB.conf[:PROMPT_MODE] = @prompt_mode Config ` if [ -s ~/.irbrc ] ; then cp ~/.irbrc $rvm_ruby_home/.irbrc fi touch $rvm_ruby_home/.irbrc echo "$rvm_irbrc_file" >> $rvm_ruby_home/.irbrc fi PATH="$MY_RUBY_HOME/bin:$GEM_HOME/bin:$rvm_path/bin:$rvm_default_path" ; export PATH if [ ! -z "$rvm_set_default" ] ; then RUBY_VERSION="$($MY_RUBY_HOME/bin/ruby -v | sed 's/^\(.*\) (.*$/\1/')" export GEM_HOME 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 MY_RUBY_HOME IRBRC ; do eval "export $variable" eval value=\$${variable} if [ ! -z "$variable" ] ; then echo "${variable}='$value' ; export ${variable}" >> $rvm_path/default else echo "unset ${variable}" >> $rvm_path/default fi done unset rvm_set_default fi fi }