summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/codeparser.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/codeparser.py')
-rw-r--r--bitbake/lib/bb/codeparser.py28
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
153Logger = logging.getLoggerClass()
154class 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
153class PythonParser(): 169class 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
230class ShellParser(): 247class 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)