]> code.ossystems Code Review - openembedded-core.git/commitdiff
Add a hack to avoid the req that all vars using LAYERDIR be immediately expanded
authorChris Larson <chris_larson@mentor.com>
Wed, 14 Apr 2010 21:30:09 +0000 (14:30 -0700)
committerRichard Purdie <rpurdie@linux.intel.com>
Fri, 2 Jul 2010 14:41:33 +0000 (15:41 +0100)
See the comment in the code for details.

(Bitbake rev: 849dbd63244cbc4eaca0f1beedbb67baca024629)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake/lib/bb/cooker.py

index eab95d03364f7f44ed7ba1931852167d20850e8c..7a19740cc8ef733cb503efd3063348bba5965543 100644 (file)
@@ -523,11 +523,25 @@ class BBCooker:
 
                 layers = (bb.data.getVar('BBLAYERS', data, True) or "").split()
 
+                data = bb.data.createCopy(data)
                 for layer in layers:
                     bb.msg.debug(2, bb.msg.domain.Parsing, "Adding layer %s" % layer)
                     bb.data.setVar('LAYERDIR', layer, data)
                     data = bb.parse.handle(os.path.join(layer, "conf", "layer.conf"), data)
 
+                    # XXX: Hack, relies on the local keys of the datasmart
+                    # instance being stored in the 'dict' attribute and makes
+                    # assumptions about how variable expansion works, but
+                    # there's no better way to force an expansion of a single
+                    # variable across the datastore today, and this at least
+                    # lets us reference LAYERDIR without having to immediately
+                    # eval all our variables that use it.
+                    for key in data.dict:
+                        if key != "_data":
+                            value = data.getVar(key, False)
+                            if "${LAYERDIR}" in value:
+                                data.setVar(key, value.replace("${LAYERDIR}", layer))
+
                 bb.data.delVar('LAYERDIR', data)
 
             if not data.getVar("BBPATH", True):