diff options
Diffstat (limited to 'bitbake/lib/bb/parse/ast.py')
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 60 |
1 files changed, 22 insertions, 38 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index 59aa44bee..dae2e1115 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py @@ -21,8 +21,11 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +from __future__ import absolute_import +from future_builtins import filter import bb, re, string -from itertools import chain +from bb import methodpool +import itertools __word__ = re.compile(r"\S+") __parsed_methods__ = bb.methodpool.get_parsed_dict() @@ -30,7 +33,8 @@ _bbversions_re = re.compile(r"\[(?P<from>[0-9]+)-(?P<to>[0-9]+)\]") class StatementGroup(list): def eval(self, data): - map(lambda x: x.eval(data), self) + for statement in self: + statement.eval(data) class AstNode(object): pass @@ -103,7 +107,6 @@ class DataNode(AstNode): val = groupd["value"] if 'flag' in groupd and groupd['flag'] != None: - bb.msg.debug(3, bb.msg.domain.Parsing, "setVarFlag(%s, %s, %s, data)" % (key, groupd['flag'], val)) bb.data.setVarFlag(key, groupd['flag'], val, data) elif groupd["lazyques"]: assigned = bb.data.getVar("__lazy_assigned", data) or [] @@ -143,7 +146,7 @@ class PythonMethodNode(AstNode): # Note we will add root to parsedmethods after having parse # 'this' file. This means we will not parse methods from # bb classes twice - if not self.root in __parsed_methods__: + if not bb.methodpool.parsed_module(self.root): text = '\n'.join(self.body) bb.methodpool.insert_method(self.root, text, self.fn) @@ -254,7 +257,7 @@ class InheritNode(AstNode): def eval(self, data): bb.parse.BBHandler.inherit(self.n, data) - + def handleInclude(statements, m, fn, lineno, force): statements.append(IncludeNode(m.group(1), fn, lineno, force)) @@ -293,7 +296,7 @@ def handleInherit(statements, m): n = __word__.findall(files) statements.append(InheritNode(m.group(1))) -def finalise(fn, d): +def finalize(fn, d): for lazykey in bb.data.getVar("__lazy_assigned", d) or (): if bb.data.getVar(lazykey, d) is None: val = bb.data.getVarFlag(lazykey, "defaultval", d) @@ -301,35 +304,16 @@ def finalise(fn, d): bb.data.expandKeys(d) bb.data.update_data(d) - anonqueue = bb.data.getVar("__anonqueue", d, 1) or [] - body = [x['content'] for x in anonqueue] - flag = { 'python' : 1, 'func' : 1 } - bb.data.setVar("__anonfunc", "\n".join(body), d) - bb.data.setVarFlags("__anonfunc", flag, d) - from bb import build - try: - t = bb.data.getVar('T', d) - bb.data.setVar('T', '${TMPDIR}/anonfunc/', d) - anonfuncs = bb.data.getVar('__BBANONFUNCS', d) or [] - code = "" - for f in anonfuncs: - code = code + " %s(d)\n" % f - bb.data.setVar("__anonfunc", code, d) - build.exec_func("__anonfunc", d) - bb.data.delVar('T', d) - if t: - bb.data.setVar('T', t, d) - except Exception, e: - bb.msg.debug(1, bb.msg.domain.Parsing, "Exception when executing anonymous function: %s" % e) - raise - bb.data.delVar("__anonqueue", d) - bb.data.delVar("__anonfunc", d) + code = [] + for funcname in bb.data.getVar("__BBANONFUNCS", d) or []: + code.append("%s(d)" % funcname) + bb.utils.simple_exec("\n".join(code), {"d": d}) bb.data.update_data(d) - all_handlers = {} + all_handlers = {} for var in bb.data.getVar('__BBHANDLERS', d) or []: # try to add the handler - handler = bb.data.getVar(var,d) + handler = bb.data.getVar(var, d) bb.event.register(var, handler) tasklist = bb.data.getVar('__BBTASKS', d) or [] @@ -360,7 +344,7 @@ def _expand_versions(versions): versions = iter(versions) while True: try: - version = versions.next() + version = next(versions) except StopIteration: break @@ -370,14 +354,14 @@ def _expand_versions(versions): else: newversions = expand_one(version, int(range_ver.group("from")), int(range_ver.group("to"))) - versions = chain(newversions, versions) + versions = itertools.chain(newversions, versions) def multi_finalize(fn, d): safe_d = d d = bb.data.createCopy(safe_d) try: - finalise(fn, d) + finalize(fn, d) except bb.parse.SkipPackage: bb.data.setVar("__SKIPPED", True, d) datastores = {"": safe_d} @@ -420,7 +404,7 @@ def multi_finalize(fn, d): d = bb.data.createCopy(safe_d) verfunc(pv, d, safe_d) try: - finalise(fn, d) + finalize(fn, d) except bb.parse.SkipPackage: bb.data.setVar("__SKIPPED", True, d) @@ -436,15 +420,15 @@ def multi_finalize(fn, d): safe_d.setVar("BBCLASSEXTEND", extended) _create_variants(datastores, extended.split(), extendfunc) - for variant, variant_d in datastores.items(): + for variant, variant_d in datastores.iteritems(): if variant: try: - finalise(fn, variant_d) + finalize(fn, variant_d) except bb.parse.SkipPackage: bb.data.setVar("__SKIPPED", True, variant_d) if len(datastores) > 1: - variants = filter(None, datastores.keys()) + variants = filter(None, datastores.iterkeys()) safe_d.setVar("__VARIANTS", " ".join(variants)) datastores[""] = d |