yocto-kernel: make BBLAYERS parsing more robust
authorTom Zanussi <tom.zanussi@linux.intel.com>
Wed, 10 Jul 2013 14:11:44 +0000 (09:11 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sat, 13 Jul 2013 17:23:39 +0000 (18:23 +0100)
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>
scripts/lib/bsp/kernel.py

index c3592a3..1971e90 100644 (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:
-        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