From 0bf4779cda35cfb8dc049ec5f27017c65c8ce716 Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Thu, 16 Jan 2020 12:27:34 -0500 Subject: 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 Signed-off-by: Allan McRae (cherry picked from commit d626a17ef94d79975ff17d04250152ea46aaade3) --- 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 c49ac57a..73ab26f1 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -782,13 +782,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 @@ -800,6 +803,7 @@ create_srcpackage() { fi done done + pkgname=(${pkgname_backup[@]}) local fullver=$(get_full_version) local pkg_file="$SRCPKGDEST/${pkgbase}-${fullver}${SRCEXT}" -- cgit v1.2.3-24-g4f1b