summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/parse/ast.py36
-rw-r--r--bitbake/lib/bb/parse/parse_py/ConfHandler.py6
2 files changed, 42 insertions, 0 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
index 001ba8d289..7abefab2c2 100644
--- a/bitbake/lib/bb/parse/ast.py
+++ b/bitbake/lib/bb/parse/ast.py
@@ -326,6 +326,37 @@ class InheritDeferredNode(AstNode):
326 inherits.append(self.inherit) 326 inherits.append(self.inherit)
327 data.setVar('__BBDEFINHERITS', inherits) 327 data.setVar('__BBDEFINHERITS', inherits)
328 328
329class AddFragmentsNode(AstNode):
330 def __init__(self, filename, lineno, fragments_path_prefix, fragments_variable):
331 AstNode.__init__(self, filename, lineno)
332 self.fragments_path_prefix = fragments_path_prefix
333 self.fragments_variable = fragments_variable
334
335 def eval(self, data):
336 # No need to use mark_dependency since we would only match a fragment
337 # from a specific layer and there can only be a single layer with a
338 # given namespace.
339 def find_fragment(layers, layerid, full_fragment_name):
340 for layerpath in layers.split():
341 candidate_fragment_path = os.path.join(layerpath, full_fragment_name)
342 if os.path.exists(candidate_fragment_path) and bb.utils.get_file_layer(candidate_fragment_path, data) == layerid:
343 return candidate_fragment_path
344 return None
345
346 fragments = data.getVar(self.fragments_variable)
347 layers = data.getVar('BBLAYERS')
348
349 if not fragments:
350 return
351 for f in fragments.split():
352 layerid, fragment_name = f.split('/', 1)
353 full_fragment_name = data.expand("{}/{}.conf".format(self.fragments_path_prefix, fragment_name))
354 fragment_path = find_fragment(layers, layerid, full_fragment_name)
355 if fragment_path:
356 bb.parse.ConfHandler.include(self.filename, fragment_path, self.lineno, data, "include fragment")
357 else:
358 bb.error("Could not find fragment {} in enabled layers: {}".format(f, layers))
359
329def handleInclude(statements, filename, lineno, m, force): 360def handleInclude(statements, filename, lineno, m, force):
330 statements.append(IncludeNode(filename, lineno, m.group(1), force)) 361 statements.append(IncludeNode(filename, lineno, m.group(1), force))
331 362
@@ -370,6 +401,11 @@ def handleInheritDeferred(statements, filename, lineno, m):
370 classes = m.group(1) 401 classes = m.group(1)
371 statements.append(InheritDeferredNode(filename, lineno, classes)) 402 statements.append(InheritDeferredNode(filename, lineno, classes))
372 403
404def handleAddFragments(statements, filename, lineno, m):
405 fragments_path_prefix = m.group(1)
406 fragments_variable = m.group(2)
407 statements.append(AddFragmentsNode(filename, lineno, fragments_path_prefix, fragments_variable))
408
373def runAnonFuncs(d): 409def runAnonFuncs(d):
374 code = [] 410 code = []
375 for funcname in d.getVar("__BBANONFUNCS", False) or []: 411 for funcname in d.getVar("__BBANONFUNCS", False) or []:
diff --git a/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/bitbake/lib/bb/parse/parse_py/ConfHandler.py
index 27665443dd..35321dacfe 100644
--- a/bitbake/lib/bb/parse/parse_py/ConfHandler.py
+++ b/bitbake/lib/bb/parse/parse_py/ConfHandler.py
@@ -47,6 +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 51
51def init(data): 52def init(data):
52 return 53 return
@@ -197,6 +198,11 @@ def feeder(lineno, s, fn, statements, baseconfig=False, conffile=True):
197 ast.handlePyLib(statements, fn, lineno, m) 198 ast.handlePyLib(statements, fn, lineno, m)
198 return 199 return
199 200
201 m = __addfragments_regexp__.match(s)
202 if m:
203 ast.handleAddFragments(statements, fn, lineno, m)
204 return
205
200 raise ParseError("unparsed line: '%s'" % s, fn, lineno); 206 raise ParseError("unparsed line: '%s'" % s, fn, lineno);
201 207
202# Add us to the handlers list 208# Add us to the handlers list