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

Reply via email to