diff options
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/command.py | 11 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 58 |
2 files changed, 56 insertions, 13 deletions
diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py index be269372f0..06e886973b 100644 --- a/bitbake/lib/bb/command.py +++ b/bitbake/lib/bb/command.py | |||
@@ -242,14 +242,21 @@ class CommandsAsync: | |||
242 | included in the package list. | 242 | included in the package list. |
243 | If pkg_list provided use that list (plus any extras brought in by | 243 | If pkg_list provided use that list (plus any extras brought in by |
244 | klass) rather than generating a tree for all packages. | 244 | klass) rather than generating a tree for all packages. |
245 | |||
246 | Add a new option "resolve" to indicate if we need to resolve the | ||
247 | replacement for "virtual/xxx" like pn. | ||
245 | """ | 248 | """ |
246 | klass = params[0] | 249 | klass = params[0] |
247 | if len(params) > 1: | 250 | resolve = False |
251 | if len(params) > 2: | ||
252 | pkg_list = params[1] | ||
253 | resolve = params[2] | ||
254 | elif len(params) > 1: | ||
248 | pkg_list = params[1] | 255 | pkg_list = params[1] |
249 | else: | 256 | else: |
250 | pkg_list = [] | 257 | pkg_list = [] |
251 | 258 | ||
252 | command.cooker.generateTargetsTree(klass, pkg_list) | 259 | command.cooker.generateTargetsTree(klass, pkg_list, resolve) |
253 | command.finishAsyncCommand() | 260 | command.finishAsyncCommand() |
254 | generateTargetsTree.needcache = True | 261 | generateTargetsTree.needcache = True |
255 | 262 | ||
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index b0b58a6fdb..91fdc96b8a 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -429,7 +429,20 @@ class BBCooker: | |||
429 | 429 | ||
430 | return depend_tree | 430 | return depend_tree |
431 | 431 | ||
432 | def generatePkgDepTreeData(self, pkgs_to_build, task): | 432 | def append_package(self, taskdata, depend_tree_package, package): |
433 | if package not in depend_tree_package: | ||
434 | targetid = taskdata.getrun_id(package) | ||
435 | if targetid in taskdata.run_targets and taskdata.run_targets[targetid]: | ||
436 | fnid = taskdata.run_targets[targetid][0] | ||
437 | fn = taskdata.fn_index[fnid] | ||
438 | pn = self.status.pkg_fn[fn] | ||
439 | version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] | ||
440 | depend_tree_package[package] = {} | ||
441 | depend_tree_package[package]["pn"] = pn | ||
442 | depend_tree_package[package]["filename"] = fn | ||
443 | depend_tree_package[package]["version"] = version | ||
444 | |||
445 | def generatePkgDepTreeData(self, pkgs_to_build, task, resolve=False): | ||
433 | """ | 446 | """ |
434 | Create a dependency tree of pkgs_to_build, returning the data. | 447 | Create a dependency tree of pkgs_to_build, returning the data. |
435 | """ | 448 | """ |
@@ -446,6 +459,7 @@ class BBCooker: | |||
446 | depend_tree["rdepends-pn"] = {} | 459 | depend_tree["rdepends-pn"] = {} |
447 | depend_tree["packages"] = {} | 460 | depend_tree["packages"] = {} |
448 | depend_tree["rdepends-pkg"] = {} | 461 | depend_tree["rdepends-pkg"] = {} |
462 | depend_tree["rrecs-pkg"] = {} | ||
449 | 463 | ||
450 | for task in xrange(len(tasks_fnid)): | 464 | for task in xrange(len(tasks_fnid)): |
451 | fnid = tasks_fnid[task] | 465 | fnid = tasks_fnid[task] |
@@ -456,6 +470,8 @@ class BBCooker: | |||
456 | lic = self.status.license[fn] | 470 | lic = self.status.license[fn] |
457 | section = self.status.section[fn] | 471 | section = self.status.section[fn] |
458 | description = self.status.description[fn] | 472 | description = self.status.description[fn] |
473 | rdepends = self.status.rundeps[fn] | ||
474 | rrecs = self.status.runrecs[fn] | ||
459 | if pn not in depend_tree["pn"]: | 475 | if pn not in depend_tree["pn"]: |
460 | depend_tree["pn"][pn] = {} | 476 | depend_tree["pn"][pn] = {} |
461 | depend_tree["pn"][pn]["filename"] = fn | 477 | depend_tree["pn"][pn]["filename"] = fn |
@@ -464,6 +480,7 @@ class BBCooker: | |||
464 | depend_tree["pn"][pn]["license"] = lic | 480 | depend_tree["pn"][pn]["license"] = lic |
465 | depend_tree["pn"][pn]["section"] = section | 481 | depend_tree["pn"][pn]["section"] = section |
466 | depend_tree["pn"][pn]["description"] = description | 482 | depend_tree["pn"][pn]["description"] = description |
483 | depend_tree["pn"][pn]["packages"] = rdepends.keys() | ||
467 | 484 | ||
468 | if fnid not in seen_fnids: | 485 | if fnid not in seen_fnids: |
469 | seen_fnids.append(fnid) | 486 | seen_fnids.append(fnid) |
@@ -471,25 +488,44 @@ class BBCooker: | |||
471 | 488 | ||
472 | depend_tree["depends"][pn] = [] | 489 | depend_tree["depends"][pn] = [] |
473 | for dep in taskdata.depids[fnid]: | 490 | for dep in taskdata.depids[fnid]: |
474 | depend_tree["depends"][pn].append(taskdata.build_names_index[dep]) | 491 | if resolve: |
492 | item = taskdata.build_names_index[dep] | ||
493 | pn_provider = "" | ||
494 | targetid = taskdata.getbuild_id(item) | ||
495 | if targetid in taskdata.build_targets and taskdata.build_targets[targetid]: | ||
496 | fnid = taskdata.build_targets[targetid][0] | ||
497 | fn_provider = taskdata.fn_index[fnid] | ||
498 | pn_provider = self.status.pkg_fn[fn_provider] | ||
499 | else: | ||
500 | pn_provider = item | ||
501 | depend_tree["depends"][pn].append(pn_provider) | ||
502 | else: | ||
503 | depend_tree["depends"][pn].append(taskdata.build_names_index[dep]) | ||
475 | 504 | ||
476 | depend_tree["rdepends-pn"][pn] = [] | 505 | depend_tree["rdepends-pn"][pn] = [] |
477 | for rdep in taskdata.rdepids[fnid]: | 506 | for rdep in taskdata.rdepids[fnid]: |
478 | depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep]) | 507 | depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep]) |
479 | 508 | ||
480 | rdepends = self.status.rundeps[fn] | ||
481 | for package in rdepends: | 509 | for package in rdepends: |
482 | depend_tree["rdepends-pkg"][package] = [] | 510 | depend_tree["rdepends-pkg"][package] = [] |
483 | for rdepend in rdepends[package]: | 511 | for rdepend in rdepends[package]: |
484 | depend_tree["rdepends-pkg"][package].append(rdepend) | 512 | depend_tree["rdepends-pkg"][package].append(rdepend) |
485 | packages.append(package) | 513 | if resolve: |
514 | self.append_package(taskdata, depend_tree["packages"], rdepend) | ||
515 | if not package in packages: | ||
516 | packages.append(package) | ||
517 | |||
518 | for package in rrecs: | ||
519 | depend_tree["rrecs-pkg"][package] = [] | ||
520 | for rrec in rrecs[package]: | ||
521 | depend_tree["rrecs-pkg"][package].append(rrec) | ||
522 | if resolve: | ||
523 | self.append_package(taskdata, depend_tree["packages"], rrec) | ||
524 | if not package in packages: | ||
525 | packages.append(package) | ||
486 | 526 | ||
487 | for package in packages: | 527 | for package in packages: |
488 | if package not in depend_tree["packages"]: | 528 | self.append_package(taskdata, depend_tree["packages"], package) |
489 | depend_tree["packages"][package] = {} | ||
490 | depend_tree["packages"][package]["pn"] = pn | ||
491 | depend_tree["packages"][package]["filename"] = fn | ||
492 | depend_tree["packages"][package]["version"] = version | ||
493 | 529 | ||
494 | return depend_tree | 530 | return depend_tree |
495 | 531 | ||
@@ -735,7 +771,7 @@ class BBCooker: | |||
735 | 771 | ||
736 | return pkg_list | 772 | return pkg_list |
737 | 773 | ||
738 | def generateTargetsTree(self, klass=None, pkgs=[]): | 774 | def generateTargetsTree(self, klass=None, pkgs=[], resolve=False): |
739 | """ | 775 | """ |
740 | Generate a dependency tree of buildable targets | 776 | Generate a dependency tree of buildable targets |
741 | Generate an event with the result | 777 | Generate an event with the result |
@@ -750,7 +786,7 @@ class BBCooker: | |||
750 | pkgs = pkgs + extra_pkgs | 786 | pkgs = pkgs + extra_pkgs |
751 | 787 | ||
752 | # generate a dependency tree for all our packages | 788 | # generate a dependency tree for all our packages |
753 | tree = self.generatePkgDepTreeData(pkgs, 'build') | 789 | tree = self.generatePkgDepTreeData(pkgs, 'build', resolve) |
754 | bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data) | 790 | bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data) |
755 | 791 | ||
756 | def buildWorldTargetList(self): | 792 | def buildWorldTargetList(self): |