pacman/scripts/libmakepkg/lint_pkgbuild/variable.sh.in
Eli Schwartz 30e3e21e87 libmakepkg/lint_pkgbuild: check for invalid variables even if they're empty
Checking the length of the variable to be non-zero before considering it
an error is inconsistent; license=() and depends='' and `declare arch`
should be considered just as wrong.

In fact the current check detects depends='' as non-zero and returns an
error, but happily considers the others to be perfectly okay.

A more reliable check is to simply see if the name has been declared
(whether it is set or not), and then enforce that it's been declared to
the right type.

As an added benefit, avoiding the creation of proxy-evaled variables to
count the number of indexes results in simpler code.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-01-10 15:21:13 +10:00

104 lines
2.8 KiB
Bash

#!/bin/bash
#
# variable.sh - Check that variables are or are not arrays as appropriate
#
# Copyright (c) 2014-2018 Pacman Development Team <pacman-dev@archlinux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
[[ -n "$LIBMAKEPKG_LINT_PKGBUILD_VARIABLE_SH" ]] && return
LIBMAKEPKG_LINT_PKGBUILD_VARIABLE_SH=1
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
source "$LIBRARY/util/message.sh"
source "$LIBRARY/util/pkgbuild.sh"
lint_pkgbuild_functions+=('lint_variable')
lint_variable() {
# TODO: refactor - similar arrays are used elsewhere
local array=(arch backup checkdepends groups license noextract options
validpgpkeys)
local arch_array=(conflicts depends makedepends md5sums optdepends provides
replaces sha1sums sha224sums sha256sums sha384sums sha512sums
source)
local string=(changelog epoch install pkgbase pkgdesc pkgrel pkgver url)
local i a pkg out bad ret=0
# global variables
for i in ${array[@]} ${arch_array[@]}; do
if declare -p $i > /dev/null 2>&1; then
if ! is_array $i; then
error "$(gettext "%s should be an array")" "$i"
ret=1
fi
fi
done
for a in ${arch[@]}; do
[[ $a == "any" ]] && continue
for i in ${arch_array[@]}; do
if declare -p "${i}_${a}" > /dev/null 2>&1; then
if ! is_array ${i}_${a}; then
error "$(gettext "%s should be an array")" "${i}_${a}"
ret=1
fi
fi
done
done
for i in ${string[@]}; do
if declare -p "$i" > /dev/null 2>&1; then
if is_array $i; then
error "$(gettext "%s should not be an array")" "$i"
ret=1
fi
fi
done
# package function variables
for pkg in ${pkgname[@]}; do
for i in ${array[@]} ${arch_array[@]}; do
if extract_function_variable "package_$pkg" $i 0 out; then
error "$(gettext "%s should be an array")" "$i"
ret=1
fi
done
for a in ${arch[@]}; do
[[ $a == "any" ]] && continue
for i in ${arch_array[@]}; do
if extract_function_variable "package_$pkg" "${i}_${a}" 0 out; then
error "$(gettext "%s_%s should be an array")" "$i" "$a"
ret=1
fi
done
done
for i in ${string[@]}; do
if extract_function_variable "package_$pkg" $i 1 out; then
error "$(gettext "%s should not be an array")" "$i"
ret=1
fi
done
done
return $ret
}