summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2011-01-04 20:08:51 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-03-03 22:30:21 +0000
commited9178cc40c7659fda96f628aca5bcd13fd0bc61 (patch)
tree42662389c4b21475555516131e5d28daffc1dd31 /lib
parentef1ba917193412b8a437bb0f9164c1031a55def7 (diff)
downloadbitbake-ed9178cc40c7659fda96f628aca5bcd13fd0bc61.tar.gz
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 (From Poky rev: 1b3eb0c35f504e8f652303a4b238034ecc5c5d02) Signed-off-by: Joshua Lock <josh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/bb/command.py10
-rw-r--r--lib/bb/cooker.py25
-rw-r--r--lib/bb/event.py9
3 files changed, 44 insertions, 0 deletions
diff --git a/lib/bb/command.py b/lib/bb/command.py
index c5c8de190..d84898a84 100644
--- a/lib/bb/command.py
+++ b/lib/bb/command.py
@@ -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
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index 31dbb227a..89a2d604a 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -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"
diff --git a/lib/bb/event.py b/lib/bb/event.py
index 5c0db1862..2acf9b119 100644
--- a/lib/bb/event.py
+++ b/lib/bb/event.py
@@ -351,6 +351,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"""