summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/data.py16
-rw-r--r--bitbake/lib/bb/data_smart.py7
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):