libmakepkg: lint disallowed variables in package()

makepkg will now error if disallowed variables are set inside of
the package function.

Disallowed variables are variables that do exist, like 'makedepends'
and 'pkgver' but can not be set inside of a package function.

Signed-off-by: morganamilo <morganamilo@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
morganamilo 2019-01-31 02:04:56 +00:00 committed by Allan McRae
parent 75aae126c4
commit 14755df06f
4 changed files with 73 additions and 0 deletions

View file

@ -92,6 +92,7 @@ LIBMAKEPKG_IN = \
libmakepkg/lint_pkgbuild/optdepends.sh \ libmakepkg/lint_pkgbuild/optdepends.sh \
libmakepkg/lint_pkgbuild/options.sh \ libmakepkg/lint_pkgbuild/options.sh \
libmakepkg/lint_pkgbuild/package_function.sh \ libmakepkg/lint_pkgbuild/package_function.sh \
libmakepkg/lint_pkgbuild/package_function_variable.sh \
libmakepkg/lint_pkgbuild/pkgbase.sh \ libmakepkg/lint_pkgbuild/pkgbase.sh \
libmakepkg/lint_pkgbuild/pkglist.sh \ libmakepkg/lint_pkgbuild/pkglist.sh \
libmakepkg/lint_pkgbuild/pkgname.sh \ libmakepkg/lint_pkgbuild/pkgname.sh \

View file

@ -14,6 +14,7 @@ sources = [
'optdepends.sh.in', 'optdepends.sh.in',
'options.sh.in', 'options.sh.in',
'package_function.sh.in', 'package_function.sh.in',
'package_function_variable.sh.in',
'pkgbase.sh.in', 'pkgbase.sh.in',
'pkglist.sh.in', 'pkglist.sh.in',
'pkgname.sh.in', 'pkgname.sh.in',

View file

@ -0,0 +1,62 @@
#!/bin/bash
#
# package_function_variable.sh - Check variables inside the package function.
#
# 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_PACKAGE_FUNCTION_VARIABLE_SH" ]] && return
LIBMAKEPKG_LINT_PKGBUILD_PACKAGE_FUNCTION_VARIABLE_SH=1
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
source "$LIBRARY/util/message.sh"
source "$LIBRARY/util/pkgbuild.sh"
source "$LIBRARY/util/schema.sh"
source "$LIBRARY/util/util.sh"
lint_pkgbuild_functions+=('lint_package_function_variable')
lint_package_function_variable() {
local i a pkg ret=0
# package function variables
for pkg in ${pkgname[@]}; do
for a in ${arch[@]}; do
[[ $a == "any" ]] && continue
for i in ${pkgbuild_schema_arrays[@]} ${pkgbuild_schema_strings[@]}; do
in_array "$i" ${pkgbuild_schema_package_overrides[@]} && continue
if exists_function_variable "package_$pkg" "${i}_${a}"; then
error "$(gettext "%s can not be set inside a package function")" "${i}_${a}"
ret=1
fi
done
done
for i in ${pkgbuild_schema_arrays[@]} ${pkgbuild_schema_strings[@]}; do
in_array "$i" ${pkgbuild_schema_package_overrides[@]} && continue
if exists_function_variable "package_$pkg" "$i"; then
error "$(gettext "%s can not be set inside a package function")" "$i"
ret=1
fi
done
done
return $ret
}

View file

@ -100,6 +100,15 @@ extract_function_variable() {
return $r return $r
} }
exists_function_variable() {
# $1: function name
# $2: variable name
local funcname=$1 attr=$2 out
extract_function_variable "$funcname" "$attr" 0 out ||
extract_function_variable "$funcname" "$attr" 1 out
}
get_pkgbuild_attribute() { get_pkgbuild_attribute() {
# $1: package name # $1: package name
# $2: attribute name # $2: attribute name