diff options
| -rw-r--r-- | bitbake/lib/bb/data_smart.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index b433489a84..77d0c61da0 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
| @@ -298,6 +298,7 @@ class VariableHistory(object): | |||
| 298 | class DataSmart(MutableMapping): | 298 | class DataSmart(MutableMapping): |
| 299 | def __init__(self, special = None, seen = None ): | 299 | def __init__(self, special = None, seen = None ): |
| 300 | self.dict = {} | 300 | self.dict = {} |
| 301 | self.overrides = [] | ||
| 301 | 302 | ||
| 302 | if special is None: | 303 | if special is None: |
| 303 | special = COWDictBase.copy() | 304 | special = COWDictBase.copy() |
| @@ -354,11 +355,13 @@ class DataSmart(MutableMapping): | |||
| 354 | def expand(self, s, varname = None): | 355 | def expand(self, s, varname = None): |
| 355 | return self.expandWithRefs(s, varname).value | 356 | return self.expandWithRefs(s, varname).value |
| 356 | 357 | ||
| 357 | |||
| 358 | def finalize(self, parent = False): | 358 | def finalize(self, parent = False): |
| 359 | return | ||
| 360 | |||
| 361 | def internal_finalize(self, parent = False): | ||
| 359 | """Performs final steps upon the datastore, including application of overrides""" | 362 | """Performs final steps upon the datastore, including application of overrides""" |
| 360 | 363 | ||
| 361 | overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] | 364 | self.overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] |
| 362 | finalize_caller = { | 365 | finalize_caller = { |
| 363 | 'op': 'finalize', | 366 | 'op': 'finalize', |
| 364 | } | 367 | } |
| @@ -383,7 +386,7 @@ class DataSmart(MutableMapping): | |||
| 383 | # We only want to report finalization once per variable overridden. | 386 | # We only want to report finalization once per variable overridden. |
| 384 | finalizes_reported = {} | 387 | finalizes_reported = {} |
| 385 | 388 | ||
| 386 | for o in overrides: | 389 | for o in self.overrides: |
| 387 | # calculate '_'+override | 390 | # calculate '_'+override |
| 388 | l = len(o) + 1 | 391 | l = len(o) + 1 |
| 389 | 392 | ||
| @@ -417,12 +420,15 @@ class DataSmart(MutableMapping): | |||
| 417 | if op in self._special_values: | 420 | if op in self._special_values: |
| 418 | appends = self._special_values[op] or [] | 421 | appends = self._special_values[op] or [] |
| 419 | for append in appends: | 422 | for append in appends: |
| 423 | self.handle_special_values(append, op) | ||
| 424 | |||
| 425 | def handle_special_values(self, append, op): | ||
| 420 | keep = [] | 426 | keep = [] |
| 421 | for (a, o) in self.getVarFlag(append, op) or []: | 427 | for (a, o) in self.getVarFlag(append, op) or []: |
| 422 | match = True | 428 | match = True |
| 423 | if o: | 429 | if o: |
| 424 | for o2 in o.split("_"): | 430 | for o2 in o.split("_"): |
| 425 | if not o2 in overrides: | 431 | if not o2 in self.overrides: |
| 426 | match = False | 432 | match = False |
| 427 | if not match: | 433 | if not match: |
| 428 | keep.append((a ,o)) | 434 | keep.append((a ,o)) |
| @@ -502,6 +508,7 @@ class DataSmart(MutableMapping): | |||
| 502 | except KeyError: | 508 | except KeyError: |
| 503 | self._special_values[keyword] = set() | 509 | self._special_values[keyword] = set() |
| 504 | self._special_values[keyword].add(base) | 510 | self._special_values[keyword].add(base) |
| 511 | self.handle_special_values(base, keyword) | ||
| 505 | 512 | ||
| 506 | return | 513 | return |
| 507 | 514 | ||
| @@ -521,6 +528,9 @@ class DataSmart(MutableMapping): | |||
| 521 | self.dict[var]["_content"] = value | 528 | self.dict[var]["_content"] = value |
| 522 | self.varhistory.record(**loginfo) | 529 | self.varhistory.record(**loginfo) |
| 523 | 530 | ||
| 531 | if var == "OVERRIDES": | ||
| 532 | self.internal_finalize(True) | ||
| 533 | |||
| 524 | def _setvar_update_overrides(self, var): | 534 | def _setvar_update_overrides(self, var): |
| 525 | # aka pay the cookie monster | 535 | # aka pay the cookie monster |
| 526 | override = var[var.rfind('_')+1:] | 536 | override = var[var.rfind('_')+1:] |
| @@ -733,6 +743,7 @@ class DataSmart(MutableMapping): | |||
| 733 | # we really want this to be a DataSmart... | 743 | # we really want this to be a DataSmart... |
| 734 | data = DataSmart(seen=self._seen_overrides.copy(), special=self._special_values.copy()) | 744 | data = DataSmart(seen=self._seen_overrides.copy(), special=self._special_values.copy()) |
| 735 | data.dict["_data"] = self.dict | 745 | data.dict["_data"] = self.dict |
| 746 | data.overrides = copy.copy(self.overrides) | ||
| 736 | data.varhistory = self.varhistory.copy() | 747 | data.varhistory = self.varhistory.copy() |
| 737 | data.varhistory.datasmart = data | 748 | data.varhistory.datasmart = data |
| 738 | data.inchistory = self.inchistory.copy() | 749 | data.inchistory = self.inchistory.copy() |
