diff options
Diffstat (limited to 'bitbake/lib/bb/parse/ast.py')
| -rw-r--r-- | bitbake/lib/bb/parse/ast.py | 105 |
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 | ||
| 42 | class AstNode(object): | 42 | class AstNode(object): |
| 43 | pass | 43 | def __init__(self, filename, lineno): |
| 44 | self.filename = filename | ||
| 45 | self.lineno = lineno | ||
| 44 | 46 | ||
| 45 | class IncludeNode(AstNode): | 47 | class 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 | ||
| 65 | class ExportNode(AstNode): | 66 | class 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 | ||
| 122 | class MethodNode: | 125 | class 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 | ||
| 142 | class PythonMethodNode(AstNode): | 144 | class 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 | ||
| 160 | class MethodFlagsNode(AstNode): | 162 | class 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 | ||
| 180 | class ExportFuncsNode(AstNode): | 183 | class 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 | ||
| 219 | class AddTaskNode(AstNode): | 223 | class 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 | ||
| 250 | class BBHandlerNode(AstNode): | 255 | class 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 | ||
| 261 | class InheritNode(AstNode): | 267 | class 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 | ||
| 268 | def handleInclude(statements, m, fn, lineno, force): | 275 | def 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 | ||
| 271 | def handleExport(statements, m): | 278 | def handleExport(statements, filename, lineno, m): |
| 272 | statements.append(ExportNode(m.group(1))) | 279 | statements.append(ExportNode(filename, lineno, m.group(1))) |
| 273 | 280 | ||
| 274 | def handleData(statements, groupd): | 281 | def handleData(statements, filename, lineno, groupd): |
| 275 | statements.append(DataNode(groupd)) | 282 | statements.append(DataNode(filename, lineno, groupd)) |
| 276 | 283 | ||
| 277 | def handleMethod(statements, func_name, lineno, fn, body): | 284 | def 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 | ||
| 280 | def handlePythonMethod(statements, funcname, root, body, fn): | 287 | def 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 | ||
| 283 | def handleMethodFlags(statements, key, m): | 290 | def handleMethodFlags(statements, filename, lineno, key, m): |
| 284 | statements.append(MethodFlagsNode(key, m)) | 291 | statements.append(MethodFlagsNode(filename, lineno, key, m)) |
| 285 | 292 | ||
| 286 | def handleExportFuncs(statements, m, classes): | 293 | def 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 | ||
| 289 | def handleAddTask(statements, m): | 296 | def 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 | ||
| 298 | def handleBBHandlers(statements, m): | 305 | def handleBBHandlers(statements, filename, lineno, m): |
| 299 | statements.append(BBHandlerNode(m.group(1))) | 306 | statements.append(BBHandlerNode(filename, lineno, m.group(1))) |
| 300 | 307 | ||
| 301 | def handleInherit(statements, m): | 308 | def 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 | ||
| 305 | def finalize(fn, d, variant = None): | 312 | def 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 (): |
