diff options
Diffstat (limited to 'scripts/lib/compatlayer/__init__.py')
-rw-r--r-- | scripts/lib/compatlayer/__init__.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/scripts/lib/compatlayer/__init__.py b/scripts/lib/compatlayer/__init__.py index 9eb862dc6b..b46527a185 100644 --- a/scripts/lib/compatlayer/__init__.py +++ b/scripts/lib/compatlayer/__init__.py | |||
@@ -7,6 +7,8 @@ import os | |||
7 | import subprocess | 7 | import subprocess |
8 | from enum import Enum | 8 | from enum import Enum |
9 | 9 | ||
10 | import bb.tinfoil | ||
11 | |||
10 | class LayerType(Enum): | 12 | class LayerType(Enum): |
11 | BSP = 0 | 13 | BSP = 0 |
12 | DISTRO = 1 | 14 | DISTRO = 1 |
@@ -252,3 +254,33 @@ def get_signatures(builddir, failsafe=False): | |||
252 | raise RuntimeError('Can\'t load signatures from %s' % sigs_file) | 254 | raise RuntimeError('Can\'t load signatures from %s' % sigs_file) |
253 | 255 | ||
254 | return sigs | 256 | return sigs |
257 | |||
258 | def get_depgraph(targets=['world']): | ||
259 | ''' | ||
260 | Returns the dependency graph for the given target(s). | ||
261 | The dependency graph is taken directly from DepTreeEvent. | ||
262 | ''' | ||
263 | depgraph = None | ||
264 | with bb.tinfoil.Tinfoil() as tinfoil: | ||
265 | tinfoil.prepare(config_only=False) | ||
266 | tinfoil.set_event_mask(['bb.event.NoProvider', 'bb.event.DepTreeGenerated', 'bb.command.CommandCompleted']) | ||
267 | if not tinfoil.run_command('generateDepTreeEvent', targets, 'do_build'): | ||
268 | raise RuntimeError('starting generateDepTreeEvent failed') | ||
269 | while True: | ||
270 | event = tinfoil.wait_event(timeout=1000) | ||
271 | if event: | ||
272 | if isinstance(event, bb.command.CommandFailed): | ||
273 | raise RuntimeError('Generating dependency information failed: %s' % event.error) | ||
274 | elif isinstance(event, bb.command.CommandCompleted): | ||
275 | break | ||
276 | elif isinstance(event, bb.event.NoProvider): | ||
277 | if event._reasons: | ||
278 | raise RuntimeError('Nothing provides %s: %s' % (event._item, event._reasons)) | ||
279 | else: | ||
280 | raise RuntimeError('Nothing provides %s.' % (event._item)) | ||
281 | elif isinstance(event, bb.event.DepTreeGenerated): | ||
282 | depgraph = event._depgraph | ||
283 | |||
284 | if depgraph is None: | ||
285 | raise RuntimeError('Could not retrieve the depgraph.') | ||
286 | return depgraph | ||