bitbake: implement command to get all possible targets and their dependencies

Add a new command generateTargetsTree() which returns a dependency tree of
possible targets (tasks and recipes) as well as their dependency information.

Optional parameter 'klass' also ensures any recipes which inherit the
specified class path (i.e. 'classes/image.bbclass') are included in the model

Signed-off-by: Joshua Lock <josh@linux.intel.com>
This commit is contained in:
Joshua Lock 2011-01-04 20:08:51 +00:00 committed by Richard Purdie
parent 920c402342
commit 1b3eb0c35f
3 changed files with 44 additions and 0 deletions

View File

@ -222,6 +222,16 @@ class CommandsAsync:
command.finishAsyncCommand()
generateDotGraph.needcache = True
def generateTargetsTree(self, command, params):
"""
Generate a tree of all buildable targets.
"""
klass = params[0]
command.cooker.generateTargetsTree(klass)
command.finishAsyncCommand()
generateTargetsTree.needcache = True
def showVersions(self, command, params):
"""
Show the currently selected versions

View File

@ -430,6 +430,31 @@ class BBCooker:
if not regex in matched:
collectlog.warn("No bb files matched BBFILE_PATTERN_%s '%s'" % (collection, pattern))
def checkInheritsClass(self, klass):
pkg_list = []
for pfn in self.status.pkg_fn:
inherits = self.status.inherits.get(pfn, None)
if inherits and inherits.count(klass) > 0:
pkg_list.append(self.status.pkg_fn[pfn])
return pkg_list
def generateTargetsTree(self, klass):
"""
Generate a dependency tree of buildable targets
Generate an event with the result
"""
pkgs = ['world']
# if inherited_class passed ensure all recipes which inherit the
# specified class are included in pkgs
if klass:
extra_pkgs = self.checkInheritsClass(klass)
pkgs = pkgs + extra_pkgs
# generate a dependency tree for all our packages
tree = self.generateDepTreeData(pkgs, 'build')
bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data)
def buildWorldTargetList(self):
"""
Build package list for "bitbake world"

View File

@ -350,6 +350,15 @@ class DepTreeGenerated(Event):
Event.__init__(self)
self._depgraph = depgraph
class TargetsTreeGenerated(Event):
"""
Event when a set of buildable targets has been generated
"""
def __init__(self, model):
Event.__init__(self)
self._model = model
class MsgBase(Event):
"""Base class for messages"""