summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/build.py')
-rw-r--r--bitbake/lib/bb/build.py15
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
159def 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#
164def 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"""
234logformatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") 239logformatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s")
235def exec_func_python(func, d, runfile, cwd=None): 240def 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)