
This change was introduced to prevent entries like depends=('foo>'). However, it had the unintended side effect of causing a number of working PKGBUILDs to fail to build. This happened when a PKGBUILD defined one variable through calling a "complex" statement within the PKGBUILD's package function (e.g. a function or evaluating in a subshell), then used it to define the package metadata variable. extract_function_variable() cannot execute the package function in order to retrieve this information, so it performs a simple grep + eval instead and in the process misses the contextual awareness of running within the package function. While not catching these "issues" can result in incorrect SRCINFO, the resulting packages are fine. Stop aborting on the common case where the pkgver of a dependency is dynamically set during the package function until the large number of broken PKGBUILDs are fixed, and the restrictions of the PKGBUILD format are documented. "Fixes" FS#58776 Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
59 lines
1.9 KiB
Bash
59 lines
1.9 KiB
Bash
#!/bin/bash
|
|
#
|
|
# depends.sh - Check the 'depends' array conforms to requirements.
|
|
#
|
|
# 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_DEPENDS_SH" ]] && return
|
|
LIBMAKEPKG_LINT_PKGBUILD_DEPENDS_SH=1
|
|
|
|
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
|
|
|
|
source "$LIBRARY/lint_pkgbuild/pkgname.sh"
|
|
source "$LIBRARY/lint_pkgbuild/pkgver.sh"
|
|
source "$LIBRARY/util/message.sh"
|
|
source "$LIBRARY/util/pkgbuild.sh"
|
|
|
|
|
|
lint_pkgbuild_functions+=('lint_depends')
|
|
|
|
|
|
lint_depends() {
|
|
local depends_list depend name ver ret=0
|
|
|
|
get_pkgbuild_all_split_attributes depends depends_list
|
|
|
|
# this function requires extglob - save current status to restore later
|
|
local shellopts=$(shopt -p extglob)
|
|
shopt -s extglob
|
|
|
|
for depend in "${depends_list[@]}"; do
|
|
name=${depend%%@(<|>|=|>=|<=)*}
|
|
# remove optional epoch in version specifier
|
|
ver=${depend##$name@(<|>|=|>=|<=)?(+([0-9]):)}
|
|
lint_one_pkgname depends "$name" || ret=1
|
|
# Don't validate empty version because of https://bugs.archlinux.org/task/58776
|
|
if [[ $ver != $depend && -n $ver ]]; then
|
|
# remove optional pkgrel in version specifier
|
|
check_pkgver "${ver%-+([0-9])?(.+([0-9]))}" depends || ret=1
|
|
fi
|
|
done
|
|
|
|
eval "$shellopts"
|
|
|
|
return $ret
|
|
}
|