[bitbake-devel,1/2] data: emit filename/lineno information for shell functions

Submitted by Chris Laplante via lists.openembedded.org on July 31, 2020, 10:34 p.m. | Patch ID: 174974

Details

Message ID 20200731223442.102095-1-chris.laplante@agilent.com
State New
Headers show

Commit Message

Chris Laplante via lists.openembedded.org July 31, 2020, 10:34 p.m.
Make it easier for users to debug shell task failure by including
some breadcrumbs in the emitted .run file that (hopefully) points
to the .bb/.bbclass file where the shell function was defined.

Unfortunately this won't work with functions with _append
or _prepends, since BitBake wipes the filename/lineno information.
This shouldn't be too hard to fix; for now, you'll just see
comments like this for such functions:

[YOCTO #7877]

Signed-off-by: Chris Laplante <chris.laplante@agilent.com>
---
 lib/bb/data.py | 6 ++++++
 1 file changed, 6 insertions(+)

Patch hide | download patch | download mbox

diff --git a/lib/bb/data.py b/lib/bb/data.py
index b0683c51..d71e2fb4 100644
--- a/lib/bb/data.py
+++ b/lib/bb/data.py
@@ -161,6 +161,12 @@  def emit_var(var, o=sys.__stdout__, d = init(), all=False):
         return True
 
     if func:
+        # Write a comment indicating where the shell function came from (line number and filename) to make it easier
+        # for the user to diagnose task failures. This comment is also used by the shell trap that build.py generates
+        # so that shell tasks can report better line numbers in case of errors.
+        o.write("# line: {0}, file: {1}\n".format(
+            d.getVarFlag(var, "lineno", False),
+            d.getVarFlag(var, "filename", False)))
         # NOTE: should probably check for unbalanced {} within the var
         val = val.rstrip('\n')
         o.write("%s() {\n%s\n}\n" % (varExpanded, val))