The behaviour of "#" in multiline variables is established but very confusing for people and can cause data to disappear unexpectedly.
Currently this construct would drop one of the patches: SRC_URI = "http://z/ \ # file://xxx.patch \ file://yyy.patch" which in that context makes sense and people do use this. On the other hand people have done things like: VARIABLE = "Some text which references the C code: \ #include "config.h" \ where we wanted to make some comment" and then wondered why the line went missing. Since this is done silently, it can be hard to even realise there was a problem. I've applied a patch in Poky which triggers big warnings about doing that and also changed the behaviour to include the line instead of dropping it. I'm not sure whether this change is desirable or not. It would certainly improve user experience if we didn't special case commends in multi line strings as its not what people would expect having used any other language. Feedback welcome... Cheers, Richard bitbake/BBHandler: Improve handling of multiline comments and warn users of the change Signed-off-by: Richard Purdie <[email protected]> diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index 31d1e21..402cd07 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py @@ -193,9 +193,14 @@ def feeder(lineno, s, fn, root, statements): if lineno == IN_PYTHON_EOF: return -# fall through - if s == '' or s[0] == '#': return # skip comments and empty lines + # Skip empty lines + if s == '': + return + + if s[0] == '#': + if len(__residue__) != 0 and __residue__[0][0] != "#": + bb.error("There is a comment on line %s of file %s (%s) which is in the middle of a multiline expression.\nBitbake used to ignore these but no longer does so, please fix your metadata as errors are likely as a result of this change." % (lineno, fn, s)) if s[-1] == '\\': __residue__.append(s[:-1]) @@ -204,6 +209,10 @@ def feeder(lineno, s, fn, root, statements): s = "".join(__residue__) + s __residue__ = [] + # Skip comments + if s[0] == '#': + return + m = __func_start_regexp__.match(s) if m: __infunc__ = m.group("func") or "__anonymous" _______________________________________________ Bitbake-dev mailing list [email protected] https://lists.berlios.de/mailman/listinfo/bitbake-dev
