[poky] [PATCH 1/1] curl: fix native dependency

Richard Purdie rpurdie at linux.intel.com
Thu Dec 9 07:16:12 PST 2010


On Wed, 2010-12-08 at 11:12 +0800, Qing He wrote:
> Thank you for the fix, I've been looking the smart data section
> recently, and the rationale becomes much clearer to me.
> 
> However, the following case still has some confusion:
> 
> FOO = "A"
> FOO_append = "B"
> FOO_virtclass-native = "C"
> 
> when in virtclass-native, the output is simply "C", instead of "CB"
> as I expected

This is a tricky one. It would be interesting to see if this applies
with other overrides such as MACHINE. The reason I say that is the way
the virtclass-native override is added (see native.bbclass).

> > > I also thought that there's no ordering constraint in this design. either "A B C"
> > > or "A C B" could work, unless the appendix itself has order constraint, say 
> > > a patch sequence. But I'm not sure whether there's real usage and we need
> > > to handle it or not.
> > 
> > I think its not something we should worry too much about, just something
> > to be aware of.
> 
> There is some occasion where the ordering may matter, for example, CFLAGS
> (and some other command line options). But even this may avoid the need of
> predicatable order if we are careful.

Right, there are cases it will matter like patch application but we just
need to be sensitive to that when writing metadata.

> > I do still think we should support FOO_append_OVERA_OVERB_OVERC though
> > perhaps we should leave a bug open on that?
> 
> This question also arose when I read the code, then I realize that
> FOO_append_OVERA_OVERB_OVERC doesn't work in current design. Previously
> I expected something like a staged handling, i.e. peeling off the
> append/prepend first, and then handling override, but actually they are
> not that loosely coupled.

I'd also actually thought the code worked differently to how it does
before I looked at it!

> That said, it seems supporting multiple overrides in append is still
> ok, I tried to sketch a patch as follow, seems work for
> FOO_append_virtclass-native_qemux86 = "C"

This looks reasonable. In python you should used "True" and "False"
instead of "1" and "0".

I've just mentally been asking myself what if this was a variable like
SRC_URI where the name contains an "_" but since we don't allow
overrides to contain the character, I think we're safe.

I also think you can simplify the logic slightly to be:

+                            for override in o.split('_'):
+                                if not override in overrides:
+                                    keep.append((a ,o)) 
+                                    continue

?

Cheers,

Richard

> ---
> diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
> index c8cd8f8..116ea10 100644
> --- a/bitbake/lib/bb/data_smart.py
> +++ b/bitbake/lib/bb/data_smart.py
> @@ -160,9 +160,15 @@ class DataSmart:
>                  for append in appends:
>                      keep = []
>                      for (a, o) in self.getVarFlag(append, op) or []:
> -                        if o and not o in overrides:
> -                            keep.append((a ,o))
> -                            continue
> +                        if o:
> +                            applicable = 1
> +                            for override in o.split('_'):
> +                                if not override in overrides:
> +                                    applicable = 0
> +                                    break
> +                            if not applicable:
> +                                keep.append((a ,o))
> +                                continue
>  
>                          if op is "_append":
>                              sval = self.getVar(append, False) or ""
> ---
> 
> 
> Thanks,
> Qing
> 





More information about the poky mailing list