From 74e403705e25afec656b5e40921771a9c29bdc40 Mon Sep 17 00:00:00 2001 From: Tom Zanussi Date: Wed, 10 Jul 2013 09:11:44 -0500 Subject: 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 Signed-off-by: Richard Purdie --- scripts/lib/bsp/kernel.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'scripts') diff --git a/scripts/lib/bsp/kernel.py b/scripts/lib/bsp/kernel.py index c3592a3..1971e90 100644 --- a/scripts/lib/bsp/kernel.py +++ b/scripts/lib/bsp/kernel.py @@ -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: - print "Invalid BBLAYERS found in %s, exiting" % bblayers_conf - sys.exit(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 - start_quote += 1 - end_quote = bblayers_line.find("\"", start_quote) - if end_quote == -1: + if openquote: print "Invalid BBLAYERS found in %s, exiting" % bblayers_conf sys.exit(1) - bblayers_line = bblayers_line[start_quote:end_quote] - layers = bblayers_line.split() + bblayers_line = bblayers_line.strip().replace('\"', '') + bblayers_line = bblayers_line.strip().replace('\'', '') + + 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 -- cgit v1.1