summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/data.py27
-rw-r--r--bitbake/lib/bb/siggen.py3
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
277def build_dependencies(key, keys, shelldeps, d): 277def 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
330def inherits_class(klass, d): 335def 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)