[OE-core] a few questions about "COMPATIBLE_MACHINE" variable

Robert P. J. Day rpjday at crashcourse.ca
Sun Feb 26 11:36:49 UTC 2017


  (following up on a short discussion from back in december on proper
setting for COMPATIBLE_MACHINE ...)

On Mon, 19 Dec 2016, Christopher Larson wrote:

>
> On Mon, Dec 19, 2016 at 10:56 AM, Robert P. J. Day <rpjday at crashcourse.ca> wrote:
>       i suspected as much. still, would consistency dictate using
>       parentheses or not? just a style thing.
>
>
> I think it’s largely personal preference. Personally, using a
> capture when we don’t need one is ugly to me, so I’d rather see it
> only used when needed, but that’s just my opinion. The upside to
> always using a capture is it makes it clearer, at a glance, to a new
> user that it’s not just a word or list of words, but a regular
> expression.
>  
>       >       next, if the possibilities in a list are REs, what is the
>       >       point of explicitly listing, say, "qemuarm|qemuarm64"? would
>       >       not the RE "qemuarm" subsume the more explicit "qemuarm64"?
>       >       same for the other architectures. (one could suggest that that
>       >       entire line could be shortened to "... = (^qemu)".)
>       >
>       > Just qemu would potentially match future qemu machines which aren’t
>       > actually supported, so I don’t think that would be appropriate. It’d
>       > match too much.
>
>         i realized that, i was just being technical. :-) in any event, as it
>       is, it would *still* match too much, anything starting with
>       "qemuarm", for example.
>
>
> Good point, yes. 
>
>       >         the above seems pretty clear since the following lines would appear
>       >       to say that *only* the qemux86 is compatible:
>       >
>       >         linux-yocto-tiny_4.1.bb:COMPATIBLE_MACHINE = "(qemux86$)"
>       >         linux-yocto-tiny_4.4.bb:COMPATIBLE_MACHINE = "(qemux86$)"
>       >         linux-yocto-tiny_4.8.bb:COMPATIBLE_MACHINE = "(qemux86$)"
>       >
>       >       which suggests the following passage from the YP kernel dev manual is
>       >       a bit misleading:
>       >
>       >         "You must change it to match a list of the machines that your new
>       >         recipe supports. For example, to support the qemux86 and qemux86-64
>       >         machines, use the following form:
>       >
>       >              COMPATIBLE_MACHINE = "qemux86|qemux86-64"
>       >
>       >       and if all this is true, then if you're introducing a new machine, to
>       >       be magnificently pedantic, one should not use:
>       >
>       >         COMPATIBLE_MACHINE_machinename = "machinename"
>       >
>       >       but
>       >
>       >         COMPATIBLE_MACHINE_machinename = "^machinename$"
>       >
>       >       just to play it safe. am i reading all this correctly?
>       >
>       >
>       > Yes, that’s correct, though we need the trailing $ but not the
>       > leading ^, as it’s using re.match, not re.search — meaning it only
>       > matches at the beginning of the string, it doesn’t search the string
>       > to find a match.
>
>         ah, quite right, i had forgotten that. again, in any event, both the
>       code and documentation could probably be tweaked to make all of this
>       more obvious.
>
>
> Absolutely agreed. For this regex specifically, an argument could be
> made that a lack of a trailing $ is almost certainly a bug. I could
> argue that it should either be implicit, though that would be
> limiting, or failing to include it could trigger a warning unless
> you explicitly state you know what you’re doing :) Hmm..

  i'm following up only because i'm going through the YP kernel-dev
manual, and it contains the following snippet:

    For example, to support the qemux86 and qemux86-64 machines, use
    the following form:

     COMPATIBLE_MACHINE = "qemux86|qemux86-64"

which, as chris explained, because matching uses python's "re.match"
operator, already anchors the search string at the beginning but not
at the end so, technically and pedantically, it could be assigned
equally well with (at least for the moment):

     COMPATIBLE_MACHINE = "qemux86"

or, more precisely:

     COMPATIBLE_MACHINE = "qemux86$|qemux86-64$"

is there a style guide entry for proper use of COMPATIBLE_MACHINE?
having the manuals make suggestions that are potentially confusing
to inexperienced users seems like a bad idea.

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