#!/usr/bin/env bash source "$rvm_scripts_path/functions/build_requirements_helpers" source "$rvm_scripts_path/functions/build_undesired_helpers" __rvm_requirements_run() { \typeset -a packages_installed packages_missing packages_to_install packages_flags \typeset -a packages_undesired packages_to_remove \typeset -a packages_custom packages_custom_after \typeset __type __lib_type __iterator __type=$1 __lib_type=$1 shift for __iterator in load reset before define summary remove before_update update custom install custom_after after do __rvm_requirements_run_${__iterator} "$@" || return $? done } __rvm_requirements_run_load() { if is_a_function requirements_${__type}_before || is_a_function requirements_${__type}_define then rvm_debug "requirements code for ${__type} already loaded" else [[ -s "$rvm_scripts_path/functions/requirements/${__type}" ]] || { rvm_error "Requirements support for ${__type} is not implemented yet, report a bug here => https://github.com/rvm/rvm/issues" return 1 } source "$rvm_scripts_path/functions/requirements/${__type}" if is_a_function requirements_${__type}_before || is_a_function requirements_${__type}_define then rvm_debug "requirements code for ${__type} loaded" else rvm_error "Failed loading requirements for ${__type}!" return 1 fi fi } __rvm_requirements_run_reset() { packages_installed=() packages_missing=() packages_to_install=() packages_flags=() packages_undesired=() packages_to_remove=() packages_custom=() packages_custom_after=() } __rvm_requirements_run_before() { if is_a_function requirements_${__type}_before then requirements_${__type}_before "$@" || return $? fi if [[ "${__lib_type}" != "${__type}" ]] then rvm_debug "requirements lib type set to ${__lib_type}" fi if [[ "${__lib_type}" != "${__type}" ]] && is_a_function requirements_${__lib_type}_before then requirements_${__lib_type}_before "$@" || return $? fi true # for osx } __rvm_requirements_run_define() { \typeset -a list \typeset element __handler if is_a_function requirements_${__lib_type}_define then __handler=requirements_${__lib_type}_define else __handler=requirements_${__type}_define fi list=( rvm ) while (( $# )) && [[ -z "$1" ]] do shift done if (( $# )) then list+=( "$@" ) else list+=( ruby ) fi for element in "${list[@]}" do ${__handler} "${element}" || return $? done true } __rvm_requirements_run_summary_custom() { if (( ${rvm_autolibs_flag_number} > 2 )) then rvm_debug "Install $1 packages: ${_list// /, }." fi rvm_requiremnts_fail_or_run_action 3 "Missing $1 packages: ${_list}" true || return $? true } __rvm_requirements_run_summary() { \typeset __summary_status=0 (( ${#packages_custom[@]} == 0 )) || { _list="${packages_custom[*]}" __rvm_requirements_run_summary_custom "custom" || __summary_status=$? } (( ${#packages_installed[@]} == 0 )) || { if (( ${rvm_list_installed_packages_flag:-0} == 1 )) then requirements_print_list ${packages_installed[*]} fi _list="${packages_installed[*]}" rvm_debug "Found required packages: ${_list// /, }." } (( ${#packages_missing[@]} == 0 )) || { if (( ${rvm_list_missing_packages_flag:-0} == 1 )) then requirements_print_list ${packages_missing[*]} __summary_status=1 else _list="${packages_missing[*]}" rvm_requiremnts_fail_or_run_action 2 \ "Missing required packages: ${_list}" true || __summary_status=$? fi } (( ${#packages_undesired[@]} == 0 )) || { if (( ${rvm_list_undesired_packages_flag:-0} == 1 )) then requirements_print_list ${packages_undesired[*]} __summary_status=1 else _list="${packages_undesired[*]}" rvm_requiremnts_fail_or_run_action 2 \ "Found undesired packages: ${_list}" true || __summary_status=$? fi } (( ${#packages_custom_after[@]} == 0 )) || { _list="${packages_custom_after[*]}" __rvm_requirements_run_summary_custom "custom after" || __summary_status=$? } return ${__summary_status} } __rvm_requirements_run_before_update() { if is_a_function requirements_${__lib_type}_before_update then requirements_${__lib_type}_before_update "$@" || return $? fi true # for osx } __rvm_requirements_run_update() { if (( ${#packages_to_install[@]} > 0 )) || (( ${#packages_custom[@]}+${#packages_custom_after[@]} > 0 && ${rvm_autolibs_flag_number} > 2 )) then rvm_log "Installing requirements for ${rvm_autolibs_flag_runner}." if is_a_function requirements_${__lib_type}_update_system then rvm_requiremnts_fail_or_run_action 3 \ "Skipping system update, make sure your system is up to date." \ __rvm_log_command update_system "Updating system" \ requirements_${__lib_type}_update_system "$@" || return $? elif is_a_function requirements_${__type}_update_system then rvm_requiremnts_fail_or_run_action 3 \ "Skipping system update, make sure your system is up to date." \ __rvm_log_command update_system "Updating system" \ requirements_${__type}_update_system "$@" || return $? fi fi } __rvm_requirements_run_custom_() { \typeset __package __custom \typeset -a __missing_custom __missing_custom=() __custom="$1" shift while (( $# )) do __package="$1" if is_a_function requirements_${__lib_type}_install_${__package} then rvm_requiremnts_fail_or_run_action 2 \ "Skipping ${__package} installation, make sure ${__package} is installed." \ __rvm_log_command install_${__custom}_${__package} \ "Installing required ${__custom//_/ } package: ${__package}" \ "requirements_${__lib_type}_install_${__package}" || return $? elif is_a_function requirements_install_${__package} then rvm_requiremnts_fail_or_run_action 2 \ "Skipping ${__package} installation, make sure ${__package} is installed." \ __rvm_log_command install_${__custom}_${__package} \ "Installing required ${__custom//_/ } package: ${__package}" \ "requirements_install_${__package}" || return $? else __rvm_add_once __missing_custom "${__package}" fi shift done if (( ${#__missing_custom[@]} )) then if is_a_function requirements_${__lib_type}_install_${__custom} then rvm_requiremnts_fail_or_run_action 2 \ "Skipping ${__missing_custom[*]} installation, make sure listed software is installed." \ __rvm_log_command install_${__custom} \ "Installing required ${__custom//_/ } packages: ${__missing_custom[*]}" \ "requirements_${__lib_type}_install_${__custom}" "${__missing_custom[@]}" || return $? else rvm_requiremnts_fail_always 2 "\ Can not find function 'requirements_${__lib_type}_install_${__custom}' to install missing ${__custom//_/ } packages: ${__missing_custom[*]} report a bug here: https://github.com/rvm/rvm/issues " || return $? fi fi } __rvm_requirements_run_custom() { (( ${#packages_custom[@]} )) || return 0 __rvm_requirements_run_custom_ "custom" "${packages_custom[@]}" || return $? } __rvm_requirements_run_install() { (( ${#packages_to_install[@]} )) || return 0 if is_a_function requirements_${__lib_type}_lib_install then \typeset __package for __package in "${packages_to_install[@]}" do __rvm_log_command package_install_${__package} "Installing required package: ${__package}" \ "requirements_${__lib_type}_lib_install" "${__package}" || { \typeset __status=$? _list="${packages_to_install[*]}" rvm_warn "Failed installation package: ${__package} of: ${_list// /, }." return ${__status} } done else _list="${packages_to_install[*]}" __rvm_log_command package_install_${_list// /_} "Installing required packages: ${_list// /, }" \ "requirements_${__lib_type}_libs_install" "${packages_to_install[@]}" || return $? fi } __rvm_requirements_run_custom_after() { (( ${#packages_custom_after[@]} )) || return 0 __rvm_requirements_run_custom_ "custom_after" "${packages_custom_after[@]}" || return $? } __rvm_requirements_run_after() { if is_a_function requirements_${__lib_type}_after then requirements_${__lib_type}_after "$@" || return $? elif is_a_function requirements_${__type}_after then requirements_${__type}_after "$@" || return $? fi true # for osx }