diff options
Diffstat (limited to 'bitbake')
-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): | |||
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 |