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}"
> 

Reply via email to