lib/bbconfigbuild/configfragments: add support for listing and enabling built-in fragments

Sample output:

$ bitbake-config-build enable-fragment machine/qemuarm
Fragment machine/qemuarm added to /srv/storage/alex/yocto/build-64-alt/conf/auto.conf.

$ bitbake-config-build list-fragments
Available built-in fragments:
machine/...	Sets MACHINE = ...
distro/...	Sets DISTRO = ...

Enabled built-in fragments:
machine/qemuarm	Sets MACHINE = "qemuarm"

... (standard on-disk fragments output follows)

(From OE-Core rev: 47cb11db810bef36e791af84be1d680fd99301c7)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexander Kanavin 2025-06-18 11:21:02 +02:00 committed by Richard Purdie
parent 41de71e062
commit 724b86c08a

View File

@ -62,7 +62,22 @@ class ConfigFragmentsPlugin(LayerPlugin):
else:
print('Name: {}\nPath: {}\nEnabled: {}\nSummary: {}\nDescription:\n{}\n'.format(f['name'], f['path'], 'yes' if is_enabled else 'no', f['summary'],''.join(f['description'])))
def print_builtin_fragments(builtin, enabled):
print('Available built-in fragments:')
builtin_dict = {i[0]:i[1] for i in [f.split(':') for f in builtin]}
for prefix,var in builtin_dict.items():
print('{}/...\tSets {} = ...'.format(prefix, var))
print('')
enabled_builtin_fragments = [f for f in enabled if self.builtin_fragment_exists(f)]
print('Enabled built-in fragments:')
for f in enabled_builtin_fragments:
prefix, value = f.split('/', 1)
print('{}\tSets {} = "{}"'.format(f, builtin_dict[prefix], value))
print('')
all_enabled_fragments = (self.tinfoil.config_data.getVar('OE_FRAGMENTS') or "").split()
all_builtin_fragments = (self.tinfoil.config_data.getVar('OE_FRAGMENTS_BUILTIN') or "").split()
print_builtin_fragments(all_builtin_fragments, all_enabled_fragments)
for layername, layerdata in self.discover_fragments().items():
layerdir = layerdata['layerdir']
@ -89,6 +104,11 @@ class ConfigFragmentsPlugin(LayerPlugin):
return True
return False
def builtin_fragment_exists(self, fragmentname):
fragment_prefix = fragmentname.split("/",1)[0]
fragment_prefix_defs = set([f.split(':')[0] for f in self.tinfoil.config_data.getVar('OE_FRAGMENTS_BUILTIN').split()])
return fragment_prefix in fragment_prefix_defs
def create_conf(self, confpath):
if not os.path.exists(confpath):
with open(confpath, 'w') as f:
@ -112,7 +132,7 @@ class ConfigFragmentsPlugin(LayerPlugin):
return " ".join(enabled_fragments), None, 0, True
for f in args.fragmentname:
if not self.fragment_exists(f):
if not self.fragment_exists(f) and not self.builtin_fragment_exists(f):
raise Exception("Fragment {} does not exist; use 'list-fragments' to see the full list.".format(f))
self.create_conf(args.confpath)