[yocto] Layer Priority with Wildcard .bbappend Files

Bob Cochran yocto at mindchasers.com
Tue Nov 25 12:38:47 PST 2014


On 11/25/2014 06:12 AM, Paul Eggleton wrote:
> Hi Bob / Nick,
>
> On Monday 24 November 2014 16:25:58 Bob Cochran wrote:
>> On 11/24/2014 03:22 PM, Stevens, Nick wrote:
>>> I think I've encountered a bug with how multiple bbappend files are
>>> processed when one of the bbappends contains a filename wildcard, but I
>>> want to make sure there's not something I'm missing before filing a bug
>>> report.>
>>> I have a BSP layer and a customization layer that are based on the OE/poky
>>> Daisy release. The output of `bitbake-layers show-layers` looks like:
>>>       layer                 path                 priority
>>>       =====================================================
>>>       meta                  poky/meta            5
>>>       meta-yocto            poky/meta-yocto      5
>>>       meta-yocto-bsp        poky/meta-yocto-bsp  5
>>>       ...ellided...
>>>       meta-bsp              meta-bsp             6
>>>       meta-custom           meta-custom          8
>>>
>>> In meta-bsp there is a bbappend for base-files named base-
>>> files_3.0.14.bbappend. The meta-bsp bbappend adds a sysctl.conf to /etc -
>>> pretty straightforward:
>>>       FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
>>>       SRC_URI += "file://sysctl.conf"
>>>       do_install_append() {
>>>
>>>           install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/
>>>
>>>       }
>>>
>>> Now what I want to do is add a file called base-files_%.bbappend to meta-
>>> custom. It has its own version of sysctl.conf, and the recipe looks like
>>> this:
>>>       FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
>>>
>>> Here's where things get weird. If I run `bitbake -e base-files` and pull
>>> out the section for FILESEXTRAPATHS, this is what I get (note that I've
>>> stripped out the huge absolute paths to make this easier to read):
>>>       # $FILESEXTRAPATHS [5 operations]
>>>       #   set poky/meta/conf/documentation.conf:172
>>>       #     [doc] "Extends the search path the OpenEmbedded build system
>>>       uses when looking for files and patches as it processes recipes and
>>>       append files." #   _prepend
>>>       meta-custom/recipes-core/base-files/base-files_%.bbappend:6 #
>>>       "meta-custom/recipes-core/base-files/base-files:"
>>>       #   _prepend
>>>       meta-bsp/recipes-core/base-files/base-files_3.0.14.bbappend:3
>>>       #     "meta-bsp/recipes-core/base-files/base-files:"
>>>       #   set data_smart.py:432 [finalize]
>>>       #     "meta-custom/recipes-core/base-files/base-files:"
>>>       #   set data_smart.py:432 [finalize]
>>>       #
>>>       "meta-bsp/recipes-core/base-files/base-files:meta-custom/recipes-cor
>>>       e/base-files/base-files:" # computed:
>>>       #
>>>       "meta-bsp/recipes-core/base-files/base-files:meta-custom/recipes-cor
>>>       e/base-files/base-files:"
>>>       FILESEXTRAPATHS="meta-bsp/recipes-core/base-files/base-files:meta-cu
>>>       stom/recipes-core/base-files/base-files:">
>>> For some reason meta-bsp is coming before meta-custom in FILESEXTRAPATHS,
>>> even though meta-custom has a higher priority!
>>
>> I also have some questions about how FILESEXTRAPATHS is supposed to work
>> with append files and layer priorities.
>>
>> Does a higher layer priority mean that the FILESEXTRAPATHS operation
>> should occur first?
>
> No. bbappends are parsed in ascending layer priority order. It wouldn't make
> sense to do it in the reverse - you want the higher priority layer's settings
> to take precedence
>
>> If this is the case, then a lower priority layer prepend will appear to the
>> left of the higher layer prepend since it runs later, and this will probably
>> not provide the result you want.
>
> The highest priority layer's bbappend will prepend last, thus anything it
> prepends will be first in the list.
>
>> The prepend and layer logic seems messy to me.  I would like to have a
>> way to write my custom layer and specify that what I include in my
>> SRC_URI in each recipe is definitive and can not be overwritten.
>> Suggestions on how to best accomplish this will be greatly appreciated.
>
> I think this is pretty much already the case. Is the problem that you can't
> follow the current behaviour, or that you don't completely trust the layers
> you are pulling in?


Thanks Paul.  Something is amiss when I try to prepend my recipes. I 
suspect it has something to do with OVERRIDE interactions.    I'm 
digging and will report later.



>
>> I have been trying to accomplish this with FILESOVERRIDES, but this
>> logic seems counterintuitive since  DISTROOVERRIDES take precedence over
>> MACHINEOVERRIDES in building the file search path during the unpack task.
>>
>> It seems to me that the file search path should be built using
>> FILESOVERRIDES from left to right:  TRANSLATED_TARGET_ARCH,
>> MACHINEOVERRIDES, and then DISTROOVERRIDES (specific to generic), but
>> this isn't what I'm seeing.  Still investigating how it's all put
>> together...
>>
>>
>> I verified this by building an image - the sysctl.conf that ends up in
>> the final image is the one from meta-bsp, not the one from meta-custom.
>> But if I switch the name of base-files_%.bbappend in meta-custom to
>> base-files_3.0.14.bbappend, this is what I get:
>>>       # $FILESEXTRAPATHS [5 operations]
>>>       #   set poky/meta/conf/documentation.conf:172
>>>       #     [doc] "Extends the search path the OpenEmbedded build system
>>>       uses when looking for files and patches as it processes recipes and
>>>       append files." #   _prepend
>>>       meta-bsp/recipes-core/base-files/base-files_3.0.14.bbappend:3 #
>>>       "meta-bsp/recipes-core/base-files/base-files:"
>>>       #   _prepend
>>>       meta-custom/recipes-core/base-files/base-files_3.0.14.bbappend:6 #
>>>         "meta-custom/recipes-core/base-files/base-files:"
>>>       #   set data_smart.py:432 [finalize]
>>>       #     "meta-bsp/recipes-core/base-files/base-files:"
>>>       #   set data_smart.py:432 [finalize]
>>>       #
>>>       "meta-custom/recipes-core/base-files/base-files:meta-bsp/recipes-cor
>>>       e/base-files/base-files:" # computed:
>>>       #
>>>       "meta-custom/recipes-core/base-files/base-files:meta-bsp/recipes-cor
>>>       e/base-files/base-files:"
>>>       FILESEXTRAPATHS="meta-custom/recipes-core/base-files/base-files:meta
>>>       -bsp/recipes-core/base-files/base-files:">
>>> And now the sysctl.conf file is being pulled from meta-custom.
>
> That absolutely should not happen. If you change it back does it revert to the
> version from meta-bsp? The wildcarding should not change the order in which
> the files are applied. The only corner case I can think of would be if the
> layer priority values are the same number - this isn't the case is it?
>
> Cheers,
> Paul
>




More information about the yocto mailing list