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