diff options
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/data.py | 23 | ||||
-rw-r--r-- | bitbake/lib/bb/siggen.py | 3 |
2 files changed, 15 insertions, 11 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index 10188f3807..7c1533cfa9 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py | |||
@@ -275,18 +275,21 @@ def update_data(d): | |||
275 | """Performs final steps upon the datastore, including application of overrides""" | 275 | """Performs final steps upon the datastore, including application of overrides""" |
276 | d.finalize() | 276 | d.finalize() |
277 | 277 | ||
278 | def build_dependencies(key, keys, shelldeps, d): | 278 | def build_dependencies(key, keys, shelldeps, vardepvals, d): |
279 | deps = set() | 279 | deps = set() |
280 | vardeps = d.getVarFlag(key, "vardeps", True) | 280 | vardeps = d.getVarFlag(key, "vardeps", True) |
281 | try: | 281 | try: |
282 | if d.getVarFlag(key, "func"): | 282 | value = d.getVar(key, False) |
283 | if key in vardepvals: | ||
284 | value = d.getVarFlag(key, "vardepvalue", True) | ||
285 | elif d.getVarFlag(key, "func"): | ||
283 | if d.getVarFlag(key, "python"): | 286 | if d.getVarFlag(key, "python"): |
284 | parsedvar = d.expandWithRefs(d.getVar(key, False), key) | 287 | parsedvar = d.expandWithRefs(value, key) |
285 | parser = bb.codeparser.PythonParser(key, logger) | 288 | parser = bb.codeparser.PythonParser(key, logger) |
286 | parser.parse_python(parsedvar.value) | 289 | parser.parse_python(parsedvar.value) |
287 | deps = deps | parser.references | 290 | deps = deps | parser.references |
288 | else: | 291 | else: |
289 | parsedvar = d.expandWithRefs(d.getVar(key, False), key) | 292 | parsedvar = d.expandWithRefs(value, key) |
290 | parser = bb.codeparser.ShellParser(key, logger) | 293 | parser = bb.codeparser.ShellParser(key, logger) |
291 | parser.parse_shell(parsedvar.value) | 294 | parser.parse_shell(parsedvar.value) |
292 | deps = deps | shelldeps | 295 | deps = deps | shelldeps |
@@ -295,7 +298,7 @@ def build_dependencies(key, keys, shelldeps, d): | |||
295 | deps = deps | parsedvar.references | 298 | deps = deps | parsedvar.references |
296 | deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) | 299 | deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) |
297 | else: | 300 | else: |
298 | parser = d.expandWithRefs(d.getVar(key, False), key) | 301 | parser = d.expandWithRefs(value, key) |
299 | deps |= parser.references | 302 | deps |= parser.references |
300 | deps = deps | (keys & parser.execs) | 303 | deps = deps | (keys & parser.execs) |
301 | deps |= set((vardeps or "").split()) | 304 | deps |= set((vardeps or "").split()) |
@@ -303,7 +306,7 @@ def build_dependencies(key, keys, shelldeps, d): | |||
303 | except: | 306 | except: |
304 | bb.note("Error expanding variable %s" % key) | 307 | bb.note("Error expanding variable %s" % key) |
305 | raise | 308 | raise |
306 | return deps | 309 | return deps, value |
307 | #bb.note("Variable %s references %s and calls %s" % (key, str(deps), str(execs))) | 310 | #bb.note("Variable %s references %s and calls %s" % (key, str(deps), str(execs))) |
308 | #d.setVarFlag(key, "vardeps", deps) | 311 | #d.setVarFlag(key, "vardeps", deps) |
309 | 312 | ||
@@ -311,12 +314,14 @@ def generate_dependencies(d): | |||
311 | 314 | ||
312 | keys = set(key for key in d.keys() if not key.startswith("__")) | 315 | keys = set(key for key in d.keys() if not key.startswith("__")) |
313 | shelldeps = set(key for key in keys if d.getVarFlag(key, "export") and not d.getVarFlag(key, "unexport")) | 316 | shelldeps = set(key for key in keys if d.getVarFlag(key, "export") and not d.getVarFlag(key, "unexport")) |
317 | vardepvals = set(key for key in keys if d.getVarFlag(key, "vardepvalue")) | ||
314 | 318 | ||
315 | deps = {} | 319 | deps = {} |
320 | values = {} | ||
316 | 321 | ||
317 | tasklist = bb.data.getVar('__BBTASKS', d) or [] | 322 | tasklist = bb.data.getVar('__BBTASKS', d) or [] |
318 | for task in tasklist: | 323 | for task in tasklist: |
319 | deps[task] = build_dependencies(task, keys, shelldeps, d) | 324 | deps[task], values[task] = build_dependencies(task, keys, shelldeps, vardepvals, d) |
320 | newdeps = deps[task] | 325 | newdeps = deps[task] |
321 | seen = set() | 326 | seen = set() |
322 | while newdeps: | 327 | while newdeps: |
@@ -325,11 +330,11 @@ def generate_dependencies(d): | |||
325 | newdeps = set() | 330 | newdeps = set() |
326 | for dep in nextdeps: | 331 | for dep in nextdeps: |
327 | if dep not in deps: | 332 | if dep not in deps: |
328 | deps[dep] = build_dependencies(dep, keys, shelldeps, d) | 333 | deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, vardepvals, d) |
329 | newdeps |= deps[dep] | 334 | newdeps |= deps[dep] |
330 | newdeps -= seen | 335 | newdeps -= seen |
331 | #print "For %s: %s" % (task, str(taskdeps[task])) | 336 | #print "For %s: %s" % (task, str(taskdeps[task])) |
332 | return tasklist, deps | 337 | return tasklist, deps, values |
333 | 338 | ||
334 | def inherits_class(klass, d): | 339 | def inherits_class(klass, d): |
335 | val = getVar('__inherit_cache', d) or [] | 340 | val = getVar('__inherit_cache', d) or [] |
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index 9231291b43..758074287d 100644 --- a/bitbake/lib/bb/siggen.py +++ b/bitbake/lib/bb/siggen.py | |||
@@ -72,11 +72,10 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
72 | 72 | ||
73 | def _build_data(self, fn, d): | 73 | def _build_data(self, fn, d): |
74 | 74 | ||
75 | tasklist, gendeps = bb.data.generate_dependencies(d) | 75 | tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d) |
76 | 76 | ||
77 | taskdeps = {} | 77 | taskdeps = {} |
78 | basehash = {} | 78 | basehash = {} |
79 | lookupcache = {} | ||
80 | 79 | ||
81 | for task in tasklist: | 80 | for task in tasklist: |
82 | data = d.getVar(task, False) | 81 | data = d.getVar(task, False) |