summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2011-01-07 11:45:00 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-02-24 15:54:51 +0000
commitdcfc5ae7b1f5925587b0675e1cba6c60f098267c (patch)
tree77317e46f6c24d16ea63cd13df4eff30c8d6beb1
parent3939a216a53f58831e640e85ed95f7edff3ca76f (diff)
downloadpoky-dcfc5ae7b1f5925587b0675e1cba6c60f098267c.tar.gz
bitbake/cooker: add generateTargetsTree method
The generateTargetsTree() command needs to return a model which includes more metadata than the one generated by generateDepTree(). This patch adds a new method generateTargetsTreeData() to the cooker, based on generateDepData(), and switches generateTargetsTree() to use it. Signed-off-by: Joshua Lock <josh@linux.intel.com>
-rw-r--r--bitbake/lib/bb/cooker.py67
1 files changed, 64 insertions, 3 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 23388d8c97..4a8e50678f 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -453,7 +453,10 @@ class BBCooker:
453 453
454 bb.event.fire(bb.event.ConfigFilesFound(var, possible), self.configuration.data) 454 bb.event.fire(bb.event.ConfigFilesFound(var, possible), self.configuration.data)
455 455
456 def checkInheritsClass(self, klass): 456 def findInheritsClass(self, klass):
457 """
458 Find all recipes which inherit the specified class
459 """
457 pkg_list = [] 460 pkg_list = []
458 461
459 for pfn in self.status.pkg_fn: 462 for pfn in self.status.pkg_fn:
@@ -463,6 +466,64 @@ class BBCooker:
463 466
464 return pkg_list 467 return pkg_list
465 468
469 def generateTargetsTreeData(self, pkgs_to_build, task):
470 """
471 Create a tree of pkgs_to_build metadata, returning the data.
472 """
473
474 # Need files parsed
475 self.updateCache()
476
477 # If we are told to do the None task then query the default task
478 if (task == None):
479 task = self.configuration.cmd
480
481 pkgs_to_build = self.checkPackages(pkgs_to_build)
482
483 localdata = data.createCopy(self.configuration.data)
484 bb.data.update_data(localdata)
485 bb.data.expandKeys(localdata)
486 taskdata = bb.taskdata.TaskData(self.configuration.abort)
487
488 runlist = []
489 for k in pkgs_to_build:
490 taskdata.add_provider(localdata, self.status, k)
491 runlist.append([k, "do_%s" % task])
492 taskdata.add_unresolved(localdata, self.status)
493
494 rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist)
495 rq.rqdata.prepare()
496
497 seen_fnids = []
498 target_tree = {}
499 target_tree["depends"] = {}
500 target_tree["pn"] = {}
501 target_tree["rdepends-pn"] = {}
502
503 for task in xrange(len(rq.rqdata.runq_fnid)):
504 taskname = rq.rqdata.runq_task[task]
505 fnid = rq.rqdata.runq_fnid[task]
506 fn = taskdata.fn_index[fnid]
507 pn = self.status.pkg_fn[fn]
508 version = "%s:%s-%s" % self.status.pkg_pepvpr[fn]
509 if pn not in target_tree["pn"]:
510 target_tree["pn"][pn] = {}
511 target_tree["pn"][pn]["filename"] = fn
512 target_tree["pn"][pn]["version"] = version
513 if fnid not in seen_fnids:
514 seen_fnids.append(fnid)
515 packages = []
516
517 target_tree["depends"][pn] = []
518 for dep in taskdata.depids[fnid]:
519 target_tree["depends"][pn].append(taskdata.build_names_index[dep])
520
521 target_tree["rdepends-pn"][pn] = []
522 for rdep in taskdata.rdepids[fnid]:
523 target_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep])
524
525 return target_tree
526
466 def generateTargetsTree(self, klass): 527 def generateTargetsTree(self, klass):
467 """ 528 """
468 Generate a dependency tree of buildable targets 529 Generate a dependency tree of buildable targets
@@ -472,11 +533,11 @@ class BBCooker:
472 # if inherited_class passed ensure all recipes which inherit the 533 # if inherited_class passed ensure all recipes which inherit the
473 # specified class are included in pkgs 534 # specified class are included in pkgs
474 if klass: 535 if klass:
475 extra_pkgs = self.checkInheritsClass(klass) 536 extra_pkgs = self.findInheritsClass(klass)
476 pkgs = pkgs + extra_pkgs 537 pkgs = pkgs + extra_pkgs
477 538
478 # generate a dependency tree for all our packages 539 # generate a dependency tree for all our packages
479 tree = self.generateDepTreeData(pkgs, 'build') 540 tree = self.generateTargetsTreeData(pkgs, 'build')
480 bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data) 541 bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data)
481 542
482 def buildWorldTargetList(self): 543 def buildWorldTargetList(self):