From 6e0a268b750fb6701604dd936cd2cf3b47a6e804 Mon Sep 17 00:00:00 2001 From: Mark Hatle Date: Thu, 30 Mar 2017 21:30:28 -0500 Subject: compatlayer/__init__.py: Allow add_layer to process recursive deps When processing a layer for dependencies, you have to process the layer itself, it's dependencies, the dependencies dependencies and so forth until all items have been processed. i.e.: LayerA requires LayerB requires LayerC requires layerD The end result should be LayerB, LayerC and LayerD are all dependencies of LayerA. Signed-off-by: Mark Hatle Signed-off-by: Ross Burton --- scripts/lib/compatlayer/__init__.py | 40 ++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) (limited to 'scripts/lib') diff --git a/scripts/lib/compatlayer/__init__.py b/scripts/lib/compatlayer/__init__.py index 087ac14148..8d8bdfe939 100644 --- a/scripts/lib/compatlayer/__init__.py +++ b/scripts/lib/compatlayer/__init__.py @@ -143,10 +143,9 @@ def _find_layer_depends(depend, layers): def add_layer(bblayersconf, layer, layers, logger): logger.info('Adding layer %s' % layer['name']) - for collection in layer['collections']: - depends = layer['collections'][collection]['depends'] - if not depends: - continue + def recurse_dependencies(depends, layer, layers, logger, ret = []): + logger.debug('Processing dependencies %s for layer %s.' % \ + (depends, layer['name'])) for depend in depends.split(): # core (oe-core) is suppose to be provided @@ -157,8 +156,39 @@ def add_layer(bblayersconf, layer, layers, logger): if not layer_depend: logger.error('Layer %s depends on %s and isn\'t found.' % \ (layer['name'], depend)) - return False + ret = None + continue + + # We keep processing, even if ret is None, this allows us to report + # multiple errors at once + if ret is not None and layer_depend not in ret: + ret.append(layer_depend) + + # Recursively process... + if 'collections' not in layer_depend: + continue + + for collection in layer_depend['collections']: + collect_deps = layer_depend['collections'][collection]['depends'] + if not collect_deps: + continue + ret = recurse_dependencies(collect_deps, layer_depend, layers, logger, ret) + + return ret + layer_depends = [] + for collection in layer['collections']: + depends = layer['collections'][collection]['depends'] + if not depends: + continue + + layer_depends = recurse_dependencies(depends, layer, layers, logger, layer_depends) + + # Note: [] (empty) is allowed, None is not! + if layer_depends is None: + return False + else: + for layer_depend in layer_depends: logger.info('Adding layer dependency %s' % layer_depend['name']) with open(bblayersconf, 'a+') as f: f.write("\nBBLAYERS += \"%s\"\n" % layer_depend['path']) -- cgit v1.2.3