Patchwork [v3] base.bbclass: Fix matching of MACHINEOVERRIDES in COMPATIBLE_MACHINE

login
register
mail settings
Submitter Otavio Salvador
Date April 8, 2013, 8:58 p.m.
Message ID <1365454686-951-1-git-send-email-otavio@ossystems.com.br>
Download mbox | patch
Permalink /patch/47651/
State New
Headers show

Comments

Otavio Salvador - April 8, 2013, 8:58 p.m.
When a MACHINEOVERRIDES has more than one value, split by ':' as usual
OVERRIDES, this were not being properly checked in COMPATIBLE_MACHINE
matching as we need to iterate over each SoC family and check if it is
compatible or not.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---
Changes for v3:
- Stop checking for SOC_FAMILY as it is just for compatibility with
  old BSPs; we move to MACHINEOVERRIDES for this case (RP)

 meta/classes/base.bbclass | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
Otavio Salvador - April 8, 2013, 9:29 p.m.
On Mon, Apr 8, 2013 at 5:58 PM, Otavio Salvador <otavio@ossystems.com.br> wrote:
> When a MACHINEOVERRIDES has more than one value, split by ':' as usual
> OVERRIDES, this were not being properly checked in COMPATIBLE_MACHINE
> matching as we need to iterate over each SoC family and check if it is
> compatible or not.
>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
...
> +            compat_machines.extend((d.getVar('MACHINEOVERRIDES', True) or "").split(":"))
...

I did run it and it fails. I am fixing it and will send a new  version
well tested.

--
Otavio Salvador                             O.S. Systems
E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
Richard Purdie - April 8, 2013, 9:31 p.m.
On Mon, 2013-04-08 at 17:58 -0300, Otavio Salvador wrote:
> When a MACHINEOVERRIDES has more than one value, split by ':' as usual
> OVERRIDES, this were not being properly checked in COMPATIBLE_MACHINE
> matching as we need to iterate over each SoC family and check if it is
> compatible or not.
> 
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
> Changes for v3:
> - Stop checking for SOC_FAMILY as it is just for compatibility with
>   old BSPs; we move to MACHINEOVERRIDES for this case (RP)
> 
>  meta/classes/base.bbclass | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
> index abd6a52..313359c 100644
> --- a/meta/classes/base.bbclass
> +++ b/meta/classes/base.bbclass
> @@ -515,11 +515,12 @@ python () {
>          need_machine = d.getVar('COMPATIBLE_MACHINE', True)
>          if need_machine:
>              import re
> -            this_machine = d.getVar('MACHINE', True)
> -            if this_machine and not re.match(need_machine, this_machine):
> -                this_soc_family = d.getVar('SOC_FAMILY', True)
> -                if (this_soc_family and not re.match(need_machine, this_soc_family)) or not this_soc_family:
> -                    raise bb.parse.SkipPackage("incompatible with machine %s (not in COMPATIBLE_MACHINE)" % this_machine)
> +            compat_machines.extend((d.getVar('MACHINEOVERRIDES', True) or "").split(":"))

No variable "compat_machines" exists before this line so this patch
cannot possibly work. What did you test?

We're close to release and I'm getting pushed hard in places like IRC to
take patches like this which clearly don't work :(

I'm not happy.

Cheers,

Richard
Otavio Salvador - April 8, 2013, 9:33 p.m.
On Mon, Apr 8, 2013 at 6:31 PM, Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
> On Mon, 2013-04-08 at 17:58 -0300, Otavio Salvador wrote:
>> When a MACHINEOVERRIDES has more than one value, split by ':' as usual
>> OVERRIDES, this were not being properly checked in COMPATIBLE_MACHINE
>> matching as we need to iterate over each SoC family and check if it is
>> compatible or not.
>>
>> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
>> ---
>> Changes for v3:
>> - Stop checking for SOC_FAMILY as it is just for compatibility with
>>   old BSPs; we move to MACHINEOVERRIDES for this case (RP)
>>
>>  meta/classes/base.bbclass | 11 ++++++-----
>>  1 file changed, 6 insertions(+), 5 deletions(-)
>>
>> diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
>> index abd6a52..313359c 100644
>> --- a/meta/classes/base.bbclass
>> +++ b/meta/classes/base.bbclass
>> @@ -515,11 +515,12 @@ python () {
>>          need_machine = d.getVar('COMPATIBLE_MACHINE', True)
>>          if need_machine:
>>              import re
>> -            this_machine = d.getVar('MACHINE', True)
>> -            if this_machine and not re.match(need_machine, this_machine):
>> -                this_soc_family = d.getVar('SOC_FAMILY', True)
>> -                if (this_soc_family and not re.match(need_machine, this_soc_family)) or not this_soc_family:
>> -                    raise bb.parse.SkipPackage("incompatible with machine %s (not in COMPATIBLE_MACHINE)" % this_machine)
>> +            compat_machines.extend((d.getVar('MACHINEOVERRIDES', True) or "").split(":"))
>
> No variable "compat_machines" exists before this line so this patch
> cannot possibly work. What did you test?

I got it when testing, hence my previous e-mail saying I found a problem.

--
Otavio Salvador                             O.S. Systems
E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br

Patch

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index abd6a52..313359c 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -515,11 +515,12 @@  python () {
         need_machine = d.getVar('COMPATIBLE_MACHINE', True)
         if need_machine:
             import re
-            this_machine = d.getVar('MACHINE', True)
-            if this_machine and not re.match(need_machine, this_machine):
-                this_soc_family = d.getVar('SOC_FAMILY', True)
-                if (this_soc_family and not re.match(need_machine, this_soc_family)) or not this_soc_family:
-                    raise bb.parse.SkipPackage("incompatible with machine %s (not in COMPATIBLE_MACHINE)" % this_machine)
+            compat_machines.extend((d.getVar('MACHINEOVERRIDES', True) or "").split(":"))
+            for m in compat_machines:
+                if re.match(need_machine, m):
+                    break
+            else:
+                raise bb.parse.SkipPackage("incompatible with machine %s (not in COMPATIBLE_MACHINE)" % d.getVar('MACHINE', True))
 
 
         bad_licenses = (d.getVar('INCOMPATIBLE_LICENSE', True) or "").split()