123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- #!/usr/bin/env bash
- requirements_find_smf()
- {
- if # find SMF in PATH
- __rvm_which sm >/dev/null 2>&1
- then
- return 0
- else # find SMF out of PATH and link to rvm/bin
- \typeset __binary
- for __binary in ~/.sm/bin/sm /opt/sm/bin/sm
- do
- if
- [[ -f "${__binary}" && -s "${__binary}" && -x "${__binary}" ]]
- then
- PATH="$PATH:${__binary%/*}"
- return 0
- fi
- done
- return 1
- fi
- }
- __smf_try_sudo()
- {
- if [[ -w "$( __rvm_which sm )" ]]
- then "$@"
- else __rvm_try_sudo "$@"
- fi
- }
- requirements_smf_lib_installed()
- {
- sm pkg list | __rvm_grep "^${1}:" >/dev/null || return $?
- }
- requirements_smf_lib_install_command()
- {
- __smf_install_command=( sm "$1" install )
- if
- [[ "${rvm_static_flag:-}" == "1" ]]
- then
- __smf_install_command=(
- /usr/bin/env CFLAGS="-fPIC" LDFLAGS="-fPIC" "${__smf_install_command[@]}" static
- )
- fi
- __smf_install_command=( __smf_try_sudo "${__smf_install_command[@]}" )
- }
- requirements_smf_lib_install()
- {
- \typeset -a __smf_install_command
- requirements_smf_lib_install_command "$@"
- rvm_debug "__smf_install_command: ${__smf_install_command[*]};"
- "${__smf_install_command[@]}" ||
- {
- \typeset ret=$?
- rvm_warn "There were package installation errors with SM Framework, make sure to read the log.
- If you see this on OSX, then you might want to try macports (https://www.macports.org/) or homebrew (http://brew.sh/) and tell RVM to use them by running:
- rvm autolibs macports #OR
- rvm autolibs homebrew
- You might get help by reporting tickets to https://github.com/sm/sm/issues"
- return $ret
- }
- shift
- }
- requirements_smf_gcc_42_check()
- {
- case "$1" in
- (ruby-2*|ruby-head) true ;; # ruby-2.0.0+ is supposed to work with clang
- (*)
- # install gcc-4.2 only if not yet available, prevents problems with gcc-4.2 on OSX 10.6
- if
- ! __rvm_which gcc-4.2 >/dev/null &&
- __rvm_compiler_is_llvm
- then
- rvm_error "SM Framework does not know how to install gcc-4.2, please install osx-gcc-installer first for older rubies."
- fi
- ;;
- esac
- }
- requirements_smf_install_extension_sets()
- {
- \typeset __set
- for __set
- do __smf_try_sudo sm set install "${__set}" || return $?
- done
- }
- requirements_smf_update_system_ensure_etc_openssl()
- {
- [[ -d "/etc/openssl" ]] || __rvm_try_sudo mkdir -p "/etc/openssl" || return $?
- [[ -w "/etc/openssl" ]] ||
- {
- __rvm_try_sudo chmod -R 755 "/etc/openssl" &&
- __rvm_try_sudo chown -R $USER "/etc/openssl"
- } || return $?
- }
- requirements_smf_update_system()
- {
- requirements_smf_update_system_ensure_etc_openssl || return $?
- __rvm_log_command sm_get_head "Updating SMF" __smf_try_sudo sm get head || return $?
- if
- [[ "${#required_extension_sets[@]}" -gt 0 ]]
- then
- __rvm_log_command sm_install_extension_sets "Installing/updating extension sets: ${required_extension_sets[*]}" \
- requirements_smf_install_extension_sets "${required_extension_sets[@]}" ||
- return $?
- fi
- }
- requirements_smf_define_git()
- {
- __rvm_which git >/dev/null || {
- required_extension_sets+=( vcs )
- requirements_check autoconf git || return $?
- }
- }
- requirements_smf_define()
- {
- case "$1" in
- (rvm)
- true
- ;;
- (jruby*)
- requirements_check make
- if
- is_head_or_disable_binary "$1"
- then
- requirements_smf_define_git || return $?
- case $( jruby_installation_method "$1" ) in
- ant) __rvm_which ant >/dev/null 2>&1 || return $? ;;
- mvn) requirements_check_custom_after mvn=maven ;;
- esac
- fi
- __rvm_which java >/dev/null 2>&1 || return $?
- ;;
- (ir*)
- __rvm_which mono >/dev/null 2>&1 || return $?
- ;;
- (opal)
- required_extension_sets+=( javascript )
- requirements_check node
- ;;
- (*-head)
- requirements_smf_define default
- requirements_smf_define_git || return $?
- ;;
- (*)
- required_extension_sets+=( databases gnu libraries tools )
- if
- [[ "${_system_name}" == "OSX" ]]
- then
- # TODO: ruby up to 1.9.3 requires openssl 0.9.8 on OSX
- if __rvm_version_compare "${_system_version}" -ge 10.9
- then requirements_check pkg-config libyaml zlib ncurses readline openssl sqlite3 gdbm
- else requirements_check pkg-config libtool libyaml zlib ncurses readline openssl sqlite3 gdbm
- fi
- else
- requirements_check pkg-config libtool libyaml zlib ncurses ncursesw readline openssl sqlite3 gdbm
- fi
- ;;
- esac
- }
- requirements_smf_install_sm()
- {
- rvm_error "SMF Framework support is only intended for RailsInstaller / Tokaido.app, please use Macports / Homebrew integration instead."
- return 100
- }
- requirements_smf_ensure_smf_available()
- {
- __rvm_which sm >/dev/null ||
- {
- rvm_requiremnts_fail_or_run_action 2 \
- "Requested installation with SM Framework, but SM Framework is not available." \
- requirements_smf_install_sm ||
- return $?
- }
- }
- requirements_smf_find_sm()
- {
- export __sm_path
- : __sm_path:${__sm_path:=$( __rvm_which sm )}
- __rvm_readlink_deep __sm_path
- [[ -n "${__sm_path}" ]] || return $?
- }
- requirements_smf_before()
- {
- required_extension_sets=()
- requirements_smf_ensure_smf_available || return $?
- requirements_smf_find_sm || return $?
- }
- requirements_smf_after()
- {
- requirements_smf_gcc_42_check "$1" || return $?
- if
- [[ "${_system_name}" == "OSX" ]]
- then
- case "$1" in
- (ruby-1*|ruby-2.0*)
- __rvm_update_configure_env LDFLAGS="-Z -L${__sm_path%/bin/sm}/pkg/active/lib -L/usr/lib"
- ;;
- (*) # 2.1.0+
- __rvm_update_configure_env LDFLAGS="-L${__sm_path%/bin/sm}/pkg/active/lib"
- ;;
- esac
- __rvm_update_configure_env CFLAGS="-I${__sm_path%/bin/sm}/pkg/active/include"
- fi
- case "$PATH" in
- (${__sm_path%/bin/sm}/pkg/active/bin:*)
- true
- ;;
- (*)
- __rvm_add_to_path prepend "${__sm_path%/bin/sm}/pkg/active/bin"
- ;;
- esac
- export PKG_CONFIG_PATH="${__sm_path%/bin/sm}/pkg/active/lib/pkgconfig"
- case "$1" in
- (jruby*) true ;;
- (*) requirements_smf_after_update_certs_openssl ;;
- esac
- }
- requirements_smf_after_update_certs_openssl()
- {
- requirements_osx_update_openssl_cert "${__sm_path%/bin/sm}/pkg/active/bin/openssl" || return $?
- }
|