aboutsummaryrefslogtreecommitdiffstats
path: root/bin/oe/data.py
diff options
context:
space:
mode:
authorChris Larson <clarson@kergoth.com>2003-07-09 17:06:49 +0000
committerChris Larson <clarson@kergoth.com>2003-07-09 17:06:49 +0000
commitb4aad2e554121fc0e16bdbe8ef8fb8b58e459ca5 (patch)
tree5d551b844d059611df02d1f712d86d3a2365d3df /bin/oe/data.py
parenta6a0f42a0d66e5fdb731b498cfcf01ce8a37ccad (diff)
downloadbitbake-b4aad2e554121fc0e16bdbe8ef8fb8b58e459ca5.tar.gz
Revamp our _prepend/_append handling to fix the major bug mentioned in the TODO
Diffstat (limited to 'bin/oe/data.py')
-rw-r--r--bin/oe/data.py78
1 files changed, 60 insertions, 18 deletions
diff --git a/bin/oe/data.py b/bin/oe/data.py
index 840123116..6c8bb7b69 100644
--- a/bin/oe/data.py
+++ b/bin/oe/data.py
@@ -3,7 +3,7 @@
# proposed new way of structuring environment data for the
# OpenEmbedded buildsystem
-from oe import debug
+from oe import debug, note
def init():
return {}
@@ -20,6 +20,24 @@ def initVar(var, d = _data):
def setVar(var, value, d = _data):
"""Set a variable to a given value"""
+ for v in ["_append", "_prepend", "_delete"]:
+ match = re.match('(?P<base>.*?)%s(_(?P<add>.*))?' % v, var)
+ if match:
+ base = match.group('base')
+ override = match.group('add')
+ # add is only set in the case of
+ # base_cmd_override, in which case we set
+ # a parameter as a conditional on the cmd.
+# if override:
+# note("base_cmd_override instance: %s%s_%s" % (base, v, override))
+# else:
+# note("base[_override]_cmd instance: %s%s" % (base, v))
+
+ l = getVarFlag(base, v, d) or []
+ l.append([value, override])
+ setVarFlag(base, v, l, d)
+ return
+
try:
d[var]["content"] = value
except KeyError:
@@ -56,6 +74,10 @@ def getVarFlag(var, flag, d = _data):
except KeyError:
return None
+def delVarFlag(var, flag, d = _data):
+ """Removes a given flag from the variable's flags"""
+ del d[var]["flags"][flag]
+
def setVarFlags(var, flags, d = _data):
"""Set the flags for a given variable"""
try:
@@ -71,6 +93,10 @@ def getVarFlags(var, d = _data):
except KeyError:
return None
+def delVarFlags(var, d = _data):
+ """Removes a variable's flags"""
+ del d[var]["flags"]
+
def getData(d = _data):
"""Returns the data object used"""
return d
@@ -302,29 +328,45 @@ def update_data(d = _data):
return
overrides = overrides.split(':')
- for s in d.keys():
+ def applyOverrides(var, d = _data):
+ overrides = string.split(getVar('OVERRIDES', d, 1) or "", ":") or []
+ val = getVar(var, d)
+ flags = getVarFlags(var, d)
for o in overrides:
- name = "%s_%s" % (s, o)
+ name = "%s_%s" % (var, o)
nameval = getVar(name, d)
if nameval:
- setVar(s, nameval, d)
- dodel.append(name)
+ nameflags = getVarFlags(name, d)
+ setVar(var, nameval, d)
+ setVarFlags(var, nameflags, d)
- # Handle line appends:
- name = "%s_append" % s
- nameval = getVar(name, d)
- if nameval:
- sval = getVar(s, d) or ""
- setVar(s, sval+nameval, d)
- dodel.append(name)
+ for s in d.keys():
+ applyOverrides(s, d)
+ sval = getVar(s, d) or ""
+ # Handle line appends:
+ for (a, o) in getVarFlag(s, '_append', d) or []:
+ try:
+ delVarFlag(s, '_append', d)
+ except KeyError:
+ pass
+ if o:
+ if not o in overrides:
+ break
+ sval+=a
+ setVar(s, sval, d)
+
# Handle line prepends
- name = "%s_prepend" % s
- nameval = getVar(name, d)
- if nameval:
- sval = getVar(s, d) or ""
- setVar(s, nameval+sval, d)
- dodel.append(name)
+ for (a, o) in getVarFlag(s, '_prepend', d) or []:
+ try:
+ delVarFlag(s, '_prepend', d)
+ except KeyError:
+ pass
+ if o:
+ if not o in overrides:
+ break
+ sval=a+sval
+ setVar(s, sval, d)
# Handle line deletions
name = "%s_delete" % s