diff options
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 43 | ||||
-rw-r--r-- | bitbake/lib/bb/parse/parse_py/BBHandler.py | 5 |
2 files changed, 17 insertions, 31 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index c676fc6bc8..5f55af5ef8 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py | |||
@@ -141,22 +141,33 @@ class DataNode(AstNode): | |||
141 | class MethodNode(AstNode): | 141 | class MethodNode(AstNode): |
142 | tr_tbl = string.maketrans('/.+-@%&', '_______') | 142 | tr_tbl = string.maketrans('/.+-@%&', '_______') |
143 | 143 | ||
144 | def __init__(self, filename, lineno, func_name, body): | 144 | def __init__(self, filename, lineno, func_name, body, python, fakeroot): |
145 | AstNode.__init__(self, filename, lineno) | 145 | AstNode.__init__(self, filename, lineno) |
146 | self.func_name = func_name | 146 | self.func_name = func_name |
147 | self.body = body | 147 | self.body = body |
148 | self.python = python | ||
149 | self.fakeroot = fakeroot | ||
148 | 150 | ||
149 | def eval(self, data): | 151 | def eval(self, data): |
150 | text = '\n'.join(self.body) | 152 | text = '\n'.join(self.body) |
151 | funcname = self.func_name | 153 | funcname = self.func_name |
152 | if self.func_name == "__anonymous": | 154 | if self.func_name == "__anonymous": |
153 | funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(MethodNode.tr_tbl))) | 155 | funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(MethodNode.tr_tbl))) |
156 | self.python = True | ||
154 | text = "def %s(d):\n" % (funcname) + text | 157 | text = "def %s(d):\n" % (funcname) + text |
155 | bb.methodpool.insert_method(funcname, text, self.filename, self.lineno - len(self.body)) | 158 | bb.methodpool.insert_method(funcname, text, self.filename, self.lineno - len(self.body)) |
156 | anonfuncs = data.getVar('__BBANONFUNCS', False) or [] | 159 | anonfuncs = data.getVar('__BBANONFUNCS', False) or [] |
157 | anonfuncs.append(funcname) | 160 | anonfuncs.append(funcname) |
158 | data.setVar('__BBANONFUNCS', anonfuncs) | 161 | data.setVar('__BBANONFUNCS', anonfuncs) |
159 | data.setVarFlag(funcname, "python", 1) | 162 | if data.getVar(funcname, False): |
163 | # clean up old version of this piece of metadata, as its | ||
164 | # flags could cause problems | ||
165 | data.delVarFlag(funcname, 'python') | ||
166 | data.delVarFlag(funcname, 'fakeroot') | ||
167 | if self.python: | ||
168 | data.setVarFlag(funcname, "python", "1") | ||
169 | if self.fakeroot: | ||
170 | data.setVarFlag(funcname, "fakeroot", "1") | ||
160 | data.setVarFlag(funcname, "func", 1) | 171 | data.setVarFlag(funcname, "func", 1) |
161 | data.setVar(funcname, text, parsing=True) | 172 | data.setVar(funcname, text, parsing=True) |
162 | data.setVarFlag(funcname, 'filename', self.filename) | 173 | data.setVarFlag(funcname, 'filename', self.filename) |
@@ -181,27 +192,6 @@ class PythonMethodNode(AstNode): | |||
181 | data.setVarFlag(self.function, 'filename', self.filename) | 192 | data.setVarFlag(self.function, 'filename', self.filename) |
182 | data.setVarFlag(self.function, 'lineno', str(self.lineno - len(self.body) - 1)) | 193 | data.setVarFlag(self.function, 'lineno', str(self.lineno - len(self.body) - 1)) |
183 | 194 | ||
184 | class MethodFlagsNode(AstNode): | ||
185 | def __init__(self, filename, lineno, key, m): | ||
186 | AstNode.__init__(self, filename, lineno) | ||
187 | self.key = key | ||
188 | self.m = m | ||
189 | |||
190 | def eval(self, data): | ||
191 | if data.getVar(self.key, False): | ||
192 | # clean up old version of this piece of metadata, as its | ||
193 | # flags could cause problems | ||
194 | data.setVarFlag(self.key, 'python', None) | ||
195 | data.setVarFlag(self.key, 'fakeroot', None) | ||
196 | if self.m.group("py") is not None: | ||
197 | data.setVarFlag(self.key, "python", "1") | ||
198 | else: | ||
199 | data.delVarFlag(self.key, "python") | ||
200 | if self.m.group("fr") is not None: | ||
201 | data.setVarFlag(self.key, "fakeroot", "1") | ||
202 | else: | ||
203 | data.delVarFlag(self.key, "fakeroot") | ||
204 | |||
205 | class ExportFuncsNode(AstNode): | 195 | class ExportFuncsNode(AstNode): |
206 | def __init__(self, filename, lineno, fns, classname): | 196 | def __init__(self, filename, lineno, fns, classname): |
207 | AstNode.__init__(self, filename, lineno) | 197 | AstNode.__init__(self, filename, lineno) |
@@ -284,15 +274,12 @@ def handleExport(statements, filename, lineno, m): | |||
284 | def handleData(statements, filename, lineno, groupd): | 274 | def handleData(statements, filename, lineno, groupd): |
285 | statements.append(DataNode(filename, lineno, groupd)) | 275 | statements.append(DataNode(filename, lineno, groupd)) |
286 | 276 | ||
287 | def handleMethod(statements, filename, lineno, func_name, body): | 277 | def handleMethod(statements, filename, lineno, func_name, body, python, fakeroot): |
288 | statements.append(MethodNode(filename, lineno, func_name, body)) | 278 | statements.append(MethodNode(filename, lineno, func_name, body, python, fakeroot)) |
289 | 279 | ||
290 | def handlePythonMethod(statements, filename, lineno, funcname, modulename, body): | 280 | def handlePythonMethod(statements, filename, lineno, funcname, modulename, body): |
291 | statements.append(PythonMethodNode(filename, lineno, funcname, modulename, body)) | 281 | statements.append(PythonMethodNode(filename, lineno, funcname, modulename, body)) |
292 | 282 | ||
293 | def handleMethodFlags(statements, filename, lineno, key, m): | ||
294 | statements.append(MethodFlagsNode(filename, lineno, key, m)) | ||
295 | |||
296 | def handleExportFuncs(statements, filename, lineno, m, classname): | 283 | def handleExportFuncs(statements, filename, lineno, m, classname): |
297 | statements.append(ExportFuncsNode(filename, lineno, m.group(1), classname)) | 284 | statements.append(ExportFuncsNode(filename, lineno, m.group(1), classname)) |
298 | 285 | ||
diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index 97a9ee8dac..ef72c3700f 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py | |||
@@ -166,7 +166,7 @@ def feeder(lineno, s, fn, root, statements, eof=False): | |||
166 | if __infunc__: | 166 | if __infunc__: |
167 | if s == '}': | 167 | if s == '}': |
168 | __body__.append('') | 168 | __body__.append('') |
169 | ast.handleMethod(statements, fn, lineno, __infunc__[0], __body__) | 169 | ast.handleMethod(statements, fn, lineno, __infunc__[0], __body__, __infunc__[3], __infunc__[4]) |
170 | __infunc__ = [] | 170 | __infunc__ = [] |
171 | __body__ = [] | 171 | __body__ = [] |
172 | else: | 172 | else: |
@@ -211,8 +211,7 @@ def feeder(lineno, s, fn, root, statements, eof=False): | |||
211 | 211 | ||
212 | m = __func_start_regexp__.match(s) | 212 | m = __func_start_regexp__.match(s) |
213 | if m: | 213 | if m: |
214 | __infunc__ = [m.group("func") or "__anonymous", fn, lineno] | 214 | __infunc__ = [m.group("func") or "__anonymous", fn, lineno, m.group("py") is not None, m.group("fr") is not None] |
215 | ast.handleMethodFlags(statements, fn, lineno, __infunc__[0], m) | ||
216 | return | 215 | return |
217 | 216 | ||
218 | m = __def_regexp__.match(s) | 217 | m = __def_regexp__.match(s) |