diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2020-01-16 18:27:34 +0100 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2020-01-27 08:53:50 +0100 |
commit | d626a17ef94d79975ff17d04250152ea46aaade3 (patch) | |
tree | ba9da4c04b40c86aa1655f4c5bfe045b3bbc53f7 | |
parent | 2856a7dea3c0d4584e126b5ca5957e13e23f83d1 (diff) | |
download | pacman-d626a17ef94d79975ff17d04250152ea46aaade3.tar.gz pacman-d626a17ef94d79975ff17d04250152ea46aaade3.tar.xz |
makepkg: make per-package files containing '$pkgname' consistently work
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@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r-- | scripts/libmakepkg/lint_pkgbuild/changelog.sh.in | 10 | ||||
-rw-r--r-- | scripts/libmakepkg/lint_pkgbuild/install.sh.in | 10 | ||||
-rw-r--r-- | 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 ca3e7459..a6de7823 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -784,13 +784,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 @@ -802,6 +805,7 @@ create_srcpackage() { fi done done + pkgname=(${pkgname_backup[@]}) local fullver=$(get_full_version) local pkg_file="$SRCPKGDEST/${pkgbase}-${fullver}${SRCEXT}" |