[poky] [PATCH 1/1] yocto-kernel: make BBLAYERS parsing more robust

Tom Zanussi tom.zanussi at linux.intel.com
Wed Jul 10 07:11:44 PDT 2013


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].

Signed-off-by: Tom Zanussi <tom.zanussi at linux.intel.com>
---
 scripts/lib/bsp/kernel.py | 38 ++++++++++++++++++++++++--------------
 1 file changed, 24 insertions(+), 14 deletions(-)

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
-- 
1.7.11.4




More information about the poky mailing list