[OE-core] is standard for COMPATIBLE_MACHINE to use "()" or not?

Mike Looijmans mike.looijmans at topic.nl
Fri Mar 6 11:16:41 UTC 2015


On 06-03-15 10:35, Robert P. J. Day wrote:
> On Fri, 6 Mar 2015, Mike Looijmans wrote:
>
>> On 05-03-15 09:43, Robert P. J. Day wrote:
>>>
>>>     a style guide thing ... it appears that COMPATIBLE_MACHINE happily
>>> acccepts a matching RE within parentheses or not, is there a
>>> preference?
>>>
>>>     also, in checking that, i ran across this in oe-core:
>>>
>>> linux-yocto_3.14.bb:COMPATIBLE_MACHINE =
>>> "qemuarm|qemuarm64|qemux86|qemuppc|qemumips|qemumips64|qemux86-64"
>>> linux-yocto_3.19.bb:COMPATIBLE_MACHINE =
>>> "qemuarm|qemuarm64|qemux86|qemuppc|qemumips|qemumips64|qemux86-64"
>>> linux-yocto-dev.bb:COMPATIBLE_MACHINE =
>>> "(qemuarm|qemux86|qemuppc|qemumips|qemumips64|qemux86-64)"
>>
>> The regex should have been "qemu(arm|x86|ppc|mips|mips64|x86-64)"
>>
>> And since "x86-64" already matches "x86", that could have been omitted.
>>
>>> where the first two recipes list "qemuarm64" but the dev version
>>> doesn't ... is that deliberate?
>>
>> Probably not, but "qemuarm64" matches "qemuarm" already.
>
>    more nitpcking pedantry, but as i read it from the python code in
> base.bbclass:
>
>          need_machine = d.getVar('COMPATIBLE_MACHINE', True)
>          if need_machine:
>              import re
>              compat_machines = (d.getVar('MACHINEOVERRIDES', True) or "").split(":")
>              for m in compat_machines:
>                  if re.match(need_machine, m):
>                      break
>
> the "re.match"ing does not implicitly anchor the RE to the beginning
> or end of string, correct? it couldn't, or "qemuarm64" could not
> possibly match "qemuarm".
>
>    does that not suggest that one should add those anchors to avoid the
> (admittedly unlikely) situation where i define a machine named, say,
> "rdayqemux86" which, as i read it, will match a "qemux86" machine even
> if i didn't want it to? would i then avoid this by setting:
>
>    COMPATIBLE_MACHINE = "^rdayqemu"
>
> to match *all* machines whose names *start* with "rdayqemu"? this
> really isn't explained carefully anywhere i can see.

Well, I got my knowledge the hard way too (getting hit with unexpected results 
and then looking into the source code).

Without further hints, I think over 90% of the users think that 
COMPATIBLE_MACHINE does an exact match, not a regex match, and when they see 
the "|" in some recipes, they just assume some code will do a 
string.split('|') on it.

I wonder if the actual intention of that long qemu mach was "all QEMU 
machines", in which case the expression could have been simply "qemu" or 
better "^qemu".



Met vriendelijke groet / kind regards,

Mike Looijmans
System Expert


TOPIC Embedded Systems
Eindhovenseweg 32-C, NL-5683 KH Best
Postbus 440, NL-5680 AK Best
Telefoon: (+31) (0) 499 33 69 79
Telefax:  (+31) (0) 499 33 69 70
E-mail: mike.looijmans at topic.nl
Website: www.topic.nl

Please consider the environment before printing this e-mail

Topic zoekt gedreven (embedded) software specialisten!
http://topic.nl/vacatures/topic-zoekt-software-engineers/




More information about the Openembedded-core mailing list