yocto-kernel: make BBLAYERS parsing more robust

This allows the BBLAYERS parsing code to handle cases where BBLAYERS
is spread across multiple assignments or all on a single line, within
double or single quotes.

Fixes [YOCTO #3746].

(From meta-yocto rev: 4ab26d9e655bab0069ffe9b135557d943cf1f524)

Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Tom Zanussi 2013-07-10 09:11:44 -05:00 committed by Richard Purdie
parent 46818e5227
commit 74e403705e
1 changed files with 24 additions and 14 deletions

View File

@ -60,14 +60,12 @@ def find_bblayers(scripts_path):
in_bblayers = True
quotes = line.strip().count('"')
if quotes > 1:
break
in_bblayers = False
continue
if in_bblayers:
bblayers_lines.append(line)
if line.strip().endswith("\""):
break
else:
continue
in_bblayers = False
for i, line in enumerate(bblayers_lines):
if line.strip().endswith("\\"):
@ -75,19 +73,31 @@ def find_bblayers(scripts_path):
bblayers_line = " ".join(bblayers_lines)
start_quote = bblayers_line.find("\"")
if start_quote == -1:
openquote = ''
for c in bblayers_line:
if c == '\"' or c == '\'':
if openquote:
if c != openquote:
print "Invalid BBLAYERS found in %s, exiting" % bblayers_conf
sys.exit(1)
else:
openquote = ''
else:
openquote = c
if openquote:
print "Invalid BBLAYERS found in %s, exiting" % bblayers_conf
sys.exit(1)
start_quote += 1
end_quote = bblayers_line.find("\"", start_quote)
if end_quote == -1:
print "Invalid BBLAYERS found in %s, exiting" % bblayers_conf
sys.exit(1)
bblayers_line = bblayers_line.strip().replace('\"', '')
bblayers_line = bblayers_line.strip().replace('\'', '')
bblayers_line = bblayers_line[start_quote:end_quote]
layers = bblayers_line.split()
raw_layers = bblayers_line.split()
for layer in raw_layers:
if layer == 'BBLAYERS' or '=' in layer:
continue
layers.append(layer)
f.close()
@ -114,7 +124,7 @@ def find_bsp_layer(scripts_path, machine):
layers = find_bblayers(scripts_path)
for layer in layers:
if machine in layer:
if layer.endswith(machine):
return layer
print "Unable to find the BSP layer for machine %s." % machine