[OE-core] DEPENDS tranlation with BBCLASSEXTEND

Tom Rini tom_rini at mentor.com
Mon Mar 28 20:24:13 UTC 2011


On 03/28/2011 01:11 PM, Khem Raj wrote:
> On Mon, Mar 28, 2011 at 1:06 PM, Tom Rini <tom_rini at mentor.com> wrote:
>> On 03/28/2011 12:48 PM, Khem Raj wrote:
>>> On Mon, Mar 28, 2011 at 12:03 PM, Tom Rini <tom_rini at mentor.com> wrote:
>>>> On 03/27/2011 04:03 PM, Chris Larson wrote:
>>>>> On Sun, Mar 27, 2011 at 1:08 PM, Khem Raj <raj.khem at gmail.com> wrote:
>>>>>> I observed that if I have
>>>>>> DEPENDS = "a b" in recipe.bb which has BBCLASSEXTEND = "native"
>>>>>> then dependecies for recipe-native shows a-native b-native so far so
>>>>>> good
>>>>>>
>>>>>> Now if I want to add a dependency which only is needed for native recipe
>>>>>> I do
>>>>>>
>>>>>> DEPENDS_virtclass-native += "c-native"
>>>>>>
>>>>>> what this does is it will ignore a-native and b-native dependencies and
>>>>>> only adds "c-native" to depends of native recipe
>>>>>>
>>>>>> DEPENDS_virtclass-native_append = " c-native"
>>>>>>
>>>>>> This does what I wanted i.e. have deps on a-native b-native c-native
>>>>>>
>>>>>> I think behavior of += or _append should be similar. Is my understanding
>>>>>> correct ?
>>>>>
>>>>> They've never been the same.  += is immediate, _append is delayed.  If
>>>>> a class, say, native.bbclass, defines the variable with ?=, and you
>>>>> used += before the inherit, then it will have a value, and the ?=
>>>>> won't assign.  I assume native.bbclass does it this way today so you
>>>>> can override the automatic behavior by defining the variable yourself,
>>>>> but I'll let Richard speak to that decision.
>>>>
>>>> As Richard said, this is a good summary.  And a shorter still summary
>>>> (as Chris reminds me everytime I forget) is that since BBCLASSEXTENDS
>>>> makes use of an override already (virtclass-native/cross/etc) you must
>>>> keep that in mind when further modifying it as you get not what you
>>>> expected but what you asked for.
>>>>
>>>
>>> Yes no doubt on how it works and can be coded to likings of what we
>>> have but I think
>>> that having += and friends as well as _append and _prepend could be
>>> combined into one logic
>>> immediate appending/prepending operation may be confusing IMO while
>>> immediate assignments
>>> I think still are ok. We have more than one directives doing very
>>> similar yet semantically different operations
>>> It becomes hard for recipe writers. May be I am over simplifying
>>
>> The problem is that we have different operators for different things.
>> Usually +=/=+ are what you want in a recipe for variables and append /
>> prepend are for classes that do tricky things.
> 
> well can you generalize like this for languages ? I am thinking of say
> in C you cant
> restrict usage to abstractions like this this only can be used in
> header and this in C files
> 
> Even if we do then we should make
> bitbake refuse do _append/_prepend operations in .bb files.

I think this is getting blown out of proportion.  The issue here is that
BBCLASSEXTEND "breaks" the model people have of how they can modify
variables since there's a tendency to tread "DEPENDS_virtclass-native"
like it's "DEPENDSVIRTCLASSNATIVE" and doesn't already have one set of
operators applied already, when it does.  And Richard as suggested
something that should help here so that what most people assume works
(since it works elsewhere) will keep working.


-- 
Tom Rini
Mentor Graphics Corporation




More information about the Openembedded-core mailing list