diff options
Diffstat (limited to 'bitbake/lib/bb/build.py')
-rw-r--r-- | bitbake/lib/bb/build.py | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index d20ee065b2..db5072cb4d 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py | |||
@@ -156,7 +156,12 @@ class LogTee(object): | |||
156 | def flush(self): | 156 | def flush(self): |
157 | self.outfile.flush() | 157 | self.outfile.flush() |
158 | 158 | ||
159 | def exec_func(func, d, dirs = None): | 159 | # |
160 | # pythonexception allows the python exceptions generated to be raised | ||
161 | # as the real exceptions (not FuncFailed) and without a backtrace at the | ||
162 | # origin of the failure. | ||
163 | # | ||
164 | def exec_func(func, d, dirs = None, pythonexception=False): | ||
160 | """Execute a BB 'function'""" | 165 | """Execute a BB 'function'""" |
161 | 166 | ||
162 | body = d.getVar(func, False) | 167 | body = d.getVar(func, False) |
@@ -224,7 +229,7 @@ def exec_func(func, d, dirs = None): | |||
224 | 229 | ||
225 | with bb.utils.fileslocked(lockfiles): | 230 | with bb.utils.fileslocked(lockfiles): |
226 | if ispython: | 231 | if ispython: |
227 | exec_func_python(func, d, runfile, cwd=adir) | 232 | exec_func_python(func, d, runfile, cwd=adir, pythonexception=pythonexception) |
228 | else: | 233 | else: |
229 | exec_func_shell(func, d, runfile, cwd=adir) | 234 | exec_func_shell(func, d, runfile, cwd=adir) |
230 | 235 | ||
@@ -232,7 +237,7 @@ _functionfmt = """ | |||
232 | {function}(d) | 237 | {function}(d) |
233 | """ | 238 | """ |
234 | logformatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") | 239 | logformatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") |
235 | def exec_func_python(func, d, runfile, cwd=None): | 240 | def exec_func_python(func, d, runfile, cwd=None, pythonexception=False): |
236 | """Execute a python BB 'function'""" | 241 | """Execute a python BB 'function'""" |
237 | 242 | ||
238 | code = _functionfmt.format(function=func) | 243 | code = _functionfmt.format(function=func) |
@@ -256,10 +261,12 @@ def exec_func_python(func, d, runfile, cwd=None): | |||
256 | bb.methodpool.insert_method(func, text, fn, lineno - 1) | 261 | bb.methodpool.insert_method(func, text, fn, lineno - 1) |
257 | 262 | ||
258 | comp = utils.better_compile(code, func, "exec_python_func() autogenerated") | 263 | comp = utils.better_compile(code, func, "exec_python_func() autogenerated") |
259 | utils.better_exec(comp, {"d": d}, code, "exec_python_func() autogenerated") | 264 | utils.better_exec(comp, {"d": d}, code, "exec_python_func() autogenerated", pythonexception=pythonexception) |
260 | except (bb.parse.SkipRecipe, bb.build.FuncFailed): | 265 | except (bb.parse.SkipRecipe, bb.build.FuncFailed): |
261 | raise | 266 | raise |
262 | except: | 267 | except: |
268 | if pythonexception: | ||
269 | raise | ||
263 | raise FuncFailed(func, None) | 270 | raise FuncFailed(func, None) |
264 | finally: | 271 | finally: |
265 | bb.debug(2, "Python function %s finished" % func) | 272 | bb.debug(2, "Python function %s finished" % func) |