summaryrefslogtreecommitdiffstats
path: root/scripts/lib/compatlayer/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/compatlayer/__init__.py')
-rw-r--r--scripts/lib/compatlayer/__init__.py32
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
7import subprocess 7import subprocess
8from enum import Enum 8from enum import Enum
9 9
10import bb.tinfoil
11
10class LayerType(Enum): 12class 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
258def 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