summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/parse/ast.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/parse/ast.py')
-rw-r--r--bitbake/lib/bb/parse/ast.py105
1 files changed, 56 insertions, 49 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
index e34f1fe894..8fffe1e8f0 100644
--- a/bitbake/lib/bb/parse/ast.py
+++ b/bitbake/lib/bb/parse/ast.py
@@ -40,13 +40,14 @@ class StatementGroup(list):
40 statement.eval(data) 40 statement.eval(data)
41 41
42class AstNode(object): 42class AstNode(object):
43 pass 43 def __init__(self, filename, lineno):
44 self.filename = filename
45 self.lineno = lineno
44 46
45class IncludeNode(AstNode): 47class IncludeNode(AstNode):
46 def __init__(self, what_file, fn, lineno, force): 48 def __init__(self, filename, lineno, what_file, force):
49 AstNode.__init__(self, filename, lineno)
47 self.what_file = what_file 50 self.what_file = what_file
48 self.from_fn = fn
49 self.from_lineno = lineno
50 self.force = force 51 self.force = force
51 52
52 def eval(self, data): 53 def eval(self, data):
@@ -54,16 +55,17 @@ class IncludeNode(AstNode):
54 Include the file and evaluate the statements 55 Include the file and evaluate the statements
55 """ 56 """
56 s = bb.data.expand(self.what_file, data) 57 s = bb.data.expand(self.what_file, data)
57 logger.debug(2, "CONF %s:%s: including %s", self.from_fn, self.from_lineno, s) 58 logger.debug(2, "CONF %s:%s: including %s", self.filename, self.lineno, s)
58 59
59 # TODO: Cache those includes... maybe not here though 60 # TODO: Cache those includes... maybe not here though
60 if self.force: 61 if self.force:
61 bb.parse.ConfHandler.include(self.from_fn, s, data, "include required") 62 bb.parse.ConfHandler.include(self.filename, s, data, "include required")
62 else: 63 else:
63 bb.parse.ConfHandler.include(self.from_fn, s, data, False) 64 bb.parse.ConfHandler.include(self.filename, s, data, False)
64 65
65class ExportNode(AstNode): 66class ExportNode(AstNode):
66 def __init__(self, var): 67 def __init__(self, filename, lineno, var):
68 AstNode.__init__(self, filename, lineno)
67 self.var = var 69 self.var = var
68 70
69 def eval(self, data): 71 def eval(self, data):
@@ -76,7 +78,8 @@ class DataNode(AstNode):
76 this need to be re-evaluated... we might be able to do 78 this need to be re-evaluated... we might be able to do
77 that faster with multiple classes. 79 that faster with multiple classes.
78 """ 80 """
79 def __init__(self, groupd): 81 def __init__(self, filename, lineno, groupd):
82 AstNode.__init__(self, filename, lineno)
80 self.groupd = groupd 83 self.groupd = groupd
81 84
82 def getFunc(self, key, data): 85 def getFunc(self, key, data):
@@ -119,19 +122,18 @@ class DataNode(AstNode):
119 else: 122 else:
120 bb.data.setVar(key, val, data) 123 bb.data.setVar(key, val, data)
121 124
122class MethodNode: 125class MethodNode(AstNode):
123 def __init__(self, func_name, body, lineno, fn): 126 def __init__(self, filename, lineno, func_name, body):
127 AstNode.__init__(self, filename, lineno)
124 self.func_name = func_name 128 self.func_name = func_name
125 self.body = body 129 self.body = body
126 self.fn = fn
127 self.lineno = lineno
128 130
129 def eval(self, data): 131 def eval(self, data):
130 if self.func_name == "__anonymous": 132 if self.func_name == "__anonymous":
131 funcname = ("__anon_%s_%s" % (self.lineno, self.fn.translate(string.maketrans('/.+-', '____')))) 133 funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(string.maketrans('/.+-', '____'))))
132 if not funcname in bb.methodpool._parsed_fns: 134 if not funcname in bb.methodpool._parsed_fns:
133 text = "def %s(d):\n" % (funcname) + '\n'.join(self.body) 135 text = "def %s(d):\n" % (funcname) + '\n'.join(self.body)
134 bb.methodpool.insert_method(funcname, text, self.fn) 136 bb.methodpool.insert_method(funcname, text, self.filename)
135 anonfuncs = bb.data.getVar('__BBANONFUNCS', data) or [] 137 anonfuncs = bb.data.getVar('__BBANONFUNCS', data) or []
136 anonfuncs.append(funcname) 138 anonfuncs.append(funcname)
137 bb.data.setVar('__BBANONFUNCS', anonfuncs, data) 139 bb.data.setVar('__BBANONFUNCS', anonfuncs, data)
@@ -140,25 +142,26 @@ class MethodNode:
140 bb.data.setVar(self.func_name, '\n'.join(self.body), data) 142 bb.data.setVar(self.func_name, '\n'.join(self.body), data)
141 143
142class PythonMethodNode(AstNode): 144class PythonMethodNode(AstNode):
143 def __init__(self, funcname, root, body, fn): 145 def __init__(self, filename, lineno, function, define, body):
144 self.func_name = funcname 146 AstNode.__init__(self, filename, lineno)
145 self.root = root 147 self.function = function
148 self.define = define
146 self.body = body 149 self.body = body
147 self.fn = fn
148 150
149 def eval(self, data): 151 def eval(self, data):
150 # Note we will add root to parsedmethods after having parse 152 # Note we will add root to parsedmethods after having parse
151 # 'this' file. This means we will not parse methods from 153 # 'this' file. This means we will not parse methods from
152 # bb classes twice 154 # bb classes twice
153 text = '\n'.join(self.body) 155 text = '\n'.join(self.body)
154 if not bb.methodpool.parsed_module(self.root): 156 if not bb.methodpool.parsed_module(self.define):
155 bb.methodpool.insert_method(self.root, text, self.fn) 157 bb.methodpool.insert_method(self.define, text, self.filename)
156 bb.data.setVarFlag(self.func_name, "func", 1, data) 158 bb.data.setVarFlag(self.function, "func", 1, data)
157 bb.data.setVarFlag(self.func_name, "python", 1, data) 159 bb.data.setVarFlag(self.function, "python", 1, data)
158 bb.data.setVar(self.func_name, text, data) 160 bb.data.setVar(self.function, text, data)
159 161
160class MethodFlagsNode(AstNode): 162class MethodFlagsNode(AstNode):
161 def __init__(self, key, m): 163 def __init__(self, filename, lineno, key, m):
164 AstNode.__init__(self, filename, lineno)
162 self.key = key 165 self.key = key
163 self.m = m 166 self.m = m
164 167
@@ -178,7 +181,8 @@ class MethodFlagsNode(AstNode):
178 bb.data.delVarFlag(self.key, "fakeroot", data) 181 bb.data.delVarFlag(self.key, "fakeroot", data)
179 182
180class ExportFuncsNode(AstNode): 183class ExportFuncsNode(AstNode):
181 def __init__(self, fns, classes): 184 def __init__(self, filename, lineno, fns, classes):
185 AstNode.__init__(self, filename, lineno)
182 self.n = fns.split() 186 self.n = fns.split()
183 self.classes = classes 187 self.classes = classes
184 188
@@ -217,7 +221,8 @@ class ExportFuncsNode(AstNode):
217 bb.data.setVarFlag(var, 'export_func', '1', data) 221 bb.data.setVarFlag(var, 'export_func', '1', data)
218 222
219class AddTaskNode(AstNode): 223class AddTaskNode(AstNode):
220 def __init__(self, func, before, after): 224 def __init__(self, filename, lineno, func, before, after):
225 AstNode.__init__(self, filename, lineno)
221 self.func = func 226 self.func = func
222 self.before = before 227 self.before = before
223 self.after = after 228 self.after = after
@@ -248,7 +253,8 @@ class AddTaskNode(AstNode):
248 bb.data.setVarFlag(entry, "deps", [var] + existing, data) 253 bb.data.setVarFlag(entry, "deps", [var] + existing, data)
249 254
250class BBHandlerNode(AstNode): 255class BBHandlerNode(AstNode):
251 def __init__(self, fns): 256 def __init__(self, filename, lineno, fns):
257 AstNode.__init__(self, filename, lineno)
252 self.hs = fns.split() 258 self.hs = fns.split()
253 259
254 def eval(self, data): 260 def eval(self, data):
@@ -259,48 +265,49 @@ class BBHandlerNode(AstNode):
259 bb.data.setVar('__BBHANDLERS', bbhands, data) 265 bb.data.setVar('__BBHANDLERS', bbhands, data)
260 266
261class InheritNode(AstNode): 267class InheritNode(AstNode):
262 def __init__(self, classes): 268 def __init__(self, filename, lineno, classes):
269 AstNode.__init__(self, filename, lineno)
263 self.classes = classes 270 self.classes = classes
264 271
265 def eval(self, data): 272 def eval(self, data):
266 bb.parse.BBHandler.inherit(self.classes, data) 273 bb.parse.BBHandler.inherit(self.classes, data)
267 274
268def handleInclude(statements, m, fn, lineno, force): 275def handleInclude(statements, filename, lineno, m, force):
269 statements.append(IncludeNode(m.group(1), fn, lineno, force)) 276 statements.append(IncludeNode(filename, lineno, m.group(1), force))
270 277
271def handleExport(statements, m): 278def handleExport(statements, filename, lineno, m):
272 statements.append(ExportNode(m.group(1))) 279 statements.append(ExportNode(filename, lineno, m.group(1)))
273 280
274def handleData(statements, groupd): 281def handleData(statements, filename, lineno, groupd):
275 statements.append(DataNode(groupd)) 282 statements.append(DataNode(filename, lineno, groupd))
276 283
277def handleMethod(statements, func_name, lineno, fn, body): 284def handleMethod(statements, filename, lineno, func_name, body):
278 statements.append(MethodNode(func_name, body, lineno, fn)) 285 statements.append(MethodNode(filename, lineno, func_name, body))
279 286
280def handlePythonMethod(statements, funcname, root, body, fn): 287def handlePythonMethod(statements, filename, lineno, funcname, root, body):
281 statements.append(PythonMethodNode(funcname, root, body, fn)) 288 statements.append(PythonMethodNode(filename, lineno, funcname, root, body))
282 289
283def handleMethodFlags(statements, key, m): 290def handleMethodFlags(statements, filename, lineno, key, m):
284 statements.append(MethodFlagsNode(key, m)) 291 statements.append(MethodFlagsNode(filename, lineno, key, m))
285 292
286def handleExportFuncs(statements, m, classes): 293def handleExportFuncs(statements, filename, lineno, m, classes):
287 statements.append(ExportFuncsNode(m.group(1), classes)) 294 statements.append(ExportFuncsNode(filename, lineno, m.group(1), classes))
288 295
289def handleAddTask(statements, m): 296def handleAddTask(statements, filename, lineno, m):
290 func = m.group("func") 297 func = m.group("func")
291 before = m.group("before") 298 before = m.group("before")
292 after = m.group("after") 299 after = m.group("after")
293 if func is None: 300 if func is None:
294 return 301 return
295 302
296 statements.append(AddTaskNode(func, before, after)) 303 statements.append(AddTaskNode(filename, lineno, func, before, after))
297 304
298def handleBBHandlers(statements, m): 305def handleBBHandlers(statements, filename, lineno, m):
299 statements.append(BBHandlerNode(m.group(1))) 306 statements.append(BBHandlerNode(filename, lineno, m.group(1)))
300 307
301def handleInherit(statements, m): 308def handleInherit(statements, filename, lineno, m):
302 classes = m.group(1) 309 classes = m.group(1)
303 statements.append(InheritNode(classes.split())) 310 statements.append(InheritNode(filename, lineno, classes.split()))
304 311
305def finalize(fn, d, variant = None): 312def finalize(fn, d, variant = None):
306 for lazykey in bb.data.getVar("__lazy_assigned", d) or (): 313 for lazykey in bb.data.getVar("__lazy_assigned", d) or ():