Move LAYERDIR expansion hack into DataSmart

(Bitbake rev: 40778a6e9e82c7ea4673a74fc19574430fa63e8d)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
Chris Larson 2010-12-17 12:15:48 -07:00 committed by Richard Purdie
parent 717f13d63c
commit d951aa40a0
2 changed files with 22 additions and 13 deletions

View File

@ -502,19 +502,7 @@ class BBCooker:
parselog.debug(2, "Adding layer %s", layer)
bb.data.setVar('LAYERDIR', layer, data)
data = _parse(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 value and "${LAYERDIR}" in value:
data.setVar(key, value.replace("${LAYERDIR}", layer))
data.expandVarref('LAYERDIR')
bb.data.delVar('LAYERDIR', data)

View File

@ -361,6 +361,27 @@ class DataSmart(MutableMapping):
return data
def expandVarref(self, variable, parents=False):
"""Find all references to variable in the data and expand it
in place, optionally descending to parent datastores."""
if parents:
keys = iter(self)
else:
keys = self.localkeys()
ref = '${%s}' % variable
value = self.getVar(variable, False)
for key in keys:
referrervalue = self.getVar(key, False)
if ref in referrervalue:
self.setVar(key, referrervalue.replace(ref, value))
def localkeys(self):
for key in self.dict:
if key != '_data':
yield key
def __iter__(self):
seen = set()
def _keys(d):