#!/usr/bin/env bash source "$rvm_scripts_path/functions/autolibs" source "$rvm_scripts_path/functions/db" source "$rvm_scripts_path/functions/build_config" source "$rvm_scripts_path/functions/build_config_system" source "$rvm_scripts_path/functions/build_requirements" if [[ "Darwin" == "${_system_type}" ]] then source "$rvm_scripts_path/functions/osx-ssl-certs" source "$rvm_scripts_path/functions/osx-support" fi # show the user selected compiler or return 1 __rvm_selected_compiler() { #TODO: add handling for rvm_configure_env if [[ " ${rvm_configure_flags[*]}" == *" --with-gcc="* ]] then \typeset __compiler for __compiler in "${rvm_configure_flags[@]}" do case "$__compiler" in (--with-gcc=*) echo "${__compiler#--with-gcc=}" return 0 ;; esac done elif [[ -n "${CC:-}" ]] then echo "${CC}" return 0 fi return 1 } __rvm_found_compiler() { __rvm_selected_compiler || __rvm_which gcc 2>/dev/null || __rvm_which clang 2>/dev/null } __rvm_fix_rbconfig() { \typeset __config_file __config_file="$( __rvm_find $1/ -name rbconfig.rb 2>/dev/null )" [[ -n "${__config_file}" ]] && __rvm_remove_static_flag "$@" && __rvm_fix_gcc_path "$@" && __rvm_fix_install_path "$@" } __rvm_remove_static_flag() { if __rvm_grep -- "-Z" "${__config_file}" >/dev/null then rvm_debug "Removing '-Z' from rbconfig." __rvm_sed_i "${__config_file}" -e "s#-Z##" fi } __rvm_fix_gcc_path() { \typeset __cc_value __cc_new __rvm_which $( "$1/bin/ruby" -rrbconfig -e 'puts RbConfig::CONFIG["CC"]||"true"' 2>/dev/null ) >/dev/null 2>/dev/null || { __cc_value="$( "$1/bin/ruby" -rrbconfig -e 'puts RbConfig::CONFIG["CC"]' 2>/dev/null )" && if __rvm_grep "CONFIG\[\"CC\"\]" "${__config_file}" >/dev/null then __cc_new="$( __rvm_found_compiler )" rvm_debug "Fixing ruby compiler from '${__cc_value}' to '${__cc_new}'." __rvm_sed_i "${__config_file}" \ -e "s#CONFIG\[\"CC\"\].*\$#CONFIG[\"CC\"] = ENV[\"CC\"] || \"${__cc_new}\"#" else rvm_warn "Installed ruby contains path to non existing compiler '${__cc_value}', compiling native gems might be impossible." fi } } __rvm_fix_install_path() { \typeset __install_value __install_new __rvm_which $( "$1/bin/ruby" -rrbconfig -e 'puts RbConfig::CONFIG["INSTALL"]||"true"' 2>/dev/null ) >/dev/null 2>/dev/null || { __install_value="$( "$1/bin/ruby" -rrbconfig -e 'puts RbConfig::CONFIG["INSTALL"]' 2>/dev/null )" if __rvm_grep "CONFIG\[\"INSTALL\"\]" "${__config_file}" >/dev/null then __install_new="$( \command \which install )" rvm_debug "Fixing ruby installer from '${__install_value}' to '${__install_new}'." __rvm_sed_i "${__config_file}" \ -e "s#CONFIG\[\"INSTALL\"\].*\$#CONFIG[\"INSTALL\"] = \"${__install_new}\"#" else rvm_warn "Installed ruby contains path to non existing compiler '${__install_value}', compiling native gems might be impossible." fi } } __rvm_run_compiler() { if [[ -n "${1:-}" ]] then \typeset compiler="$1" shift if [[ -n "${ZSH_VERSION:-}" ]] then ${=compiler} "$@" 2>&1 || return $? else ${compiler} "$@" 2>&1 || return $? fi else return 1 fi } __rvm_compiler_is() { __rvm_run_compiler "$1" "$2" | __rvm_grep -i "$3" >/dev/null } __rvm_compiler_version_is() { \typeset compiler __check __check="$1" compiler="${2:-$( __rvm_found_compiler )}" && __rvm_compiler_is "$compiler" "--version" "${__check}" || return $? } __rvm_compiler_is_llvm() { __rvm_compiler_version_is "llvm" "${1:-}" || return $? } __rvm_compiler_is_clang() { __rvm_compiler_version_is "clang" "${1:-}" || return $? } __rvm_compiler_version_or_higher() { \typeset __version compiler compiler="${2:-$( __rvm_found_compiler )}" && __version="$( __rvm_run_compiler "$compiler" "-dumpversion" )" && __rvm_version_compare "${__version:-0}" -ge "$1" || return $? } __rvm_update_configure_env() { \typeset -a local_configure_env \typeset _variable _value _iterator _found rvm_debug "__rvm_update_configure_env($#):$*:" while (( $# )) do _variable="${1%%\=*}" _value="${1#*=}" shift __rvm_array_add_or_update rvm_configure_env "$_variable=" " " "$_value" done } __rvm_update_configure_env_arch() { __rvm_update_configure_env CFLAGS="$1" CCFLAGS="$1" CXXFLAGS="$1" LDFLAGS="$1" } __rvm_update_configure_opt_dir() { case "$1" in (rbx*|rubinius*) __rvm_update_configure_opt_dir_options "$2" ;; (ruby-head*|ruby-2*) __rvm_update_configure_opt_dir_option "$2" ;; (ruby-1.9.3-p*) \typeset __patchlevel __patchlevel="${1##ruby-1.9.3-p}" if (( __patchlevel < 297 )) then rvm_patch_names+=( cflags ) __rvm_update_configure_opt_dir_option_or_flags "$2" else __rvm_update_configure_opt_dir_option "$2" fi ;; (ruby-1.9*) __rvm_update_configure_opt_dir_option_or_flags "$2" ;; (*) __rvm_update_configure_opt_dir_flags "$2" ;; esac } # add multiple --with-opt-dir= __rvm_update_configure_opt_dir_options() { rvm_debug "rvm_configure_flags+=( --with-opt-dir=$1 )" rvm_configure_flags+=( --with-opt-dir="$1" ) } # update single --with-opt-dir= __rvm_update_configure_opt_dir_option() { rvm_debug "rvm_configure_flags+=( --with-opt-dir=$1 )" __rvm_array_add_or_update rvm_configure_flags --with-opt-dir= : "$1" } __rvm_update_configure_opt_dir_option_or_flags() { # Use option if first time - use flags if option available already case " ${rvm_configure_flags[*]} " in (*[[:space:]]--with-opt-dir=*) __rvm_update_configure_opt_dir_flags "$@" ;; (*) __rvm_update_configure_opt_dir_option "$@" ;; esac } __rvm_update_configure_opt_dir_flags() { \typeset __enable_rpath __lib_path if # __rvm_xargs \head -n 1 -- can not have \command - breaks xargs __rvm_which bash | __rvm_xargs \head -n 1 | \command \cat -e | __rvm_grep -b '^^?ELF' >/dev/null then __enable_rpath="true" fi __rvm_update_configure_env CFLAGS="-I$1/include" __rvm_update_configure_env LDFLAGS="-L$1/lib" [[ -z "${__enable_rpath:-}" ]] || __rvm_update_configure_env LDFLAGS="-Wl,-rpath,$1/lib" if [[ -d "$1/lib64" ]] then __rvm_update_configure_env LDFLAGS="-L$1/lib64" [[ -z "${__enable_rpath:-}" ]] || __rvm_update_configure_env LDFLAGS="-Wl,-rpath,$1/lib64" fi } __rvm_check_for_compiler() { if __rvm_selected_compiler > /dev/null && ! builtin command -v $(__rvm_selected_compiler) >/dev/null then rvm_error "You requested building with '$(__rvm_selected_compiler)' but it is not in your path." return 1 fi } # Checks for bison, returns zero iff it is found __rvm_check_for_bison() { true ${rvm_head_flag:=0} if (( rvm_head_flag > 0 )) then if ! builtin command -v bison > /dev/null then rvm_error "\nbison is not available in your path. \nPlease ensure bison is installed before compiling from head.\n" return 1 fi fi } __rvm_mono_env() { DYLD_LIBRARY_PATH="${rvm_usr_path}/lib:$DYLD_LIBRARY_PATH" C_INCLUDE_PATH="${rvm_usr_path}/include:$C_INCLUDE_PATH" ACLOCAL_PATH="${rvm_usr_path}/share/aclocal" ACLOCAL_FLAGS="-I $ACLOCAL_PATH" PKG_CONFIG_PATH="${rvm_usr_path}/lib/pkgconfig:$PKG_CONFIG_PATH" export DYLD_LIBRARY_PATH C_INCLUDE_PATH ACLOCAL_PATH ACLOCAL_FLAGS PKG_CONFIG_PATH __rvm_add_to_path prepend "${rvm_usr_path}/bin" builtin hash -r return 0 } # Returns all mri compatible (partly) ruby for use # with things like rbx etc which require a ruby be installed. __rvm_mri_rubies() ( # find on bsd does not have -not, we need to use \! \typeset versions="${1:-"ruby-1.9|ruby-2"}" __rvm_cd "$rvm_rubies_path" && __rvm_find . -maxdepth 1 -mindepth 1 -type d \! -type l | __rvm_awk -F/ "/$versions/"' {if (system("test -x \""$0"/bin/ruby\"")==0) print $2}' || return $? ) # Returns the first mri compatible (partly) ruby for use # with things like rbx etc which require a ruby be installed. __rvm_mri_ruby() { __rvm_mri_rubies "${1:-"ruby-1.9|ruby-2"}" | __rvm_version_sort | __rvm_awk 'BEGIN{ selected=$0 } /'"$(__rvm_env_string)"'/{ selected=$0 } END {print $0}' } __rvm_ensure_has_mri_ruby() { \typeset versions versions="${1:-"ruby-1.9|ruby-2"}" if [[ -z "$(__rvm_mri_ruby $versions)" ]] then \typeset compat_result compat_result=0 rvm_warn " Warning! Requested ruby installation which requires another ruby available - installing ${versions##*|} first. " if ( __rvm_select "${versions##*|}" # prevents endless loop for rbx __rvm_run_wrapper manage install "${versions##*|}" ) then true else compat_result=$? rvm_error " To proceed rvm requires a ${versions##*|} compatible ruby is installed. We attempted to install it automatically but it failed with status $compat_result. Please install it manually (or a compatible alternative) to proceed. " fi return $compat_result fi return 0 } __rvm_is_enough_ram() { \typeset __required_ram __existing_ram __required_ram=$(( $1 * 1024 * 1024 )) __existing_ram="$(free -b 2>/dev/null | __rvm_awk '{if (NR==3) print $4}')" : ${__existing_ram:="$(sysctl hw.physmem 2>/dev/null | __rvm_awk -F"[:=]" '{print $2}')"} : __existing_ram: ${__existing_ram:=0} rvm_debug "Existing ram $(( __existing_ram /1024 /1024 ))MB." (( __existing_ram >= __required_ram )) || return $? }