summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/libmakepkg/lint_pkgbuild/variable.sh.in6
-rw-r--r--scripts/libmakepkg/util/util.sh17
2 files changed, 20 insertions, 3 deletions
diff --git a/scripts/libmakepkg/lint_pkgbuild/variable.sh.in b/scripts/libmakepkg/lint_pkgbuild/variable.sh.in
index 183e7401..30c99090 100644
--- a/scripts/libmakepkg/lint_pkgbuild/variable.sh.in
+++ b/scripts/libmakepkg/lint_pkgbuild/variable.sh.in
@@ -43,7 +43,7 @@ lint_variable() {
for i in ${array[@]} ${arch_array[@]}; do
eval "keys=(\"\${!$i[@]}\")"
if (( ${#keys[*]} > 0 )); then
- if [[ "$(declare -p $i)" != "declare -a "* ]]; then
+ if ! is_array $i; then
error "$(gettext "%s should be an array")" "$i"
ret=1
fi
@@ -57,7 +57,7 @@ lint_variable() {
v="${i}_${a}"
eval "keys=(\"\${!${v}[@]}\")"
if (( ${#keys[*]} > 0 )); then
- if [[ "$(declare -p $v)" != "declare -a "* ]]; then
+ if ! is_array $v; then
error "$(gettext "%s_%s should be an array")" "$i" "$a"
ret=1
fi
@@ -68,7 +68,7 @@ lint_variable() {
for i in ${string[@]}; do
eval "keys=(\"\${!$i[@]}\")"
if (( ${#keys[*]} > 0 )); then
- if [[ "$(declare -p $i)" == "declare -a "* ]]; then
+ if is_array $i; then
error "$(gettext "%s should not be an array")" "$i"
ret=1
fi
diff --git a/scripts/libmakepkg/util/util.sh b/scripts/libmakepkg/util/util.sh
index 3c996dac..675e75de 100644
--- a/scripts/libmakepkg/util/util.sh
+++ b/scripts/libmakepkg/util/util.sh
@@ -37,6 +37,23 @@ in_array() {
return 1 # Not Found
}
+# tests if a variable is an array
+is_array() {
+ local v=$1
+ local ret=1
+
+ # this function requires extglob - save current options to restore later
+ local shellopts=$(shopt -p)
+ shopt -s extglob
+
+ if [[ $(declare -p "$i") == declare\ -*([[:alnum:]])a*([[:alnum:]])\ * ]]; then
+ ret=0
+ fi
+
+ eval "$shellopts"
+ return $ret
+}
+
# Canonicalize a directory path if it exists
canonicalize_path() {
local path="$1";