aboutsummaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2006-05-27 23:56:07 +0000
committerHolger Hans Peter Freyther <zecke@selfish.org>2006-05-27 23:56:07 +0000
commit98b125fde0bc73627aaeca7ed7bd5cc027f1a942 (patch)
treef5decd1158a92c43bc8a4cb1f81f387834c9a78d /bin
parent1f3bf62b33dc7a8dfdb872cae5d0b747e30774e4 (diff)
downloadbitbake-98b125fde0bc73627aaeca7ed7bd5cc027f1a942.tar.gz
bitbake/bin/bitbake: Add first version of mixed dependency handling
First version of showing DEPENDS and RDEPENDS in the same graph. The is one issue that some provider get handled twice and we see two arrows.
Diffstat (limited to 'bin')
-rwxr-xr-xbin/bitbake59
1 files changed, 49 insertions, 10 deletions
diff --git a/bin/bitbake b/bin/bitbake
index 894d7895d..056c6b2c9 100755
--- a/bin/bitbake
+++ b/bin/bitbake
@@ -506,30 +506,27 @@ class BBCooker:
print ignore_deps
- rdepends_file = file('rdepends.dot', 'w' )
depends_file = file('depends.dot', 'w' )
alldepends_file = file('alldepends.dot', 'w' )
# setup the graphs
print >> depends_file, "digraph depends {"
- print >> rdepends_file, "digraph rdepends {"
print >> alldepends_file, "digraph alldepends {"
# try to avoid adding the same rdepends over an over again
- seen_depends = {}
- added_depends_error = False
+ seen_depends = []
+ seen_rdepends = []
+
def add_depends(package_list):
"""
Add all depends of all packages from this list
"""
- for package in package_list:
- if package in seen_depends or package in ignore_deps:
- continue
- else:
- seen_depends[package] = 1
+ package_list = filter( lambda x: x not in seen_depends and not x in ignore_deps, package_list )
+ for package in package_list:
+ seen_depends.append( package )
if not package in self.status.providers:
"""
We have not seen this name -> error in
@@ -557,12 +554,54 @@ class BBCooker:
print >> depends_file, '"%(package)s" -> "%(depend)s"' % vars()
+ def add_all_depends( package_list ):
+ """
+ Add both DEPENDS and RDEPENDS. RDEPENDS will get dashed
+ lines
+ """
+ package_list = filter( lambda x: x not in seen_rdepends and not x in ignore_deps, package_list )
+
+ for package in package_list:
+ seen_rdepends.append( package )
+ if not package in self.status.providers:
+ """
+ We have not seen this name -> error in
+ dependency handling
+ """
+ bb.note( "ERROR with provider: %(package)s" % vars() )
+ print >> alldepends_file, '"%(package)s" -> ERROR' % vars()
+ continue
+
+ # get all providers for this package
+ providers = self.status.providers[package]
+
+ # now let us find the bestProvider for it
+ fn = self.filterProviders(providers, package)[0]
+
+ depends = bb.utils.explode_deps(self.bb_cache.getVar('DEPENDS', fn, True) or "")
+ rdepends = bb.utils.explode_deps(self.bb_cache.getVar('RDEPENDS', fn, True) or "")
+ version = self.bb_cache.getVar('PV', fn, True ) + '-' + self.bb_cache.getVar('PR', fn, True)
+ add_all_depends ( depends+rdepends )
+
+ # now create the node
+ print >> alldepends_file, '"%(package)s" [label="%(package)s\\n%(version)s"]' % vars()
+
+ depends = filter( (lambda x: x not in ignore_deps), depends )
+ rdepends = filter( (lambda x: x not in ignore_deps), rdepends )
+ for depend in depends:
+ print >> alldepends_file, '"%(package)s" -> "%(depend)s"' % vars()
+ for depend in rdepends:
+ print >> alldepends_file, '"%(package)s" -> "%(depend)s" [style=dashed]' % vars()
+
+
+
+
# start with the initial list
add_depends( pkgs_to_build )
+ add_all_depends( pkgs_to_build )
# finish it up
print >> depends_file, "}"
- print >> rdepends_file, "}"
print >> alldepends_file, "}"
def filterProviders(self, providers, item):