#!/usr/bin/env bash source "$rvm_scripts_path/functions/osx-ssl-certs" make_sure_its_enough_ram_for_rbx() { \typeset rvm_rbx_required_ram rvm_rbx_required_ram_mb=500 __rvm_compiler_is_llvm || __rvm_is_enough_ram ${rvm_rbx_required_ram_mb} || rvm_error "For rbx (Rubinius) more than ${rvm_rbx_required_ram_mb}MB of free RAM might be required." } rubinius_install_detect_required_ruby() { export ruby case "${rvm_ruby_version}" in (2.0.0) case "${rvm_ruby_patch_level}" in (rc1) ruby="ruby-1.9" ;; (*) ruby="ruby-2.2" ;; esac ;; (2*) case "$rvm_ruby_repo_branch" in (1.8.7|1.9.3) ruby="ruby-1.9|ruby-2.2" ;; (*) ruby="ruby-2.2" ;; esac ;; (*) ruby="ruby-2.3.1" ;; esac __rvm_ensure_has_mri_ruby "$ruby" || { rvm_log "No $ruby found, cannot build rbx." return 1 } ruby="$(__rvm_mri_ruby "$ruby")" } rubinius_install_ensure_gem() { __rvm_which "$1" >/dev/null && [[ -x "$rvm_wrappers_path/$ruby/$1" ]] || __rvm_log_command "install.${2:-$1}" \ "$ruby - #install gem ${2:-$1}" \ gem_install ${2:-$1} && __rvm_which "$1" >/dev/null && [[ -x "$rvm_wrappers_path/$ruby/$1" ]] || return $? } rubinius_install_regenerate_binstubs() { gem_install executable-hooks && gem regenerate_binstubs || return $? } rubinius_install_ensure_wrappers() { [[ -x "$rvm_wrappers_path/$ruby/ruby" && -x "$rvm_wrappers_path/$ruby/gem" ]] || __rvm_log_command "gemset.wrappers.rubinius" "$ruby - #generating wrappers" \ run_gem_wrappers regenerate || return $? rubinius_install_ensure_gem rake || return $? rubinius_install_ensure_gem bundle bundler || return $? __rvm_log_command "regenerate_binstubs" \ "$ruby - #regenerating binstubs" \ rubinius_install_regenerate_binstubs || return $? } rubinius_install_setup_ruby() { if [[ ${rvm_ignore_gemsets_flag:-0} -eq 0 ]] then ruby="${ruby}@rubinius" fi __rvm_with "$ruby" rubinius_install_ensure_wrappers __rvm_osx_ssl_certs_ensure_for_ruby "$rvm_wrappers_path/$ruby/ruby" } rubinius_install() { rubinius_install_detect_required_ruby || return $? make_sure_its_enough_ram_for_rbx \typeset rvm_configure_args \typeset -a rvm_ruby_configure unset CFLAGS LDFLAGS ARCHFLAGS # Important. unset GEM_HOME GEM_PATH MY_RUBY_HOME IRBRC RBXOPT export PATH rvm_ruby_make="" __rvm_setup_compile_environment "${rvm_ruby_string}" || return $? __rvm_remove_rvm_from_path __rvm_conditionally_add_bin_path rubinius_install_setup_ruby || return $? __rvm_fetch_ruby || return $? __rvm_cd "${rvm_src_path}/$rvm_ruby_string" chmod +x ./configure __rvm_apply_patches || { result=$? rvm_error "There has been an error while trying to apply patches to rubinius. \nHalting the installation." return $result } rvm_configure_flags=( --prefix="$rvm_ruby_home" "${rvm_configure_flags[@]}" ) __rvm_db "${rvm_ruby_interpreter}_configure_flags" "db_configure_flags" if [[ -n "${ZSH_VERSION:-}" ]] then rvm_configure_flags=( ${=db_configure_flags} "${rvm_configure_flags[@]}" ) else rvm_configure_flags=( ${db_configure_flags} "${rvm_configure_flags[@]}" ) fi # Explicitly disabled (( ${rvm_llvm_flag:=1} )) || rvm_configure_flags+=( --disable-llvm ) if [[ -f "Gemfile" ]] then __rvm_log_command "bundle" "$ruby - #bundle install" "$rvm_wrappers_path/$ruby/bundle" install || return $? fi if [[ -f "$HOME/.gem/credentials" && -w "$HOME/.gem/credentials" ]] then chmod 600 "$HOME/.gem/credentials" fi __rvm_log_command "configure" "$rvm_ruby_string - #configuring" \ env "${rvm_configure_env[@]}" $rvm_wrappers_path/$ruby/ruby ./configure "${rvm_configure_flags[@]}" || return $? if [[ -n "${rvm_configure_args:-}" ]] then rvm_ruby_make="CONFIGURE_ARGS=${rvm_configure_args## } " fi __setup_lang_fallback __rvm_log_command rake "$rvm_ruby_string - #compiling" \ "${rvm_ruby_make:-}$rvm_wrappers_path/$ruby/rake" install --trace || return $? [[ -d "$rvm_ruby_home" && -f "$rvm_ruby_home/bin/rbx" ]] || { result=$? rvm_error "Rubinius reported it was installed successfully, but RVM could not find proper installation, please check why '$rvm_ruby_home/bin/rbx' was not created, maybe here '$rvm_log_path/$rvm_ruby_string/rake.log', also make sure to report an error here 'https://github.com/rubinius/rubinius/issues' about not returning non zero status in case of errors." return $result } unset ruby # Symlink rubinius wrapper if not available [[ -f "$rvm_ruby_home/bin/ruby" ]] || ln -fs "$rvm_ruby_home/bin/rbx" "$rvm_ruby_home/bin/ruby" # remove the rdoc link, the gem is not builtin if [[ -f "$rvm_ruby_home/bin/rdoc" ]] then rm -f "$rvm_ruby_home/bin/rdoc" fi case ${rvm_ruby_string} in rbx-head*|rubinius-head*|rbx-2.*|rubinius-2.*) binaries=() ;; *) # older rbx had issues # Install IRB Wrapper on Rubinius. file_name="$rvm_ruby_home/bin/irb" \command \rm -f "$file_name" printf "%b" '#!/usr/bin/env bash\n' > "$file_name" printf "%b" "exec '$rvm_ruby_home/bin/rbx' 'irb' \"\$@\"\n" >> "$file_name" [[ -x "$file_name" ]] || chmod +x "$file_name" # Install Gem Wrapper on Rubinius. file_name="$rvm_ruby_home/bin/gem" __rvm_cp -f "$rvm_ruby_home/lib/bin/gem.rb" "$file_name" __rvm_inject_ruby_shebang "$file_name" [[ -x "$file_name" ]] || chmod +x "$file_name" unset file_name binaries=(erb ri) ;; esac __rvm_initial_gemsets_create "$rvm_ruby_home/bin/ruby" && __rvm_post_install && __rvm_fetch_ruby_cleanup }