123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- #!/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 $?
- }
|