diff options
Diffstat (limited to 'bitbake/lib/bb/codeparser.py')
-rw-r--r-- | bitbake/lib/bb/codeparser.py | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/bitbake/lib/bb/codeparser.py b/bitbake/lib/bb/codeparser.py index 77156136f8..9a692a0c8e 100644 --- a/bitbake/lib/bb/codeparser.py +++ b/bitbake/lib/bb/codeparser.py | |||
@@ -155,8 +155,7 @@ class PythonParser(): | |||
155 | expands = ("d.expand", "bb.data.expand", "data.expand") | 155 | expands = ("d.expand", "bb.data.expand", "data.expand") |
156 | execfuncs = ("bb.build.exec_func", "bb.build.exec_task") | 156 | execfuncs = ("bb.build.exec_func", "bb.build.exec_task") |
157 | 157 | ||
158 | @classmethod | 158 | def warn(self, func, arg): |
159 | def warn(cls, func, arg): | ||
160 | """Warn about calls of bitbake APIs which pass a non-literal | 159 | """Warn about calls of bitbake APIs which pass a non-literal |
161 | argument for the variable name, as we're not able to track such | 160 | argument for the variable name, as we're not able to track such |
162 | a reference. | 161 | a reference. |
@@ -168,8 +167,7 @@ class PythonParser(): | |||
168 | except TypeError: | 167 | except TypeError: |
169 | logger.debug(2, 'Failed to convert function and argument to source form') | 168 | logger.debug(2, 'Failed to convert function and argument to source form') |
170 | else: | 169 | else: |
171 | logger.debug(1, "Warning: in call to '%s', argument '%s' is " | 170 | logger.debug(1, self.unhandled_message % (funcstr, argstr)) |
172 | "not a literal", funcstr, argstr) | ||
173 | 171 | ||
174 | def visit_Call(self, node): | 172 | def visit_Call(self, node): |
175 | name = self.called_node_name(node.func) | 173 | name = self.called_node_name(node.func) |
@@ -208,13 +206,16 @@ class PythonParser(): | |||
208 | else: | 206 | else: |
209 | break | 207 | break |
210 | 208 | ||
211 | def __init__(self): | 209 | def __init__(self, name): |
212 | self.var_references = set() | 210 | self.var_references = set() |
213 | self.var_execs = set() | 211 | self.var_execs = set() |
214 | self.execs = set() | 212 | self.execs = set() |
215 | self.var_expands = set() | 213 | self.var_expands = set() |
216 | self.references = set() | 214 | self.references = set() |
217 | 215 | ||
216 | self.unhandled_message = "in call of %s, argument '%s' is not a string literal" | ||
217 | self.unhandled_message = "while parsing %s, %s" % (name, self.unhandled_message) | ||
218 | |||
218 | def parse_python(self, node): | 219 | def parse_python(self, node): |
219 | h = hash(str(node)) | 220 | h = hash(str(node)) |
220 | 221 | ||
@@ -238,10 +239,12 @@ class PythonParser(): | |||
238 | pythonparsecache[h]["execs"] = self.execs | 239 | pythonparsecache[h]["execs"] = self.execs |
239 | 240 | ||
240 | class ShellParser(): | 241 | class ShellParser(): |
241 | def __init__(self): | 242 | def __init__(self, name): |
242 | self.funcdefs = set() | 243 | self.funcdefs = set() |
243 | self.allexecs = set() | 244 | self.allexecs = set() |
244 | self.execs = set() | 245 | self.execs = set() |
246 | self.unhandled_template = "unable to handle non-literal command '%s'" | ||
247 | self.unhandled_template = "while parsing %s, %s" % (name, self.unhandled_template) | ||
245 | 248 | ||
246 | def parse_shell(self, value): | 249 | def parse_shell(self, value): |
247 | """Parse the supplied shell code in a string, returning the external | 250 | """Parse the supplied shell code in a string, returning the external |
@@ -356,8 +359,7 @@ class ShellParser(): | |||
356 | 359 | ||
357 | cmd = word[1] | 360 | cmd = word[1] |
358 | if cmd.startswith("$"): | 361 | if cmd.startswith("$"): |
359 | logger.debug(1, "Warning: execution of non-literal " | 362 | logger.debug(1, self.unhandled_template % cmd) |
360 | "command '%s'", cmd) | ||
361 | elif cmd == "eval": | 363 | elif cmd == "eval": |
362 | command = " ".join(word for _, word in words[1:]) | 364 | command = " ".join(word for _, word in words[1:]) |
363 | self.parse_shell(command) | 365 | self.parse_shell(command) |