@@ -94,7 +94,7 @@ def expandKeys(alterdata, readdata = None):
val = alterdata.getVar(key, False)
if val is not None:
bb.warn("Variable key %s (%s) replaces original key %s (%s)." % (key, val, ekey, newval))
- alterdata.renameVar(key, ekey)
+ alterdata.renameVar(key, ekey, recurse=False)
def inheritFromOS(d, savedenv, permitted):
"""Inherit variables from the initial environment."""
@@ -661,7 +661,7 @@ class DataSmart(MutableMapping):
def getVar(self, var, expand=True, noweakdefault=False, parsing=False):
return self.getVarFlag(var, "_content", expand, noweakdefault, parsing)
- def renameVar(self, key, newkey, **loginfo):
+ def renameVar(self, key, newkey, recurse=True, **loginfo):
"""
Rename the variable key to newkey
"""
@@ -693,7 +693,8 @@ class DataSmart(MutableMapping):
self.overridedata[newkey] = []
for (v, o) in self.overridedata[key]:
self.overridedata[newkey].append([v.replace(key, newkey), o])
- self.renameVar(v, v.replace(key, newkey))
+ if recurse:
+ self.renameVar(v, v.replace(key, newkey))
if ':' in newkey and val is None:
self._setvar_update_overrides(newkey, **loginfo)
@@ -406,6 +406,31 @@ class TestOverrides(unittest.TestCase):
bb.data.expandKeys(self.d)
self.assertEqual(self.d.getVar("VERSION"), "2")
+ # Test an :append whose override name is only resolved by key expansion
+ def test_append_in_expanded_override(self):
+ self.d.setVar("MACHINE", "qemux86")
+ self.d.setVar("PN", "gizmo")
+ self.d.setVar("OVERRIDES", "gizmo:pn-gizmo-qemux86")
+ self.d.setVar("TEST:${PN}", "base")
+ self.d.setVar("TEST:${PN}:append:pn-gizmo-${MACHINE}", " appended")
+ bb.data.expandKeys(self.d)
+ self.assertEqual(self.d.getVar("TEST"), "base appended")
+
+ # Test renaming to a key which is itself not expanded yet, as native.bbclass
+ # does. The dependent override keys must be left for expandKeys() to rename.
+ def test_rename_to_unexpanded_key_with_override(self):
+ self.d.setVar("BPN", "gizmo")
+ self.d.setVar("PN", "gizmo-native")
+ self.d.setVar("OVERRIDES", "class-target")
+ self.d.setVar("TEST:${PN}-lib", "base")
+ self.d.setVar("TEST:${PN}-lib:class-target", "target")
+ with LogRecord() as logs:
+ self.d.renameVar("TEST:${PN}-lib", "TEST:${BPN}-lib-native")
+ bb.data.expandKeys(self.d)
+ self.assertFalse(logContains("renameVar with equivalent keys", logs))
+ self.assertFalse(logContains("replaces original key", logs))
+ self.assertEqual(self.d.getVar("TEST:gizmo-lib-native"), "target")
+
def test_remove_with_override(self):
self.d.setVar("TEST:bar", "testvalue2")
self.d.setVar("TEST:some_val", "testvalue3 testvalue5")