diff options
author | Alexander Kanavin <alex@linutronix.de> | 2024-12-11 14:46:14 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-12-13 10:44:35 +0000 |
commit | e0e6124d9adbd7a407b332535c1a3a6434cb157d (patch) | |
tree | 9e30c32a4b5bebefbdc015c8a885654810fb8dd1 | |
parent | 311348fc2ed1ddbcc4c3b8265be4dc9fc34a6947 (diff) | |
download | poky-e0e6124d9adbd7a407b332535c1a3a6434cb157d.tar.gz |
bitbake: bitbake: parse: add support for flagged fragment variables
It was suggested that using flags in fragment content to
mark fragment-specific metadata (such as descriptions and
dependencies) is prone to quiet regressions when fragments
are renamed or moved, and it clutters the fragment content.
With this change allowed fragment metadata variables must
be explicitly listed in a variable that is given to addfragment
directive, and parser will add the flag containing the fragment name
to them.
(Bitbake rev: ed9a3ca9426500511feb77f41a146953dbfe9af7)
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 11 | ||||
-rw-r--r-- | bitbake/lib/bb/parse/parse_py/ConfHandler.py | 2 |
2 files changed, 10 insertions, 3 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index 7abefab2c2..03370180e3 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py | |||
@@ -327,10 +327,11 @@ class InheritDeferredNode(AstNode): | |||
327 | data.setVar('__BBDEFINHERITS', inherits) | 327 | data.setVar('__BBDEFINHERITS', inherits) |
328 | 328 | ||
329 | class AddFragmentsNode(AstNode): | 329 | class AddFragmentsNode(AstNode): |
330 | def __init__(self, filename, lineno, fragments_path_prefix, fragments_variable): | 330 | def __init__(self, filename, lineno, fragments_path_prefix, fragments_variable, flagged_variables_list_variable): |
331 | AstNode.__init__(self, filename, lineno) | 331 | AstNode.__init__(self, filename, lineno) |
332 | self.fragments_path_prefix = fragments_path_prefix | 332 | self.fragments_path_prefix = fragments_path_prefix |
333 | self.fragments_variable = fragments_variable | 333 | self.fragments_variable = fragments_variable |
334 | self.flagged_variables_list_variable = flagged_variables_list_variable | ||
334 | 335 | ||
335 | def eval(self, data): | 336 | def eval(self, data): |
336 | # No need to use mark_dependency since we would only match a fragment | 337 | # No need to use mark_dependency since we would only match a fragment |
@@ -345,6 +346,7 @@ class AddFragmentsNode(AstNode): | |||
345 | 346 | ||
346 | fragments = data.getVar(self.fragments_variable) | 347 | fragments = data.getVar(self.fragments_variable) |
347 | layers = data.getVar('BBLAYERS') | 348 | layers = data.getVar('BBLAYERS') |
349 | flagged_variables = data.getVar(self.flagged_variables_list_variable).split() | ||
348 | 350 | ||
349 | if not fragments: | 351 | if not fragments: |
350 | return | 352 | return |
@@ -354,6 +356,10 @@ class AddFragmentsNode(AstNode): | |||
354 | fragment_path = find_fragment(layers, layerid, full_fragment_name) | 356 | fragment_path = find_fragment(layers, layerid, full_fragment_name) |
355 | if fragment_path: | 357 | if fragment_path: |
356 | bb.parse.ConfHandler.include(self.filename, fragment_path, self.lineno, data, "include fragment") | 358 | bb.parse.ConfHandler.include(self.filename, fragment_path, self.lineno, data, "include fragment") |
359 | for flagged_var in flagged_variables: | ||
360 | val = data.getVar(flagged_var) | ||
361 | data.setVarFlag(flagged_var, f, val) | ||
362 | data.setVar(flagged_var, None) | ||
357 | else: | 363 | else: |
358 | bb.error("Could not find fragment {} in enabled layers: {}".format(f, layers)) | 364 | bb.error("Could not find fragment {} in enabled layers: {}".format(f, layers)) |
359 | 365 | ||
@@ -404,7 +410,8 @@ def handleInheritDeferred(statements, filename, lineno, m): | |||
404 | def handleAddFragments(statements, filename, lineno, m): | 410 | def handleAddFragments(statements, filename, lineno, m): |
405 | fragments_path_prefix = m.group(1) | 411 | fragments_path_prefix = m.group(1) |
406 | fragments_variable = m.group(2) | 412 | fragments_variable = m.group(2) |
407 | statements.append(AddFragmentsNode(filename, lineno, fragments_path_prefix, fragments_variable)) | 413 | flagged_variables_list_variable = m.group(3) |
414 | statements.append(AddFragmentsNode(filename, lineno, fragments_path_prefix, fragments_variable, flagged_variables_list_variable)) | ||
408 | 415 | ||
409 | def runAnonFuncs(d): | 416 | def runAnonFuncs(d): |
410 | code = [] | 417 | code = [] |
diff --git a/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/bitbake/lib/bb/parse/parse_py/ConfHandler.py index 35321dacfe..d0711eda04 100644 --- a/bitbake/lib/bb/parse/parse_py/ConfHandler.py +++ b/bitbake/lib/bb/parse/parse_py/ConfHandler.py | |||
@@ -47,7 +47,7 @@ __export_regexp__ = re.compile( r"export\s+([a-zA-Z0-9\-_+.${}/~]+)$" ) | |||
47 | __unset_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/~]+)$" ) | 47 | __unset_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/~]+)$" ) |
48 | __unset_flag_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/~]+)\[([a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@]+)\]$" ) | 48 | __unset_flag_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/~]+)\[([a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@]+)\]$" ) |
49 | __addpylib_regexp__ = re.compile(r"addpylib\s+(.+)\s+(.+)" ) | 49 | __addpylib_regexp__ = re.compile(r"addpylib\s+(.+)\s+(.+)" ) |
50 | __addfragments_regexp__ = re.compile(r"addfragments\s+(.+)\s+(.+)" ) | 50 | __addfragments_regexp__ = re.compile(r"addfragments\s+(.+)\s+(.+)\s+(.+)" ) |
51 | 51 | ||
52 | def init(data): | 52 | def init(data): |
53 | return | 53 | return |