diff options
author | Joshua Lock <josh@linux.intel.com> | 2011-01-07 11:45:00 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-02-24 15:54:51 +0000 |
commit | dcfc5ae7b1f5925587b0675e1cba6c60f098267c (patch) | |
tree | 77317e46f6c24d16ea63cd13df4eff30c8d6beb1 /bitbake/lib | |
parent | 3939a216a53f58831e640e85ed95f7edff3ca76f (diff) | |
download | poky-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>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 67 |
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): |