We rely on values in the arch array to be valid as part of variable
names, so extend the arch lint check to catch this.
This also cleans up lint_arch to restrict the use of "lint" only to the
package-specific architecture checks. It previously had an odd
declaration with a conditional expansion that would never be true.
---
scripts/makepkg.sh.in | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index cec190b..0ea6d5f 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -2360,13 +2360,21 @@ lint_epoch() {
}
lint_arch() {
- local name list=("${@:-"${arch[@]}"}")
+ local a name list
- if [[ $list == 'any' ]]; then
+ if [[ $arch == 'any' ]]; then
return 0
fi
- if ! in_array "$CARCH" "${list[@]}" && (( ! IGNOREARCH )); then
+ for a in "${arch[@]}"; do
+ if [[ $a = *[![:alnum:]_]* ]]; then
+ error "$(gettext "%s contains invalid characters:
'%s'")" \
+ 'arch' "${a//[[:alnum:]_]}"
+ ret=1
+ fi
+ done
+
+ if (( ! IGNOREARCH )) && ! in_array "$CARCH" "${arch[@]}"; then
error "$(gettext "%s is not available for the '%s'
architecture.")" "$pkgbase" "$CARCH"
plain "$(gettext "Note that many packages may need a line added
to their %s")" "$BUILDSCRIPT"
plain "$(gettext "such as %s.")" "arch=('$CARCH')"
--
2.0.4