[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