[OE-core] [PATCH 3/3] scripts/yocto-compat-layer.py: Handle layer dependencies when test

Aníbal Limón anibal.limon at linux.intel.com
Mon Mar 20 22:44:47 UTC 2017


If some layer depends on other tries to find layer dependency, if the
layer dependency isn't found avoid to test the layer and notice the
user.

Signed-off-by: Aníbal Limón <anibal.limon at linux.intel.com>
---
 scripts/lib/compatlayer/__init__.py | 29 ++++++++++++++++++++++++++++-
 scripts/yocto-compat-layer.py       | 21 +++++++++++++--------
 2 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/scripts/lib/compatlayer/__init__.py b/scripts/lib/compatlayer/__init__.py
index b8ce771..435679e 100644
--- a/scripts/lib/compatlayer/__init__.py
+++ b/scripts/lib/compatlayer/__init__.py
@@ -132,10 +132,37 @@ def detect_layers(layer_directories, no_auto):
 
     return layers
 
-def add_layer(bblayersconf, layer):
+def _find_layer_depends(depend, layers):
+    for layer in layers:
+        for collection in layer['collections']:
+            if depend == collection:
+                return layer
+    return None
+
+def add_layer(bblayersconf, layer, layers, logger):
+    logger.info('Adding layer %s' % layer['name'])
+
+    for collection in layer['collections']:
+        for depend in layer['collections'][collection]['depends'].split():
+            # core (oe-core) is suppose to be provided
+            if depend == 'core':
+                continue
+
+            layer_depend = _find_layer_depends(depend, layers)
+            if not layer_depend:
+                logger.error('Layer %s depends on %s and isn\'t found.' % \
+                        (layer['name'], depend))
+                return False
+
+            logger.info('Adding layer dependency %s' % layer_depend['name'])
+            with open(bblayersconf, 'a+') as f:
+                f.write("\nBBLAYERS += \"%s\"\n" % layer_depend['path'])
+
     with open(bblayersconf, 'a+') as f:
         f.write("\nBBLAYERS += \"%s\"\n" % layer['path'])
 
+    return True
+
 def get_signatures(builddir, failsafe=False):
     import subprocess
     import re
diff --git a/scripts/yocto-compat-layer.py b/scripts/yocto-compat-layer.py
index b4de84a..9e74033 100755
--- a/scripts/yocto-compat-layer.py
+++ b/scripts/yocto-compat-layer.py
@@ -116,6 +116,7 @@ def main():
     td['sigs'] = get_signatures(td['builddir'])
     logger.info('')
 
+    layers_tested = 0
     for layer in layers:
         if layer['type'] == LayerType.ERROR_NO_LAYER_CONF or \
                 layer['type'] == LayerType.ERROR_BSP_DISTRO:
@@ -123,16 +124,20 @@ def main():
 
         shutil.copyfile(bblayersconf + '.backup', bblayersconf)
 
-        add_layer(bblayersconf, layer)
+        if not add_layer(bblayersconf, layer, layers, logger):
+            continue
+
         result = test_layer_compatibility(td, layer)
         results[layer['name']] = result
-
-    logger.info('')
-    logger.info('Summary of results:')
-    logger.info('')
-    for layer_name in results:
-        logger.info('%s ... %s' % (layer_name, 'PASS' if \
-                results[layer_name].wasSuccessful() else 'FAIL'))
+        layers_tested = layers_tested + 1
+
+    if layers_tested:
+        logger.info('')
+        logger.info('Summary of results:')
+        logger.info('')
+        for layer_name in results:
+            logger.info('%s ... %s' % (layer_name, 'PASS' if \
+                    results[layer_name].wasSuccessful() else 'FAIL'))
 
     cleanup_bblayers(None, None)
 
-- 
2.1.4




More information about the Openembedded-core mailing list