diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/lib/compatlayer/__init__.py | 40 |
1 files changed, 35 insertions, 5 deletions
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): | |||
143 | def add_layer(bblayersconf, layer, layers, logger): | 143 | def add_layer(bblayersconf, layer, layers, logger): |
144 | logger.info('Adding layer %s' % layer['name']) | 144 | logger.info('Adding layer %s' % layer['name']) |
145 | 145 | ||
146 | for collection in layer['collections']: | 146 | def recurse_dependencies(depends, layer, layers, logger, ret = []): |
147 | depends = layer['collections'][collection]['depends'] | 147 | logger.debug('Processing dependencies %s for layer %s.' % \ |
148 | if not depends: | 148 | (depends, layer['name'])) |
149 | continue | ||
150 | 149 | ||
151 | for depend in depends.split(): | 150 | for depend in depends.split(): |
152 | # core (oe-core) is suppose to be provided | 151 | # core (oe-core) is suppose to be provided |
@@ -157,8 +156,39 @@ def add_layer(bblayersconf, layer, layers, logger): | |||
157 | if not layer_depend: | 156 | if not layer_depend: |
158 | logger.error('Layer %s depends on %s and isn\'t found.' % \ | 157 | logger.error('Layer %s depends on %s and isn\'t found.' % \ |
159 | (layer['name'], depend)) | 158 | (layer['name'], depend)) |
160 | return False | 159 | ret = None |
160 | continue | ||
161 | |||
162 | # We keep processing, even if ret is None, this allows us to report | ||
163 | # multiple errors at once | ||
164 | if ret is not None and layer_depend not in ret: | ||
165 | ret.append(layer_depend) | ||
166 | |||
167 | # Recursively process... | ||
168 | if 'collections' not in layer_depend: | ||
169 | continue | ||
170 | |||
171 | for collection in layer_depend['collections']: | ||
172 | collect_deps = layer_depend['collections'][collection]['depends'] | ||
173 | if not collect_deps: | ||
174 | continue | ||
175 | ret = recurse_dependencies(collect_deps, layer_depend, layers, logger, ret) | ||
176 | |||
177 | return ret | ||
161 | 178 | ||
179 | layer_depends = [] | ||
180 | for collection in layer['collections']: | ||
181 | depends = layer['collections'][collection]['depends'] | ||
182 | if not depends: | ||
183 | continue | ||
184 | |||
185 | layer_depends = recurse_dependencies(depends, layer, layers, logger, layer_depends) | ||
186 | |||
187 | # Note: [] (empty) is allowed, None is not! | ||
188 | if layer_depends is None: | ||
189 | return False | ||
190 | else: | ||
191 | for layer_depend in layer_depends: | ||
162 | logger.info('Adding layer dependency %s' % layer_depend['name']) | 192 | logger.info('Adding layer dependency %s' % layer_depend['name']) |
163 | with open(bblayersconf, 'a+') as f: | 193 | with open(bblayersconf, 'a+') as f: |
164 | f.write("\nBBLAYERS += \"%s\"\n" % layer_depend['path']) | 194 | f.write("\nBBLAYERS += \"%s\"\n" % layer_depend['path']) |