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

Robert P. J. Day rpjday at crashcourse.ca
Fri Mar 6 11:34:34 UTC 2015


On Fri, 6 Mar 2015, Mike Looijmans wrote:

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

  i was going to suggest *exactly* the same thing, but i wanted to
make sure i understood the precise mechanics of the re matching first.

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                        http://crashcourse.ca

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================


More information about the Openembedded-core mailing list