You need to explain the difference between v1 and v2 and why v2 is needed. What was wrong with v1?
The environment pass through hack is horrible.
Alex
Hi Alex,
V1 to fix YOCTO #16060 is to use default value for internal fragment.
V2 is to error out in case of a previous value. See Richard's comments in https://bugzilla.yoctoproject.org/show_bug.cgi?id=16060
I know that the env method is a horrible hack. I looked around but could not find any other choice. Do you have any suggestion?
Regards,
Qi
On Fri 14. Nov 2025 at 7.02, <Qi.Chen@windriver.com> wrote:
From: Chen Qi <Qi.Chen@windriver.com>
When an internal fragment is enabled, and there's already a value
for the corresponding variable, we should error out to avoid any
confusion.
For example, when 'machine/qemux86-64' fragement is enabled, and
we get some "MACHINE = xxx" in local.conf or env, we should error
out and recomment users to use 'bitbake-config-build disable-fragment'.
We should be tolerating weak assignments. For example, DISTRO defaults
to "nodistro", and when 'distro/poky" fragment is enabled, there should
be no confusion.
The implementation hacks the environment variable as a way to tell
bitbake that we're using 'bitbake-config-build'. Because we recommend
users to use bitbake-config-build, then it should not error out.
Fixes [YOCTO #16060]
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
bin/bitbake-layers | 3 +++
lib/bb/parse/ast.py | 7 +++++++
2 files changed, 10 insertions(+)
diff --git a/bin/bitbake-layers b/bin/bitbake-layers
index 341ecbcd9..c4569c6c3 100755
--- a/bin/bitbake-layers
+++ b/bin/bitbake-layers
@@ -64,6 +64,9 @@ def main():
if global_args.force > 1:
bbpaths = []
else:
+ if toolname == "bitbake-config-build":
+ os.environ["BB_ENV_PASSTHROUGH_ADDITIONS"] = os.getenv("BB_ENV_PASSTHROUGH_ADDITIONS") + " _BB_INTERNAL_RUN_BITBAKE_CONFIG_BUILD_"
+ os.environ["_BB_INTERNAL_RUN_BITBAKE_CONFIG_BUILD_"] = "1"
tinfoil.prepare(True)
bbpaths = tinfoil.config_data.getVar('BBPATH').split(':')
diff --git a/lib/bb/parse/ast.py b/lib/bb/parse/ast.py
index e6ff1ff76..70a2a37a6 100644
--- a/lib/bb/parse/ast.py
+++ b/lib/bb/parse/ast.py
@@ -364,6 +364,13 @@ class AddFragmentsNode(AstNode):
def check_and_set_builtin_fragment(fragment, data, builtin_fragments):
prefix, value = fragment.split('/', 1)
if prefix in builtin_fragments.keys():
+ if data.getVar(builtin_fragments[prefix], noweakdefault=True) != None:
+ if not os.getenv("_BB_INTERNAL_RUN_BITBAKE_CONFIG_BUILD_"):
+ bb.fatal(
+ ("A builtin fragment '%s' is used while %s has already got an assignment.\n"
+ "Please either disable the fragment or remove the value assignment.\n"
+ "To disable the fragment, use 'bitbake-config-build disable-fragment %s'."
+ ) % (fragment, builtin_fragments[prefix], fragment))
fragment_history = data.varhistory.variable(self.fragments_variable)
loginfo={}
for fh in fragment_history[::-1]:
--
2.34.1