On 23/12/19 1:57 am, Eli Schwartz wrote: > 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 > is even recommended in the PKGBUILD(5) documentation... > > ... 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 > > Fixes FS#64932 > > Signed-off-by: Eli Schwartz <eschwa...@archlinux.org> > --- > scripts/makepkg.sh.in | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in > index ca3e7459..674e0d87 100644 > --- a/scripts/makepkg.sh.in > +++ b/scripts/makepkg.sh.in > @@ -784,13 +784,14 @@ create_srcpackage() { > fi > done > > - local i > + 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
It took me a while to see what this change did... We need $pkgname set right for the eval in extract_function_variable to do its thing. Can we get a brief comment in that regard above the place where you backup ${pkgname[@]}? Also note, this problem extends into checking files are present early in makepkg. e.g. for a PKGBUILD with pkgname=('a' 'b'), and using $pkgname.install in both package_*() functions we get: $ makepkg ==> ERROR: install file (a.install) does not exist or is not a regular file. ==> ERROR: install file (a.install) does not exist or is not a regular file. > files+=("$file") > fi > done > @@ -802,6 +803,7 @@ create_srcpackage() { > fi > done > done > + pkgname=(${pkgname_backup[@]}) > > local fullver=$(get_full_version) > local pkg_file="$SRCPKGDEST/${pkgbase}-${fullver}${SRCEXT}" >