diff options
Diffstat (limited to 'bitbake/lib/bb/codeparser.py')
-rw-r--r-- | bitbake/lib/bb/codeparser.py | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/bitbake/lib/bb/codeparser.py b/bitbake/lib/bb/codeparser.py index 615fb7d610..d425514481 100644 --- a/bitbake/lib/bb/codeparser.py +++ b/bitbake/lib/bb/codeparser.py | |||
@@ -150,6 +150,22 @@ def parser_cache_savemerge(d): | |||
150 | bb.utils.unlockfile(glf) | 150 | bb.utils.unlockfile(glf) |
151 | 151 | ||
152 | 152 | ||
153 | Logger = logging.getLoggerClass() | ||
154 | class BufferedLogger(Logger): | ||
155 | def __init__(self, name, level=0, target=None): | ||
156 | Logger.__init__(self, name) | ||
157 | self.setLevel(level) | ||
158 | self.buffer = [] | ||
159 | self.target = target | ||
160 | |||
161 | def handle(self, record): | ||
162 | self.buffer.append(record) | ||
163 | |||
164 | def flush(self): | ||
165 | for record in self.buffer: | ||
166 | self.target.handle(record) | ||
167 | self.buffer = [] | ||
168 | |||
153 | class PythonParser(): | 169 | class PythonParser(): |
154 | getvars = ("d.getVar", "bb.data.getVar", "data.getVar") | 170 | getvars = ("d.getVar", "bb.data.getVar", "data.getVar") |
155 | execfuncs = ("bb.build.exec_func", "bb.build.exec_task") | 171 | execfuncs = ("bb.build.exec_func", "bb.build.exec_task") |
@@ -164,9 +180,9 @@ class PythonParser(): | |||
164 | funcstr = codegen.to_source(func) | 180 | funcstr = codegen.to_source(func) |
165 | argstr = codegen.to_source(arg) | 181 | argstr = codegen.to_source(arg) |
166 | except TypeError: | 182 | except TypeError: |
167 | logger.debug(2, 'Failed to convert function and argument to source form') | 183 | self.log.debug(2, 'Failed to convert function and argument to source form') |
168 | else: | 184 | else: |
169 | logger.debug(1, self.unhandled_message % (funcstr, argstr)) | 185 | self.log.debug(1, self.unhandled_message % (funcstr, argstr)) |
170 | 186 | ||
171 | def visit_Call(self, node): | 187 | def visit_Call(self, node): |
172 | name = self.called_node_name(node.func) | 188 | name = self.called_node_name(node.func) |
@@ -196,11 +212,12 @@ class PythonParser(): | |||
196 | else: | 212 | else: |
197 | break | 213 | break |
198 | 214 | ||
199 | def __init__(self, name): | 215 | def __init__(self, name, log): |
200 | self.var_references = set() | 216 | self.var_references = set() |
201 | self.var_execs = set() | 217 | self.var_execs = set() |
202 | self.execs = set() | 218 | self.execs = set() |
203 | self.references = set() | 219 | self.references = set() |
220 | self.log = BufferedLogger('BitBake.Data.%s' % name, logging.DEBUG, log) | ||
204 | 221 | ||
205 | self.unhandled_message = "in call of %s, argument '%s' is not a string literal" | 222 | self.unhandled_message = "in call of %s, argument '%s' is not a string literal" |
206 | self.unhandled_message = "while parsing %s, %s" % (name, self.unhandled_message) | 223 | self.unhandled_message = "while parsing %s, %s" % (name, self.unhandled_message) |
@@ -228,10 +245,11 @@ class PythonParser(): | |||
228 | pythonparsecache[h]["execs"] = self.execs | 245 | pythonparsecache[h]["execs"] = self.execs |
229 | 246 | ||
230 | class ShellParser(): | 247 | class ShellParser(): |
231 | def __init__(self, name): | 248 | def __init__(self, name, log): |
232 | self.funcdefs = set() | 249 | self.funcdefs = set() |
233 | self.allexecs = set() | 250 | self.allexecs = set() |
234 | self.execs = set() | 251 | self.execs = set() |
252 | self.log = BufferedLogger('BitBake.Data.%s' % name, logging.DEBUG, log) | ||
235 | self.unhandled_template = "unable to handle non-literal command '%s'" | 253 | self.unhandled_template = "unable to handle non-literal command '%s'" |
236 | self.unhandled_template = "while parsing %s, %s" % (name, self.unhandled_template) | 254 | self.unhandled_template = "while parsing %s, %s" % (name, self.unhandled_template) |
237 | 255 | ||
@@ -348,7 +366,7 @@ class ShellParser(): | |||
348 | 366 | ||
349 | cmd = word[1] | 367 | cmd = word[1] |
350 | if cmd.startswith("$"): | 368 | if cmd.startswith("$"): |
351 | logger.debug(1, self.unhandled_template % cmd) | 369 | self.log.debug(1, self.unhandled_template % cmd) |
352 | elif cmd == "eval": | 370 | elif cmd == "eval": |
353 | command = " ".join(word for _, word in words[1:]) | 371 | command = " ".join(word for _, word in words[1:]) |
354 | self.parse_shell(command) | 372 | self.parse_shell(command) |