Patchwork package_rpm.bbclass: Accomodate dash when using arrays

login
register
mail settings
Submitter Khem Raj
Date July 29, 2012, 9:27 p.m.
Message ID <1343597225-9805-1-git-send-email-raj.khem@gmail.com>
Download mbox | patch
Permalink /patch/33267/
State Accepted
Commit 4029ce1a15e1dbd374444ee77ccf2a915e463b7b
Headers show

Comments

Khem Raj - July 29, 2012, 9:27 p.m.
we were assigning local variable to an array coming through
positional arguments. local is a non posix contruct thats
also supported by dash luckily but operates differently in this
case it exapnds the array before assignment. so

local pkgs="$@"

turns into pkgs=locale-base-en-us locale-base-en-gb

ant we see errors

run.do_rootfs.25593: 932: local: locale-base-en-gb: bad variable name

So lets not use defining and assigning local in one go
first define a local and then the assignment

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 meta/classes/package_rpm.bbclass |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
Paul Eggleton - July 30, 2012, 9:26 a.m.
On Sunday 29 July 2012 14:27:05 Khem Raj wrote:
> we were assigning local variable to an array coming through
> positional arguments. local is a non posix contruct thats
> also supported by dash luckily but operates differently in this
> case it exapnds the array before assignment. so
> 
> local pkgs="$@"
> 
> turns into pkgs=locale-base-en-us locale-base-en-gb
> 
> ant we see errors
> 
> run.do_rootfs.25593: 932: local: locale-base-en-gb: bad variable name
> 
> So lets not use defining and assigning local in one go
> first define a local and then the assignment

Oops, sorry about that.

However, in the other thread you said package_rpm.bbclass was "full of 
bashisms" - is there only this one?

Cheers,
Paul
Khem Raj - July 30, 2012, 3:27 p.m.
-Khem

On Jul 30, 2012, at 2:26 AM, Paul Eggleton <paul.eggleton@linux.intel.com> wrote:

> On Sunday 29 July 2012 14:27:05 Khem Raj wrote:
>> we were assigning local variable to an array coming through
>> positional arguments. local is a non posix contruct thats
>> also supported by dash luckily but operates differently in this
>> case it exapnds the array before assignment. so
>> 
>> local pkgs="$@"
>> 
>> turns into pkgs=locale-base-en-us locale-base-en-gb
>> 
>> ant we see errors
>> 
>> run.do_rootfs.25593: 932: local: locale-base-en-gb: bad variable name
>> 
>> So lets not use defining and assigning local in one go
>> first define a local and then the assignment
> 
> Oops, sorry about that.
> 
> However, in the other thread you said package_rpm.bbclass was "full of 
> bashisms" - is there only this one?


I was referring to use of local since that is not posix but it seems it's so prevalent that even dash has extension for it so we are ok with dash and bash there 
> 
> Cheers,
> Paul
> 
> -- 
> 
> Paul Eggleton
> Intel Open Source Technology Centre
Richard Purdie - July 31, 2012, 11:22 a.m.
On Sun, 2012-07-29 at 14:27 -0700, Khem Raj wrote:
> we were assigning local variable to an array coming through
> positional arguments. local is a non posix contruct thats
> also supported by dash luckily but operates differently in this
> case it exapnds the array before assignment. so
> 
> local pkgs="$@"
> 
> turns into pkgs=locale-base-en-us locale-base-en-gb
> 
> ant we see errors
> 
> run.do_rootfs.25593: 932: local: locale-base-en-gb: bad variable name
> 
> So lets not use defining and assigning local in one go
> first define a local and then the assignment
> 
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
>  meta/classes/package_rpm.bbclass |    7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)

Merged to master, thanks.

Richard

Patch

diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index b4bc52e..50e9b31 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -200,7 +200,12 @@  rpm_update_pkg () {
 process_pkg_list_rpm() {
 	local insttype=$1
 	shift
-	local pkgs="$@"
+	# $@ is special POSIX linear array can not be assigned
+	# to a local variable directly in dash since its separated by
+	# space and dash expands it before assignment
+	# and local x=1 2 3 and not x="1 2 3"
+	local pkgs
+	pkgs="$@"
 	local confbase=${INSTALL_CONFBASE_RPM}
 
 	echo -n > ${target_rootfs}/install/base_archs.pkglist