return depend_tree
- def generatePkgDepTreeData(self, pkgs_to_build, task):
+ def append_package(self, taskdata, depend_tree_package, package):
+ if package not in depend_tree_package:
+ targetid = taskdata.getrun_id(package)
+ if targetid in taskdata.run_targets and taskdata.run_targets[targetid]:
+ fnid = taskdata.run_targets[targetid][0]
+ fn = taskdata.fn_index[fnid]
+ pn = self.status.pkg_fn[fn]
+ version = "%s:%s-%s" % self.status.pkg_pepvpr[fn]
+ depend_tree_package[package] = {}
+ depend_tree_package[package]["pn"] = pn
+ depend_tree_package[package]["filename"] = fn
+ depend_tree_package[package]["version"] = version
+
+ def generatePkgDepTreeData(self, pkgs_to_build, task, resolve=False):
"""
Create a dependency tree of pkgs_to_build, returning the data.
"""
depend_tree["rdepends-pn"] = {}
depend_tree["packages"] = {}
depend_tree["rdepends-pkg"] = {}
+ depend_tree["rrecs-pkg"] = {}
for task in xrange(len(tasks_fnid)):
fnid = tasks_fnid[task]
lic = self.status.license[fn]
section = self.status.section[fn]
description = self.status.description[fn]
+ rdepends = self.status.rundeps[fn]
+ rrecs = self.status.runrecs[fn]
if pn not in depend_tree["pn"]:
depend_tree["pn"][pn] = {}
depend_tree["pn"][pn]["filename"] = fn
depend_tree["pn"][pn]["license"] = lic
depend_tree["pn"][pn]["section"] = section
depend_tree["pn"][pn]["description"] = description
+ depend_tree["pn"][pn]["packages"] = rdepends.keys()
if fnid not in seen_fnids:
seen_fnids.append(fnid)
depend_tree["depends"][pn] = []
for dep in taskdata.depids[fnid]:
- depend_tree["depends"][pn].append(taskdata.build_names_index[dep])
+ if resolve:
+ item = taskdata.build_names_index[dep]
+ pn_provider = ""
+ targetid = taskdata.getbuild_id(item)
+ if targetid in taskdata.build_targets and taskdata.build_targets[targetid]:
+ fnid = taskdata.build_targets[targetid][0]
+ fn_provider = taskdata.fn_index[fnid]
+ pn_provider = self.status.pkg_fn[fn_provider]
+ else:
+ pn_provider = item
+ depend_tree["depends"][pn].append(pn_provider)
+ else:
+ depend_tree["depends"][pn].append(taskdata.build_names_index[dep])
depend_tree["rdepends-pn"][pn] = []
for rdep in taskdata.rdepids[fnid]:
depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep])
- rdepends = self.status.rundeps[fn]
for package in rdepends:
depend_tree["rdepends-pkg"][package] = []
for rdepend in rdepends[package]:
depend_tree["rdepends-pkg"][package].append(rdepend)
- packages.append(package)
+ if resolve:
+ self.append_package(taskdata, depend_tree["packages"], rdepend)
+ if not package in packages:
+ packages.append(package)
+
+ for package in rrecs:
+ depend_tree["rrecs-pkg"][package] = []
+ for rrec in rrecs[package]:
+ depend_tree["rrecs-pkg"][package].append(rrec)
+ if resolve:
+ self.append_package(taskdata, depend_tree["packages"], rrec)
+ if not package in packages:
+ packages.append(package)
for package in packages:
- if package not in depend_tree["packages"]:
- depend_tree["packages"][package] = {}
- depend_tree["packages"][package]["pn"] = pn
- depend_tree["packages"][package]["filename"] = fn
- depend_tree["packages"][package]["version"] = version
+ self.append_package(taskdata, depend_tree["packages"], package)
return depend_tree
return pkg_list
- def generateTargetsTree(self, klass=None, pkgs=[]):
+ def generateTargetsTree(self, klass=None, pkgs=[], resolve=False):
"""
Generate a dependency tree of buildable targets
Generate an event with the result
pkgs = pkgs + extra_pkgs
# generate a dependency tree for all our packages
- tree = self.generatePkgDepTreeData(pkgs, 'build')
+ tree = self.generatePkgDepTreeData(pkgs, 'build', resolve)
bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data)
def buildWorldTargetList(self):