diff options
-rw-r--r-- | bitbake/lib/bb/data.py | 12 | ||||
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 27 |
2 files changed, 30 insertions, 9 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index e2700077c3..fde4cba6bb 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py @@ -307,6 +307,14 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): return newvalue return value + newvalue + def handle_remove(value, deps, removes, d): + for r in sorted(removes): + r2 = d.expandWithRefs(r, None) + value += "\n_remove of %s" % r + deps |= r2.references + deps = deps | (keys & r2.execs) + return value + if "vardepvalue" in varflags: value = varflags.get("vardepvalue") elif varflags.get("func"): @@ -327,6 +335,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 hasattr(parsedvar, "removes"): + value = handle_remove(value, deps, parsedvar.removes, d) if vardeps is None: parser.log.flush() if "prefuncs" in varflags: @@ -340,6 +350,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 hasattr(parser, "removes"): + value = handle_remove(value, deps, parser.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 4ad0567c9a..8c4c6a9a32 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py @@ -805,7 +805,7 @@ class DataSmart(MutableMapping): value = parser.value if value and flag == "_content" and local_var is not None and "_remove" in local_var and not parsing: - removes = [] + removes = {} self.need_overrides() for (r, o) in local_var["_remove"]: match = True @@ -814,14 +814,23 @@ class DataSmart(MutableMapping): if not o2 in self.overrides: match = False if match: - removes.extend(self.expand(r).split()) - - if removes: - filtered = filter(lambda v: v not in removes, - __whitespace_split__.split(value)) - value = "".join(filtered) - if parser: - parser.value = value + removes[r] = self.expand(r).split() + + if removes and parser: + parser.removes = set() + val = "" + for v in __whitespace_split__.split(parser.value): + skip = False + for r in removes: + if v in removes[r]: + parser.removes.add(r) + skip = True + if skip: + continue + val = val + v + parser.value = val + if expand: + value = parser.value if parser: self.expand_cache[cachename] = parser |