diff options
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 17a642ee2d..3f2d42c1bb 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -72,10 +72,23 @@ class VariableParse: | |||
72 | self.references |= parser.references | 72 | self.references |= parser.references |
73 | self.execs |= parser.execs | 73 | self.execs |= parser.execs |
74 | 74 | ||
75 | value = utils.better_eval(codeobj, {"d": self.d}) | 75 | value = utils.better_eval(codeobj, DataDict(self.d)) |
76 | return str(value) | 76 | return str(value) |
77 | 77 | ||
78 | 78 | ||
79 | class DataDict(dict): | ||
80 | def __init__(self, metadata, **kwargs): | ||
81 | self.metadata = metadata | ||
82 | dict.__init__(self, **kwargs) | ||
83 | self['d'] = metadata | ||
84 | |||
85 | def __missing__(self, key): | ||
86 | value = self.metadata.getVar(key, True) | ||
87 | if value is None or self.metadata.getVarFlag(key, 'func'): | ||
88 | raise KeyError(key) | ||
89 | else: | ||
90 | return value | ||
91 | |||
79 | class DataSmart(MutableMapping): | 92 | class DataSmart(MutableMapping): |
80 | def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ): | 93 | def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ): |
81 | self.dict = {} | 94 | self.dict = {} |