diff options
-rw-r--r-- | bitbake/lib/bb/data.py | 27 | ||||
-rw-r--r-- | bitbake/lib/bb/siggen.py | 3 |
2 files changed, 17 insertions, 13 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index ac0d8809cc..d5d992934d 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py | |||
@@ -274,24 +274,27 @@ def update_data(d): | |||
274 | """Performs final steps upon the datastore, including application of overrides""" | 274 | """Performs final steps upon the datastore, including application of overrides""" |
275 | d.finalize() | 275 | d.finalize() |
276 | 276 | ||
277 | def build_dependencies(key, keys, shelldeps, d): | 277 | def build_dependencies(key, keys, shelldeps, vardepvals, d): |
278 | deps = set() | 278 | deps = set() |
279 | try: | 279 | try: |
280 | if d.getVarFlag(key, "func"): | 280 | value = d.getVar(key, False) |
281 | if key in vardepvals: | ||
282 | value = d.getVarFlag(key, "vardepvalue", True) | ||
283 | elif d.getVarFlag(key, "func"): | ||
281 | if d.getVarFlag(key, "python"): | 284 | if d.getVarFlag(key, "python"): |
282 | parsedvar = d.expandWithRefs(d.getVar(key, False), key) | 285 | parsedvar = d.expandWithRefs(value, key) |
283 | parser = bb.codeparser.PythonParser() | 286 | parser = bb.codeparser.PythonParser(key, logger) |
284 | parser.parse_python(parsedvar.value) | 287 | parser.parse_python(parsedvar.value) |
285 | deps = deps | parser.references | 288 | deps = deps | parser.references |
286 | else: | 289 | else: |
287 | parsedvar = d.expandWithRefs(d.getVar(key, False), key) | 290 | parsedvar = d.expandWithRefs(value, key) |
288 | parser = bb.codeparser.ShellParser() | 291 | parser = bb.codeparser.ShellParser(key, logger) |
289 | parser.parse_shell(parsedvar.value) | 292 | parser.parse_shell(parsedvar.value) |
290 | deps = deps | shelldeps | 293 | deps = deps | shelldeps |
291 | deps = deps | parsedvar.references | 294 | deps = deps | parsedvar.references |
292 | deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) | 295 | deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) |
293 | else: | 296 | else: |
294 | parser = d.expandWithRefs(d.getVar(key, False), key) | 297 | parser = d.expandWithRefs(value, key) |
295 | deps |= parser.references | 298 | deps |= parser.references |
296 | deps = deps | (keys & parser.execs) | 299 | deps = deps | (keys & parser.execs) |
297 | deps |= set((d.getVarFlag(key, "vardeps", True) or "").split()) | 300 | deps |= set((d.getVarFlag(key, "vardeps", True) or "").split()) |
@@ -299,7 +302,7 @@ def build_dependencies(key, keys, shelldeps, d): | |||
299 | except: | 302 | except: |
300 | bb.note("Error expanding variable %s" % key) | 303 | bb.note("Error expanding variable %s" % key) |
301 | raise | 304 | raise |
302 | return deps | 305 | return deps, value |
303 | #bb.note("Variable %s references %s and calls %s" % (key, str(deps), str(execs))) | 306 | #bb.note("Variable %s references %s and calls %s" % (key, str(deps), str(execs))) |
304 | #d.setVarFlag(key, "vardeps", deps) | 307 | #d.setVarFlag(key, "vardeps", deps) |
305 | 308 | ||
@@ -307,12 +310,14 @@ def generate_dependencies(d): | |||
307 | 310 | ||
308 | keys = set(key for key in d.keys() if not key.startswith("__")) | 311 | keys = set(key for key in d.keys() if not key.startswith("__")) |
309 | shelldeps = set(key for key in keys if d.getVarFlag(key, "export") and not d.getVarFlag(key, "unexport")) | 312 | shelldeps = set(key for key in keys if d.getVarFlag(key, "export") and not d.getVarFlag(key, "unexport")) |
313 | vardepvals = set(key for key in keys if d.getVarFlag(key, "vardepvalue")) | ||
310 | 314 | ||
311 | deps = {} | 315 | deps = {} |
316 | values = {} | ||
312 | 317 | ||
313 | tasklist = bb.data.getVar('__BBTASKS', d) or [] | 318 | tasklist = bb.data.getVar('__BBTASKS', d) or [] |
314 | for task in tasklist: | 319 | for task in tasklist: |
315 | deps[task] = build_dependencies(task, keys, shelldeps, d) | 320 | deps[task], values[task] = build_dependencies(task, keys, shelldeps, vardepvals, d) |
316 | newdeps = deps[task] | 321 | newdeps = deps[task] |
317 | seen = set() | 322 | seen = set() |
318 | while newdeps: | 323 | while newdeps: |
@@ -321,11 +326,11 @@ def generate_dependencies(d): | |||
321 | newdeps = set() | 326 | newdeps = set() |
322 | for dep in nextdeps: | 327 | for dep in nextdeps: |
323 | if dep not in deps: | 328 | if dep not in deps: |
324 | deps[dep] = build_dependencies(dep, keys, shelldeps, d) | 329 | deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, vardepvals, d) |
325 | newdeps |= deps[dep] | 330 | newdeps |= deps[dep] |
326 | newdeps -= seen | 331 | newdeps -= seen |
327 | #print "For %s: %s" % (task, str(taskdeps[task])) | 332 | #print "For %s: %s" % (task, str(taskdeps[task])) |
328 | return tasklist, deps | 333 | return tasklist, deps, values |
329 | 334 | ||
330 | def inherits_class(klass, d): | 335 | def inherits_class(klass, d): |
331 | val = getVar('__inherit_cache', d) or [] | 336 | 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) |