From 870d4c8fdd5e53c24c2a13cf1010b2536460fd8f Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Wed, 30 May 2018 22:50:24 -0400 Subject: libmakepkg/lint_pkgbuild: permit versioned optdepends pacman accepts these, and there is no good reason to be more restrictive ourselves; we should follow the example of "depends" here. Update the documentation to actually state that this is supported. Signed-off-by: Eli Schwartz Signed-off-by: Allan McRae --- doc/PKGBUILD.5.asciidoc | 5 +++-- scripts/libmakepkg/lint_pkgbuild/optdepends.sh.in | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/doc/PKGBUILD.5.asciidoc b/doc/PKGBUILD.5.asciidoc index 9634bd15..ac26f3fe 100644 --- a/doc/PKGBUILD.5.asciidoc +++ b/doc/PKGBUILD.5.asciidoc @@ -212,8 +212,9 @@ underscore and the architecture name e.g., 'checkdepends_x86_64=()'. An array of packages (and accompanying reasons) that are not essential for base functionality, but may be necessary to make full use of the contents of this package. optdepends are currently for informational purposes only - and are not utilized by pacman during dependency resolution. The format - for specifying optdepends is: + and are not utilized by pacman during dependency resolution. Packages in + this list follow the same format as depends, with an optional description + appended. The format for specifying optdepends descriptions is: optdepends=('python: for library bindings') + diff --git a/scripts/libmakepkg/lint_pkgbuild/optdepends.sh.in b/scripts/libmakepkg/lint_pkgbuild/optdepends.sh.in index 87e561cb..9978fe9b 100644 --- a/scripts/libmakepkg/lint_pkgbuild/optdepends.sh.in +++ b/scripts/libmakepkg/lint_pkgbuild/optdepends.sh.in @@ -31,15 +31,23 @@ lint_pkgbuild_functions+=('lint_optdepends') lint_optdepends() { - local a list name optdepends_list ret=0 - - local optdepends_list optdepend name ret=0 + local optdepends_list optdepend name ver ret=0 get_pkgbuild_all_split_attributes optdepends optdepends_list - for optdepend in "${optdepends_list[@]}"; do - name=${optdepend%%:[[:space:]]*} + # this function requires extglob - save current status to restore later + local shellopts=$(shopt -p extglob) + shopt -s extglob + + for optdepend in "${optdepends_list[@]%%:[[:space:]]*}"; do + name=${optdepend%%@(<|>|=|>=|<=)*} + # remove optional epoch in version specifier + ver=${optdepend##$name@(<|>|=|>=|<=)?(+([0-9]):)} lint_one_pkgname optdepends "$name" || ret=1 + if [[ $ver != $optdepend ]]; then + # remove optional pkgrel in version specifier + check_pkgver "${ver%-+([0-9])?(.+([0-9]))}" optdepends || ret=1 + fi done return $ret -- cgit v1.2.3-54-g00ecf