[pacman-dev] [PATCH v2] makepkg: make per-package files containing '$pkgname' consistently work
Eli Schwartz
eschwartz at archlinux.org
Thu Jan 16 17:27:34 UTC 2020
Extracting function variables containing arbitrarily scoped variables of
arbitrary nature is a disaster, but let's at least cover the common case
of using the actual '$pkgname' in an install/changelog file. It's the
odd case of actually being basically justified use of disambiguating
between the same variable used in multiple different split packages...
and also, --printsrcinfo already uses and overwrites the variable
'pkgname' in pkgbuild_extract_to_srcinfo, so this "works" in .SRCINFO
but doesn't work in .src.tar.gz
It doesn't work in lint_pkgbuild either, but in that case the problem is
being too permissive, not too restrictive -- we might end up checking
the same file twice, and printing that it is missing twice.
Fixes FS#64932
Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
---
v2: add explanatory comments, and handle lint_pkgbuild as well
scripts/libmakepkg/lint_pkgbuild/changelog.sh.in | 10 +++++++---
scripts/libmakepkg/lint_pkgbuild/install.sh.in | 10 +++++++---
scripts/makepkg.sh.in | 10 +++++++---
3 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/scripts/libmakepkg/lint_pkgbuild/changelog.sh.in b/scripts/libmakepkg/lint_pkgbuild/changelog.sh.in
index 114298f9..be6501ef 100644
--- a/scripts/libmakepkg/lint_pkgbuild/changelog.sh.in
+++ b/scripts/libmakepkg/lint_pkgbuild/changelog.sh.in
@@ -32,11 +32,15 @@ lint_pkgbuild_functions+=('lint_changelog')
lint_changelog() {
- local name file changelog_list
+ local file changelog_list
changelog_list=("${changelog[@]}")
- for name in "${pkgname[@]}"; do
- if extract_function_variable "package_$name" changelog 0 file; then
+ # set pkgname the same way we do for running package(), this way we get
+ # the right value in extract_function_variable
+ local pkgname_backup=(${pkgname[@]})
+ local pkgname
+ for pkgname in "${pkgname_backup[@]}"; do
+ if extract_function_variable "package_$pkgname" changelog 0 file; then
changelog_list+=("$file")
fi
done
diff --git a/scripts/libmakepkg/lint_pkgbuild/install.sh.in b/scripts/libmakepkg/lint_pkgbuild/install.sh.in
index 95076692..1bf5681d 100644
--- a/scripts/libmakepkg/lint_pkgbuild/install.sh.in
+++ b/scripts/libmakepkg/lint_pkgbuild/install.sh.in
@@ -32,11 +32,15 @@ lint_pkgbuild_functions+=('lint_install')
lint_install() {
- local list file name install_list ret=0
+ local list file install_list ret=0
install_list=("${install[@]}")
- for name in "${pkgname[@]}"; do
- extract_function_variable "package_$name" install 0 file
+ # set pkgname the same way we do for running package(), this way we get
+ # the right value in extract_function_variable
+ local pkgname_backup=(${pkgname[@]})
+ local pkgname
+ for pkgname in "${pkgname_backup[@]}"; do
+ extract_function_variable "package_$pkgname" install 0 file
install_list+=("$file")
done
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 9f641d97..2e54b8aa 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -800,13 +800,16 @@ create_srcpackage() {
fi
done
- local i
+ # set pkgname the same way we do for running package(), this way we get
+ # the right value in extract_function_variable
+ local pkgname_backup=(${pkgname[@]})
+ local i pkgname
for i in 'changelog' 'install'; do
local file files
[[ ${!i} ]] && files+=("${!i}")
- for name in "${pkgname[@]}"; do
- if extract_function_variable "package_$name" "$i" 0 file; then
+ for pkgname in "${pkgname_backup[@]}"; do
+ if extract_function_variable "package_$pkgname" "$i" 0 file; then
files+=("$file")
fi
done
@@ -818,6 +821,7 @@ create_srcpackage() {
fi
done
done
+ pkgname=(${pkgname_backup[@]})
local fullver=$(get_full_version)
local pkg_file="$SRCPKGDEST/${pkgbase}-${fullver}${SRCEXT}"
--
2.25.0
More information about the pacman-dev
mailing list