diff options
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/cookerdata.py | 21 | ||||
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 36 | ||||
-rw-r--r-- | bitbake/lib/bb/ui/knotty.py | 2 |
3 files changed, 58 insertions, 1 deletions
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index e4d91486d1..8426ed786f 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py | |||
@@ -247,6 +247,9 @@ class CookerDataBuilder(object): | |||
247 | self.savedenv = bb.data.init() | 247 | self.savedenv = bb.data.init() |
248 | for k in cookercfg.env: | 248 | for k in cookercfg.env: |
249 | self.savedenv.setVar(k, cookercfg.env[k]) | 249 | self.savedenv.setVar(k, cookercfg.env[k]) |
250 | if k in bb.data_smart.bitbake_renamed_vars: | ||
251 | bb.error('Variable %s from the shell environment has been renamed to %s' % (k, bb.data_smart.bitbake_renamed_vars[k])) | ||
252 | bb.fatal("Exiting to allow enviroment variables to be corrected") | ||
250 | 253 | ||
251 | filtered_keys = bb.utils.approved_variables() | 254 | filtered_keys = bb.utils.approved_variables() |
252 | bb.data.inheritFromOS(self.basedata, self.savedenv, filtered_keys) | 255 | bb.data.inheritFromOS(self.basedata, self.savedenv, filtered_keys) |
@@ -307,6 +310,24 @@ class CookerDataBuilder(object): | |||
307 | logger.exception("Error parsing configuration files") | 310 | logger.exception("Error parsing configuration files") |
308 | raise bb.BBHandledException() | 311 | raise bb.BBHandledException() |
309 | 312 | ||
313 | |||
314 | # Handle obsolete variable names | ||
315 | d = self.data | ||
316 | renamedvars = d.getVarFlags('BB_RENAMED_VARIABLES') or {} | ||
317 | renamedvars.update(bb.data_smart.bitbake_renamed_vars) | ||
318 | issues = False | ||
319 | for v in renamedvars: | ||
320 | if d.getVar(v) != None or d.hasOverrides(v): | ||
321 | issues = True | ||
322 | history = d.varhistory.get_variable_refs(v) | ||
323 | for h in history: | ||
324 | for line in history[h]: | ||
325 | bb.erroronce('Variable %s has been renamed to %s (file: %s line: %s)' % (v, renamedvars[v], h, line)) | ||
326 | if not history: | ||
327 | bb.erroronce('Variable %s has been renamed to %s' % (v, renamedvars[v])) | ||
328 | if issues: | ||
329 | raise bb.BBHandledException() | ||
330 | |||
310 | # Create a copy so we can reset at a later date when UIs disconnect | 331 | # Create a copy so we can reset at a later date when UIs disconnect |
311 | self.origdata = self.data | 332 | self.origdata = self.data |
312 | self.data = bb.data.createCopy(self.origdata) | 333 | self.data = bb.data.createCopy(self.origdata) |
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index cb2d4b620f..01604ec36c 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -33,6 +33,9 @@ __expand_python_regexp__ = re.compile(r"\${@.+?}") | |||
33 | __whitespace_split__ = re.compile(r'(\s)') | 33 | __whitespace_split__ = re.compile(r'(\s)') |
34 | __override_regexp__ = re.compile(r'[a-z0-9]+') | 34 | __override_regexp__ = re.compile(r'[a-z0-9]+') |
35 | 35 | ||
36 | bitbake_renamed_vars = { | ||
37 | } | ||
38 | |||
36 | def infer_caller_details(loginfo, parent = False, varval = True): | 39 | def infer_caller_details(loginfo, parent = False, varval = True): |
37 | """Save the caller the trouble of specifying everything.""" | 40 | """Save the caller the trouble of specifying everything.""" |
38 | # Save effort. | 41 | # Save effort. |
@@ -336,6 +339,16 @@ class VariableHistory(object): | |||
336 | lines.append(line) | 339 | lines.append(line) |
337 | return lines | 340 | return lines |
338 | 341 | ||
342 | def get_variable_refs(self, var): | ||
343 | """Return a dict of file/line references""" | ||
344 | var_history = self.variable(var) | ||
345 | refs = {} | ||
346 | for event in var_history: | ||
347 | if event['file'] not in refs: | ||
348 | refs[event['file']] = [] | ||
349 | refs[event['file']].append(event['line']) | ||
350 | return refs | ||
351 | |||
339 | def get_variable_items_files(self, var): | 352 | def get_variable_items_files(self, var): |
340 | """ | 353 | """ |
341 | Use variable history to map items added to a list variable and | 354 | Use variable history to map items added to a list variable and |
@@ -377,6 +390,8 @@ class DataSmart(MutableMapping): | |||
377 | self.inchistory = IncludeHistory() | 390 | self.inchistory = IncludeHistory() |
378 | self.varhistory = VariableHistory(self) | 391 | self.varhistory = VariableHistory(self) |
379 | self._tracking = False | 392 | self._tracking = False |
393 | self._var_renames = {} | ||
394 | self._var_renames.update(bitbake_renamed_vars) | ||
380 | 395 | ||
381 | self.expand_cache = {} | 396 | self.expand_cache = {} |
382 | 397 | ||
@@ -491,6 +506,16 @@ class DataSmart(MutableMapping): | |||
491 | def hasOverrides(self, var): | 506 | def hasOverrides(self, var): |
492 | return var in self.overridedata | 507 | return var in self.overridedata |
493 | 508 | ||
509 | def _print_rename_error(self, var, loginfo): | ||
510 | info = "" | ||
511 | if "file" in loginfo: | ||
512 | info = " file: %s" % loginfo["file"] | ||
513 | if "line" in loginfo: | ||
514 | info += " line: %s" % loginfo["line"] | ||
515 | if info: | ||
516 | info = " (%s)" % info.strip() | ||
517 | bb.erroronce('Variable %s has been renamed to %s%s' % (var, self._var_renames[var], info)) | ||
518 | |||
494 | def setVar(self, var, value, **loginfo): | 519 | def setVar(self, var, value, **loginfo): |
495 | #print("var=" + str(var) + " val=" + str(value)) | 520 | #print("var=" + str(var) + " val=" + str(value)) |
496 | 521 | ||
@@ -502,6 +527,10 @@ class DataSmart(MutableMapping): | |||
502 | info += " line: %s" % loginfo["line"] | 527 | info += " line: %s" % loginfo["line"] |
503 | bb.fatal("Variable %s contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake." % info) | 528 | bb.fatal("Variable %s contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake." % info) |
504 | 529 | ||
530 | shortvar = var.split(":", 1)[0] | ||
531 | if shortvar in self._var_renames: | ||
532 | self._print_rename_error(shortvar, loginfo) | ||
533 | |||
505 | self.expand_cache = {} | 534 | self.expand_cache = {} |
506 | parsing=False | 535 | parsing=False |
507 | if 'parsing' in loginfo: | 536 | if 'parsing' in loginfo: |
@@ -687,6 +716,12 @@ class DataSmart(MutableMapping): | |||
687 | def setVarFlag(self, var, flag, value, **loginfo): | 716 | def setVarFlag(self, var, flag, value, **loginfo): |
688 | self.expand_cache = {} | 717 | self.expand_cache = {} |
689 | 718 | ||
719 | if var == "BB_RENAMED_VARIABLES": | ||
720 | self._var_renames[flag] = value | ||
721 | |||
722 | if var in self._var_renames: | ||
723 | self._print_rename_error(var, loginfo) | ||
724 | |||
690 | if 'op' not in loginfo: | 725 | if 'op' not in loginfo: |
691 | loginfo['op'] = "set" | 726 | loginfo['op'] = "set" |
692 | loginfo['flag'] = flag | 727 | loginfo['flag'] = flag |
@@ -926,6 +961,7 @@ class DataSmart(MutableMapping): | |||
926 | data.inchistory = self.inchistory.copy() | 961 | data.inchistory = self.inchistory.copy() |
927 | 962 | ||
928 | data._tracking = self._tracking | 963 | data._tracking = self._tracking |
964 | data._var_renames = self._var_renames | ||
929 | 965 | ||
930 | data.overrides = None | 966 | data.overrides = None |
931 | data.overridevars = copy.copy(self.overridevars) | 967 | data.overridevars = copy.copy(self.overridevars) |
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 8b98da1771..528b8a0760 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py | |||
@@ -25,7 +25,7 @@ from itertools import groupby | |||
25 | 25 | ||
26 | from bb.ui import uihelper | 26 | from bb.ui import uihelper |
27 | 27 | ||
28 | featureSet = [bb.cooker.CookerFeatures.SEND_SANITYEVENTS] | 28 | featureSet = [bb.cooker.CookerFeatures.SEND_SANITYEVENTS, bb.cooker.CookerFeatures.BASEDATASTORE_TRACKING] |
29 | 29 | ||
30 | logger = logging.getLogger("BitBake") | 30 | logger = logging.getLogger("BitBake") |
31 | interactive = sys.stdout.isatty() | 31 | interactive = sys.stdout.isatty() |