diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2018-04-03 23:48:14 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2018-04-29 13:49:05 +0200 |
commit | 91b72cc386ca03241791748da5da2b150c724ace (patch) | |
tree | acd1519d07a1a3eeb6913ba7bd2606edb00e263f /scripts/libmakepkg/lint_pkgbuild/checkdepends.sh.in | |
parent | bcaf1b84ff0f0709d35cd0adb1f13965d1101aeb (diff) | |
download | pacman-91b72cc386ca03241791748da5da2b150c724ace.tar.gz pacman-91b72cc386ca03241791748da5da2b150c724ace.tar.xz |
libmakepkg/lint_pkgbuild: lint depends/etc. as if they are pkgname
depends, provides, conflicts, replaces, and other variables that are
meant to contain package names, are now checked to ensure
1) the name component contains only characters that would equate to
a valid pkgname.
2) the version component contains only characters that would equate
to a valid pkgver.
3) comparison operator is a valid comparison operator (e.g. provides
only allows exact = while optdepends doesn't allow anything)
This also refactors pkgname into a shared utility function, wires up
pkgbase optdepends and provides to use it, and gives pkgver a touchup
to allow referencing where it was called from.
Fixes FS#57833 and a bit of extra.
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'scripts/libmakepkg/lint_pkgbuild/checkdepends.sh.in')
-rw-r--r-- | scripts/libmakepkg/lint_pkgbuild/checkdepends.sh.in | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/scripts/libmakepkg/lint_pkgbuild/checkdepends.sh.in b/scripts/libmakepkg/lint_pkgbuild/checkdepends.sh.in new file mode 100644 index 00000000..5d15bfb2 --- /dev/null +++ b/scripts/libmakepkg/lint_pkgbuild/checkdepends.sh.in @@ -0,0 +1,56 @@ +#!/bin/bash +# +# checkdepends.sh - Check the 'checkdepends' 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_CHECKDEPENDS_SH" ]] && return +LIBMAKEPKG_LINT_PKGBUILD_CHECKDEPENDS_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_checkdepends') + + +lint_checkdepends() { + local checkdepends_list checkdepend name ver ret=0 + + get_pkgbuild_all_split_attributes checkdepends checkdepends_list + + # save our shell options and turn on extglob + local shellopts=$(shopt -p) + shopt -s extglob + + for checkdepend in "${checkdepends_list[@]}"; do + name=${checkdepend%%@(<|>|=|>=|<=)*} + ver=${checkdepend#*@(<|>|=|>=|<=)} + lint_one_pkgname checkdepends "$name" || ret=1 + if [[ $ver != $checkdepend ]]; then + check_pkgver "$ver" checkdepends || ret=1 + fi + done + + eval "$shellopts" + + return $ret +} |