summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/data.py12
-rw-r--r--bitbake/lib/bb/data_smart.py27
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):
307 return newvalue 307 return newvalue
308 return value + newvalue 308 return value + newvalue
309 309
310 def handle_remove(value, deps, removes, d):
311 for r in sorted(removes):
312 r2 = d.expandWithRefs(r, None)
313 value += "\n_remove of %s" % r
314 deps |= r2.references
315 deps = deps | (keys & r2.execs)
316 return value
317
310 if "vardepvalue" in varflags: 318 if "vardepvalue" in varflags:
311 value = varflags.get("vardepvalue") 319 value = varflags.get("vardepvalue")
312 elif varflags.get("func"): 320 elif varflags.get("func"):
@@ -327,6 +335,8 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
327 deps = deps | parsedvar.references 335 deps = deps | parsedvar.references
328 deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) 336 deps = deps | (keys & parser.execs) | (keys & parsedvar.execs)
329 value = handle_contains(value, parsedvar.contains, d) 337 value = handle_contains(value, parsedvar.contains, d)
338 if hasattr(parsedvar, "removes"):
339 value = handle_remove(value, deps, parsedvar.removes, d)
330 if vardeps is None: 340 if vardeps is None:
331 parser.log.flush() 341 parser.log.flush()
332 if "prefuncs" in varflags: 342 if "prefuncs" in varflags:
@@ -340,6 +350,8 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
340 deps |= parser.references 350 deps |= parser.references
341 deps = deps | (keys & parser.execs) 351 deps = deps | (keys & parser.execs)
342 value = handle_contains(value, parser.contains, d) 352 value = handle_contains(value, parser.contains, d)
353 if hasattr(parser, "removes"):
354 value = handle_remove(value, deps, parser.removes, d)
343 355
344 if "vardepvalueexclude" in varflags: 356 if "vardepvalueexclude" in varflags:
345 exclude = varflags.get("vardepvalueexclude") 357 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):
805 value = parser.value 805 value = parser.value
806 806
807 if value and flag == "_content" and local_var is not None and "_remove" in local_var and not parsing: 807 if value and flag == "_content" and local_var is not None and "_remove" in local_var and not parsing:
808 removes = [] 808 removes = {}
809 self.need_overrides() 809 self.need_overrides()
810 for (r, o) in local_var["_remove"]: 810 for (r, o) in local_var["_remove"]:
811 match = True 811 match = True
@@ -814,14 +814,23 @@ class DataSmart(MutableMapping):
814 if not o2 in self.overrides: 814 if not o2 in self.overrides:
815 match = False 815 match = False
816 if match: 816 if match:
817 removes.extend(self.expand(r).split()) 817 removes[r] = self.expand(r).split()
818 818
819 if removes: 819 if removes and parser:
820 filtered = filter(lambda v: v not in removes, 820 parser.removes = set()
821 __whitespace_split__.split(value)) 821 val = ""
822 value = "".join(filtered) 822 for v in __whitespace_split__.split(parser.value):
823 if parser: 823 skip = False
824 parser.value = value 824 for r in removes:
825 if v in removes[r]:
826 parser.removes.add(r)
827 skip = True
828 if skip:
829 continue
830 val = val + v
831 parser.value = val
832 if expand:
833 value = parser.value
825 834
826 if parser: 835 if parser:
827 self.expand_cache[cachename] = parser 836 self.expand_cache[cachename] = parser