In my last post I described a way how to ensure a safe and know configuration for KConfig-based system.
But there is a lot more that could be altered when you include additional layer into your workspace. Just think of
But there is a lot more that could be altered when you include additional layer into your workspace. Just think of
- configure options
- build instructions
- additional patches being applied
- license changes (a very bad one)
- files remove which should have been there
- a.s.o.
I though about this for a longer time... after a very deep dive into the way bitbake is handling the parsing of any file (bb, bbappend, inc, conf) I created a small helper bbclass which you can find here.
This class can monitor changes done by bbappend file (no matter where they are actually located in your workspace) and diff them to the plain recipe.
You can now define a set of variables which you don't want to be changed at all (like. SRC_URI, or LICENSE).
The helper class does then the magic for you and diffs them against each other.
If a variable (and all there machine/arch-specific variants) is on the monitoring list and a bbappend alters this - you will get a reasonable warning, what and to which value the change happened.
If a variable (and all there machine/arch-specific variants) is on the monitoring list and a bbappend alters this - you will get a reasonable warning, what and to which value the change happened.
What about files...?
The bitbake-construct does also offer the possibility to overload files
Just think of the following directory structure
- recipes-foo
- foo
- files
- foo.file
- foo_1.2.3.bb
- recipes-bar
- foo
- files
- foo.file
- foo_%.bbappend
now take a guess which "foo.file" will make into the build?
The answer: it depends!
The answer: it depends!
If the file "foo_%.bbappend" contains a line like this
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
the file from the bbappend-subdir will win. If not the it's mostly likely that the "original" file will make it.
This behavior is a gift and a curse that the same time.
The class I wrote, does help you to make it into a gift only.
It offers the possibility to check if a file is defined more than once among the bb-file and all bbappends.
This is also configurable, so you can just set the filter to the files you really don't want to altered by anyone (e.g. defconfig is a typical example).
It offers the possibility to check if a file is defined more than once among the bb-file and all bbappends.
This is also configurable, so you can just set the filter to the files you really don't want to altered by anyone (e.g. defconfig is a typical example).
I wrote the layer-safety.bbclass as part of my collection meta-buildtuils of useful helper functions.
I would be happy to get your input here in the comments or over on GitHub.
Kommentare
Kommentar veröffentlichen