diff options
-rw-r--r-- | bitbake/lib/bb/data.py | 16 | ||||
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 7 |
2 files changed, 20 insertions, 3 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index 80a7879cb66..55ba7b13297 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py @@ -290,7 +290,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): return deps, value varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {} vardeps = varflags.get("vardeps") - value = d.getVarFlag(key, "_content", False) + value, removes = d.getVarFlag(key, "_content", False, retremoves=True) def handle_contains(value, contains, d): newvalue = "" @@ -309,6 +309,16 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): return newvalue return value + newvalue + def handle_remove(value, deps, expandedval, removes, d): + activeremoves = [] + for r in removes: + r2 = d.expandWithRefs(r, None) + if r2.value in expandedval.split(): + value += "\n_remove of %s(%s)" % (r, r2.value) + deps |= r2.references + deps = deps | (keys & r2.execs) + return value + if "vardepvalue" in varflags: value = varflags.get("vardepvalue") elif varflags.get("func"): @@ -328,6 +338,8 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): deps = deps | parsedvar.references deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) value = handle_contains(value, parsedvar.contains, d) + if removes: + value = handle_remove(value, deps, parser.value, removes, d) if vardeps is None: parser.log.flush() if "prefuncs" in varflags: @@ -341,6 +353,8 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): deps |= parser.references deps = deps | (keys & parser.execs) value = handle_contains(value, parser.contains, d) + if removes: + value = handle_remove(value, deps, parser.value, removes, d) if "vardepvalueexclude" in varflags: exclude = varflags.get("vardepvalueexclude") diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 5f6fd5d3752..1b8a357bcac 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py @@ -720,7 +720,7 @@ class DataSmart(MutableMapping): self.dict["__exportlist"]["_content"] = set() self.dict["__exportlist"]["_content"].add(var) - def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False): + def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False, retremoves=False): local_var, overridedata = self._findVar(var) value = None if flag == "_content" and overridedata is not None and not parsing: @@ -794,8 +794,8 @@ class DataSmart(MutableMapping): cachename = var + "[" + flag + "]" value = self.expand(value, cachename) + removes = [] if value and flag == "_content" and local_var is not None and "_remove" in local_var: - removes = [] self.need_overrides() for (r, o) in local_var["_remove"]: match = True @@ -814,6 +814,9 @@ class DataSmart(MutableMapping): # We need to ensure the expand cache has the correct value # flag == "_content" here self.expand_cache[var].value = value + + if retremoves: + return value, removes return value def delVarFlag(self, var, flag, **loginfo): |