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): """Performs final steps upon the datastore, including application of overrides""" d.finalize() -def build_dependencies(key, keys, shelldeps, d): +def build_dependencies(key, keys, shelldeps, vardepvals, d): deps = set() try: - if d.getVarFlag(key, "func"): + value = d.getVar(key, False) + if key in vardepvals: + value = d.getVarFlag(key, "vardepvalue", True) + elif d.getVarFlag(key, "func"): if d.getVarFlag(key, "python"): - parsedvar = d.expandWithRefs(d.getVar(key, False), key) - parser = bb.codeparser.PythonParser() + parsedvar = d.expandWithRefs(value, key) + parser = bb.codeparser.PythonParser(key, logger) parser.parse_python(parsedvar.value) deps = deps | parser.references else: - parsedvar = d.expandWithRefs(d.getVar(key, False), key) - parser = bb.codeparser.ShellParser() + parsedvar = d.expandWithRefs(value, key) + parser = bb.codeparser.ShellParser(key, logger) parser.parse_shell(parsedvar.value) deps = deps | shelldeps deps = deps | parsedvar.references deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) else: - parser = d.expandWithRefs(d.getVar(key, False), key) + parser = d.expandWithRefs(value, key) deps |= parser.references deps = deps | (keys & parser.execs) deps |= set((d.getVarFlag(key, "vardeps", True) or "").split()) @@ -299,7 +302,7 @@ def build_dependencies(key, keys, shelldeps, d): except: bb.note("Error expanding variable %s" % key) raise - return deps + return deps, value #bb.note("Variable %s references %s and calls %s" % (key, str(deps), str(execs))) #d.setVarFlag(key, "vardeps", deps) @@ -307,12 +310,14 @@ def generate_dependencies(d): keys = set(key for key in d.keys() if not key.startswith("__")) shelldeps = set(key for key in keys if d.getVarFlag(key, "export") and not d.getVarFlag(key, "unexport")) + vardepvals = set(key for key in keys if d.getVarFlag(key, "vardepvalue")) deps = {} + values = {} tasklist = bb.data.getVar('__BBTASKS', d) or [] for task in tasklist: - deps[task] = build_dependencies(task, keys, shelldeps, d) + deps[task], values[task] = build_dependencies(task, keys, shelldeps, vardepvals, d) newdeps = deps[task] seen = set() while newdeps: @@ -321,11 +326,11 @@ def generate_dependencies(d): newdeps = set() for dep in nextdeps: if dep not in deps: - deps[dep] = build_dependencies(dep, keys, shelldeps, d) + deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, vardepvals, d) newdeps |= deps[dep] newdeps -= seen #print "For %s: %s" % (task, str(taskdeps[task])) - return tasklist, deps + return tasklist, deps, values def inherits_class(klass, d): 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): def _build_data(self, fn, d): - tasklist, gendeps = bb.data.generate_dependencies(d) + tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d) taskdeps = {} basehash = {} - lookupcache = {} for task in tasklist: data = d.getVar(task, False)