# # Copyright (c) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 LucĂ­a Andrea Illanes Albornoz # set +o errexit -o noglob -o nounset is assumed. # rtl_check_prereqs() { local _rcp_rstatus="${1#\$}" \ _rcp_cmd="" _rcp_cmds_missing="" _rcp_rc=0; shift; for _rcp_cmd in "${@}"; do if ! which "${_rcp_cmd}" >/dev/null 2>&1; then _rcp_cmds_missing="${_rcp_cmds_missing:+${_rcp_cmds_missing} }${_rcp_cmd}"; fi; done; if [ "${_rcp_cmds_missing:+1}" = 1 ]; then _rcp_rc=1; rtl_setrstatus "${_rcp_rstatus}" 'Error: missing prerequisite package(s): '"${_rcp_cmds_missing}"; fi; return "${_rcp_rc}"; }; rtl_clean_env() { local _rce_env_vars_except="${1}" \ _rce_env_var="" _rce_env_vars="" _rce_env_vars_unset=""; _rce_env_vars="$(export | sed -ne '/^export/{s/^export //;s/=.*$//p}')"; for _rce_env_var in ${_rce_env_vars}; do if [ "${_rce_env_var#DEFAULT_}" != "${_rce_env_var}" ]\ || [ "${_rce_env_var#PKG_}" != "${_rce_env_var}" ]; then rtl_lconcat \$_rce_env_vars_except "${_rce_env_var}"; fi; done; rtl_lfilter2 \$_rce_env_vars \$_rce_env_vars_unset "${_rce_env_vars_except}"; rtl_unset_vars ${_rce_env_vars_unset}; return 0; }; rtl_get_cpu_count() { local _rgcc_rstatus="${1#\$}" _rgcc_rcount="${2#\$}" \ _rgcc_line="" _rgcc_ncpus=0 _rgcc_rc=0 _rgcc_sname=""; _rgcc_sname="$(uname -s 2>/dev/null)" || return 1; case "${_rgcc_sname}" in Linux) if [ ! -e "/proc/cpuinfo" ]; then _rgcc_rc=1; rtl_setrstatus "${_rgcc_rstatus}" 'Error: /proc/cpuinfo non-existent.'; else while read -r _rgcc_line; do if rtl_match "${_rgcc_line}" "processor*:"; then : $((_rgcc_ncpus+=1)); fi; done < /proc/cpuinfo; _rgcc_rc=0; rtl_setrstatus "${_rgcc_rstatus}" ""; fi; ;; *) _rgcc_rc=1; rtl_setrstatus "${_rgcc_rstatus}" 'Error: unknown platform \`'"${_rgcc_sname}"''\''.'; ;; esac; eval ${_rgcc_rcount}='${_rgcc_ncpus}'; return "${_rgcc_rc}"; }; rtl_get_var_unsafe() { local _rgvu_rvname_out="${1#\$}" \ _rgvu_vname=""; shift; if [ "x${1}" = "x-u" ]; then shift; _rgvu_vname="${1}"; rtl_toupper \$_rgvu_vname; else _rgvu_vname="${1}"; fi; eval ${_rgvu_rvname_out}="\${${_rgvu_vname}:-}"; return 0; }; rtl_get_vars_fast() { local _rgvf_pattern="${1}"; set | awk -F= '/'"${_rgvf_pattern}"'/{print $1}' | sort; return 0; }; rtl_kill_tree() { local _rkt_rpids="${1#\$}" _rkt_pid="${2}" _rkt_signal="${3:-TERM}" \ _rkt_pid_child="" _rkt_pids=""; if _rkt_pids="$(pgrep -P "${_rkt_pid}")"\ && [ "${_rkt_pids:+1}" = 1 ]; then for _rkt_pid_child in ${_rkt_pids}; do rtl_kill_tree "${_rkt_rpids}" "${_rkt_pid_child}" "${_rkt_signal}"; done; fi; if [ "${_rkt_pid:-0}" -ne "${$}" ]\ && kill "-${_rkt_signal}" "${_rkt_pid}" 2>/dev/null; then rtl_lconcat "${_rkt_rpids}" "${_rkt_pid}"; fi; return 0; }; rtl_prompt() { local rp_fmt="${1}" rp_choice=""; shift; printf "${rp_fmt}? (y|N) " "${@}"; read -r rp_choice; case "${rp_choice}" in [yY]) rp_choice=1; ;; *) rp_choice=0; ;; esac; return "${rp_choice}"; }; rtl_rc() { local _rr_nflag="${1}" _rr_cmd="${2}"; shift 2; case "${_rr_nflag}" in 1) if [ "${#}" -gt 0 ]; then rtl_log_msg "verbose" "${MSG_rtl_platform_rc1}" "${_rr_cmd}" "${*}"; else rtl_log_msg "verbose" "${MSG_rtl_platform_rc2}" "${_rr_cmd}"; fi; ;; *) "${_rr_cmd}" "${@}"; ;; esac; return 0; }; rtl_run_cmd_unsplit() { local _rrcu_cmd="${1}" \ _rrcu_cmdline="" _rrcu_rc="" IFS; shift; while [ ${#} -gt 0 ]; do [ "${1:+1}" = 1 ] &&\ _rrcu_cmdline="${_rrcu_cmdline:+${_rrcu_cmdline}:}${1}"; shift; done; IFS=:; ${_rrcu_cmd} ${_rrcu_cmdline}; _rrcu_rc=$?; return ${_rrcu_rc}; }; rtl_set_var_from_cmdline() { local _rsvfc_rstatus="${1#\$}" _rsvfc_arg="${2}" \ _rsvfc_rc=0 _rsvfc_vname="" _rsvfc_vval=""; _rsvfc_vname="${_rsvfc_arg%%=*}"; _rsvfc_vval="${_rsvfc_arg#*=}"; if [ "${_rsvfc_vval:+1}" != 1 ]; then _rsvfc_rc=1; rtl_setrstatus "${_rsvfc_rstatus}" 'empty value specified for \${'"${_rsvfc_vname}"'}.'; else rtl_set_var_unsafe "${_rsvfc_vname}" "${_rsvfc_vval}"; fi; return "${_rsvfc_rc}"; }; rtl_set_vars() { local _rsv_vars_set_vname="${1}" _rsv_vname_dst="${2}" _rsv_vname_src_tmpls="${3}" \ _rsv_vars_set_old="" _rsv_vars_set_tmp="" _rsv_vname_src="" _rsv_vnames_src=""; rtl_toupper2 \$_rsv_vname_src_tmpls \$_rsv_vnames_src; for _rsv_vname_src in ${_rsv_vnames_src}; do _rsv_vname_src="${_rsv_vname_src}_${_rsv_vname_dst}"; eval _rsv_vval_src="\${${_rsv_vname_src}:-}"; if [ "${_rsv_vval_src:+1}" = 1 ]; then eval PKG_${_rsv_vname_dst}='${_rsv_vval_src}'; _rsv_vars_set_tmp="${_rsv_vars_set_tmp:+${_rsv_vars_set_tmp} }PKG_${_rsv_vname_dst}"; fi; done; eval _rsv_vars_set_old="\${${_rsv_vars_set_vname}}"; rtl_set_var_unsafe "${_rsv_vars_set_vname}" "${_rsv_vars_set_old:+${_rsv_vars_set_old} }${_rsv_vars_set_tmp}"; return 0; }; # vim:filetype=sh textwidth=0