ProxSpace/msys2/usr/share/pactoys/library/default.sh

97 lines
2.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Pactoys Default Library
# Copyright (C) 2016 Renato Silva
# Licensed under BSD
declare -Ag pactoys
test -n "${pactoys[module.default]}" && return
pactoys[module.default]=1
_pactoys_imported() {
local type="${1}"
local name="${2}"
test -n "${pactoys[import.${type}.${name}]}"
}
_pactoys_register_import() {
local type="${1}"
local name="${2}"
pactoys[import.${type}.${name}]=1
}
_pactoys_import_object() {
local name="${1}"
local internal="pactoys_${name}"
_pactoys_imported object "${name}" && return 0
pactoys_is_variable "${name}" && ! pactoys_interactive && return 1
pactoys_is_variable "${internal}" || return 1
declare -ng "${name}=${internal}" || return 1
_pactoys_register_import object "${name}"
return 0
}
_pactoys_import_function() {
local name="${1}"
local internal="pactoys_${name}"
_pactoys_imported function "${name}" && return 0
pactoys_is_function "${name}" && ! pactoys_interactive && return 1
pactoys_is_function "${internal}" || return 1
eval "${name}() { ${internal} \"\${@}\"; }" || return 1
_pactoys_register_import function "${name}"
return 0
}
_pactoys_import() {
local names=("${@}")
local name result=0
for name in "${names[@]}"; do
local internal="pactoys_${name}"
local object=1
local function=1
if pactoys_is_variable "${internal}"; then
_pactoys_import_object "${name}"
object=${?}
fi
if pactoys_is_function "${internal}"; then
_pactoys_import_function "${name}"
function=${?}
fi
test $((object + function)) -lt 2 && continue
printf 'pactoys: failed importing %s\n' "${name}" >&2
result=1
done
return ${result}
}
import() {
local arguments=("${@}")
_pactoys_import "${@}" || pactoys_interactive || exit
}
pactoys_is_variable() {
local name="${1}"
pactoys_silent declare -p "${name}"
}
pactoys_is_function() {
local name="${1}"
pactoys_silent declare -F "${name}"
}
pactoys_interactive() {
[[ "${-}" = *i* ]]
}
pactoys_silent() {
local command=("${@}")
"${command[@]}" >/dev/null 2>&1
}
pactoys_noiseless() {
local command=("${@}")
"${command[@]}" 2>/dev/null
}
for pactoys_option in ${pactoys_options//,/ }; do
pactoys[${pactoys_option}]=1
done
unset pactoys_option