summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib')
-rw-r--r--bitbake/lib/bb/data.py11
-rw-r--r--bitbake/lib/bb/data_smart.py18
2 files changed, 18 insertions, 11 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index 80a7879cb6..e2700077c3 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -283,14 +283,12 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
283 try: 283 try:
284 if key[-1] == ']': 284 if key[-1] == ']':
285 vf = key[:-1].split('[') 285 vf = key[:-1].split('[')
286 value = d.getVarFlag(vf[0], vf[1], False) 286 value, parser = d.getVarFlag(vf[0], vf[1], False, retparser=True)
287 parser = d.expandWithRefs(value, key)
288 deps |= parser.references 287 deps |= parser.references
289 deps = deps | (keys & parser.execs) 288 deps = deps | (keys & parser.execs)
290 return deps, value 289 return deps, value
291 varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {} 290 varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {}
292 vardeps = varflags.get("vardeps") 291 vardeps = varflags.get("vardeps")
293 value = d.getVarFlag(key, "_content", False)
294 292
295 def handle_contains(value, contains, d): 293 def handle_contains(value, contains, d):
296 newvalue = "" 294 newvalue = ""
@@ -310,9 +308,10 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
310 return value + newvalue 308 return value + newvalue
311 309
312 if "vardepvalue" in varflags: 310 if "vardepvalue" in varflags:
313 value = varflags.get("vardepvalue") 311 value = varflags.get("vardepvalue")
314 elif varflags.get("func"): 312 elif varflags.get("func"):
315 if varflags.get("python"): 313 if varflags.get("python"):
314 value = d.getVarFlag(key, "_content", False)
316 parser = bb.codeparser.PythonParser(key, logger) 315 parser = bb.codeparser.PythonParser(key, logger)
317 if value and "\t" in value: 316 if value and "\t" in value:
318 logger.warning("Variable %s contains tabs, please remove these (%s)" % (key, d.getVar("FILE"))) 317 logger.warning("Variable %s contains tabs, please remove these (%s)" % (key, d.getVar("FILE")))
@@ -321,7 +320,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
321 deps = deps | (keys & parser.execs) 320 deps = deps | (keys & parser.execs)
322 value = handle_contains(value, parser.contains, d) 321 value = handle_contains(value, parser.contains, d)
323 else: 322 else:
324 parsedvar = d.expandWithRefs(value, key) 323 value, parsedvar = d.getVarFlag(key, "_content", False, retparser=True)
325 parser = bb.codeparser.ShellParser(key, logger) 324 parser = bb.codeparser.ShellParser(key, logger)
326 parser.parse_shell(parsedvar.value) 325 parser.parse_shell(parsedvar.value)
327 deps = deps | shelldeps 326 deps = deps | shelldeps
@@ -337,7 +336,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
337 if "exports" in varflags: 336 if "exports" in varflags:
338 deps = deps | set(varflags["exports"].split()) 337 deps = deps | set(varflags["exports"].split())
339 else: 338 else:
340 parser = d.expandWithRefs(value, key) 339 value, parser = d.getVarFlag(key, "_content", False, retparser=True)
341 deps |= parser.references 340 deps |= parser.references
342 deps = deps | (keys & parser.execs) 341 deps = deps | (keys & parser.execs)
343 value = handle_contains(value, parser.contains, d) 342 value = handle_contains(value, parser.contains, d)
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
index ecc71bd644..4ad0567c9a 100644
--- a/bitbake/lib/bb/data_smart.py
+++ b/bitbake/lib/bb/data_smart.py
@@ -722,7 +722,7 @@ class DataSmart(MutableMapping):
722 self.dict["__exportlist"]["_content"] = set() 722 self.dict["__exportlist"]["_content"] = set()
723 self.dict["__exportlist"]["_content"].add(var) 723 self.dict["__exportlist"]["_content"].add(var)
724 724
725 def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False): 725 def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False, retparser=False):
726 if flag == "_content": 726 if flag == "_content":
727 cachename = var 727 cachename = var
728 else: 728 else:
@@ -798,9 +798,11 @@ class DataSmart(MutableMapping):
798 if match: 798 if match:
799 value = r + value 799 value = r + value
800 800
801 parser = None
802 if expand or retparser:
803 parser = self.expandWithRefs(value, cachename)
801 if expand: 804 if expand:
802 self.expand_cache[cachename] = self.expandWithRefs(value, cachename) 805 value = parser.value
803 value = self.expand_cache[cachename].value
804 806
805 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:
806 removes = [] 808 removes = []
@@ -818,8 +820,14 @@ class DataSmart(MutableMapping):
818 filtered = filter(lambda v: v not in removes, 820 filtered = filter(lambda v: v not in removes,
819 __whitespace_split__.split(value)) 821 __whitespace_split__.split(value))
820 value = "".join(filtered) 822 value = "".join(filtered)
821 if expand and cachename in self.expand_cache: 823 if parser:
822 self.expand_cache[cachename].value = value 824 parser.value = value
825
826 if parser:
827 self.expand_cache[cachename] = parser
828
829 if retparser:
830 return value, parser
823 831
824 return value 832 return value
825 833