diff options
Diffstat (limited to 'bitbake/lib/bb/utils.py')
| -rw-r--r-- | bitbake/lib/bb/utils.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 31ec2b7c9a..c5ff903cef 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
| @@ -33,6 +33,7 @@ import fnmatch | |||
| 33 | import traceback | 33 | import traceback |
| 34 | import errno | 34 | import errno |
| 35 | import signal | 35 | import signal |
| 36 | import ast | ||
| 36 | from commands import getstatusoutput | 37 | from commands import getstatusoutput |
| 37 | from contextlib import contextmanager | 38 | from contextlib import contextmanager |
| 38 | from ctypes import cdll | 39 | from ctypes import cdll |
| @@ -291,19 +292,22 @@ def _print_trace(body, line): | |||
| 291 | error.append(' %.4d:%s' % (i, body[i-1].rstrip())) | 292 | error.append(' %.4d:%s' % (i, body[i-1].rstrip())) |
| 292 | return error | 293 | return error |
| 293 | 294 | ||
| 294 | def better_compile(text, file, realfile, mode = "exec"): | 295 | def better_compile(text, file, realfile, mode = "exec", lineno = None): |
| 295 | """ | 296 | """ |
| 296 | A better compile method. This method | 297 | A better compile method. This method |
| 297 | will print the offending lines. | 298 | will print the offending lines. |
| 298 | """ | 299 | """ |
| 299 | try: | 300 | try: |
| 300 | return compile(text, file, mode) | 301 | code = compile(text, realfile, mode, ast.PyCF_ONLY_AST) |
| 302 | if lineno is not None: | ||
| 303 | ast.increment_lineno(code, lineno) | ||
| 304 | return compile(code, realfile, mode) | ||
| 301 | except Exception as e: | 305 | except Exception as e: |
| 302 | error = [] | 306 | error = [] |
| 303 | # split the text into lines again | 307 | # split the text into lines again |
| 304 | body = text.split('\n') | 308 | body = text.split('\n') |
| 305 | error.append("Error in compiling python function in %s:\n" % realfile) | 309 | error.append("Error in compiling python function in %s, line %s:\n" % (realfile, lineno)) |
| 306 | if e.lineno: | 310 | if hasattr(e, "lineno"): |
| 307 | error.append("The code lines resulting in this error were:") | 311 | error.append("The code lines resulting in this error were:") |
| 308 | error.extend(_print_trace(body, e.lineno)) | 312 | error.extend(_print_trace(body, e.lineno)) |
| 309 | else: | 313 | else: |
