summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/data.py23
-rw-r--r--bitbake/lib/bb/siggen.py3
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
278def build_dependencies(key, keys, shelldeps, d): 278def 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
334def inherits_class(klass, d): 339def 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)