diff options
Diffstat (limited to 'bitbake/lib/bb/parse/ast.py')
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index d30b688965..7581d003fd 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py | |||
@@ -314,6 +314,16 @@ class InheritNode(AstNode): | |||
314 | def eval(self, data): | 314 | def eval(self, data): |
315 | bb.parse.BBHandler.inherit(self.classes, self.filename, self.lineno, data) | 315 | bb.parse.BBHandler.inherit(self.classes, self.filename, self.lineno, data) |
316 | 316 | ||
317 | class InheritDeferredNode(AstNode): | ||
318 | def __init__(self, filename, lineno, classes): | ||
319 | AstNode.__init__(self, filename, lineno) | ||
320 | self.inherit = (classes, filename, lineno) | ||
321 | |||
322 | def eval(self, data): | ||
323 | inherits = data.getVar('__BBDEFINHERITS', False) or [] | ||
324 | inherits.append(self.inherit) | ||
325 | data.setVar('__BBDEFINHERITS', inherits) | ||
326 | |||
317 | def handleInclude(statements, filename, lineno, m, force): | 327 | def handleInclude(statements, filename, lineno, m, force): |
318 | statements.append(IncludeNode(filename, lineno, m.group(1), force)) | 328 | statements.append(IncludeNode(filename, lineno, m.group(1), force)) |
319 | 329 | ||
@@ -364,6 +374,10 @@ def handleInherit(statements, filename, lineno, m): | |||
364 | classes = m.group(1) | 374 | classes = m.group(1) |
365 | statements.append(InheritNode(filename, lineno, classes)) | 375 | statements.append(InheritNode(filename, lineno, classes)) |
366 | 376 | ||
377 | def handleInheritDeferred(statements, filename, lineno, m): | ||
378 | classes = m.group(1) | ||
379 | statements.append(InheritDeferredNode(filename, lineno, classes)) | ||
380 | |||
367 | def runAnonFuncs(d): | 381 | def runAnonFuncs(d): |
368 | code = [] | 382 | code = [] |
369 | for funcname in d.getVar("__BBANONFUNCS", False) or []: | 383 | for funcname in d.getVar("__BBANONFUNCS", False) or []: |
@@ -430,6 +444,14 @@ def multi_finalize(fn, d): | |||
430 | logger.debug("Appending .bbappend file %s to %s", append, fn) | 444 | logger.debug("Appending .bbappend file %s to %s", append, fn) |
431 | bb.parse.BBHandler.handle(append, d, True) | 445 | bb.parse.BBHandler.handle(append, d, True) |
432 | 446 | ||
447 | while True: | ||
448 | inherits = d.getVar('__BBDEFINHERITS', False) or [] | ||
449 | if not inherits: | ||
450 | break | ||
451 | inherit, filename, lineno = inherits.pop(0) | ||
452 | d.setVar('__BBDEFINHERITS', inherits) | ||
453 | bb.parse.BBHandler.inherit(inherit, filename, lineno, d, deferred=True) | ||
454 | |||
433 | onlyfinalise = d.getVar("__ONLYFINALISE", False) | 455 | onlyfinalise = d.getVar("__ONLYFINALISE", False) |
434 | 456 | ||
435 | safe_d = d | 457 | safe_d = d |