[oe-commits] org.oe.dev package.bbclass: Improve dependency chain handling function to differentiate when multiple -dev or -dbg packages are generated and when a single one is generated (from poky)

rpurdie commit openembedded-commits at lists.openembedded.org
Sun Aug 12 00:17:00 UTC 2007


package.bbclass: Improve dependency chain handling function to differentiate when multiple -dev or -dbg packages are generated and when a single one is generated (from poky)

Author: rpurdie at openembedded.org
Branch: org.openembedded.dev
Revision: 5036cde1a3176fb294f701fee3a424b9a28f58b2
ViewMTN: http://monotone.openembedded.org/revision.psp?id=5036cde1a3176fb294f701fee3a424b9a28f58b2
Files:
1
classes/package.bbclass
Diffs:

#
# mt diff -r3880dfde0e0c774961406eff34e1cbcb4f45d41d -r5036cde1a3176fb294f701fee3a424b9a28f58b2
#
# 
# 
# patch "classes/package.bbclass"
#  from [010187e0a56fb5d49e063f35a0c28c703cbaea84]
#    to [a4793b3e861b8e79ae72fd8fb897b01aff983b38]
# 
============================================================
--- classes/package.bbclass	010187e0a56fb5d49e063f35a0c28c703cbaea84
+++ classes/package.bbclass	a4793b3e861b8e79ae72fd8fb897b01aff983b38
@@ -823,54 +823,81 @@ python package_depchains() {
 python package_depchains() {
 	"""
 	For a given set of prefix and postfix modifiers, make those packages
-	RRECOMMENDS on the corresponding packages for its DEPENDS.
+	RRECOMMENDS on the corresponding packages for its RDEPENDS.
 
 	Example:  If package A depends upon package B, and A's .bb emits an
 	A-dev package, this would make A-dev Recommends: B-dev.
+
+	If only one of a given suffix is specified, it will take the RRECOMMENDS
+	based on the RDEPENDS of *all* other packages. If more than one of a given 
+	suffix is specified, its will only use the RDEPENDS of the single parent 
+	package.
 	"""
 
 	packages  = bb.data.getVar('PACKAGES', d, 1)
 	postfixes = (bb.data.getVar('DEPCHAIN_POST', d, 1) or '').split()
 	prefixes  = (bb.data.getVar('DEPCHAIN_PRE', d, 1) or '').split()
 
-	def pkg_addrrecs(pkg, base, func, d):
-		rdepends = explode_deps(bb.data.getVar('RDEPENDS_' + base, d, 1) or bb.data.getVar('RDEPENDS', d, 1) or "")
-		# bb.note('rdepends for %s is %s' % (base, rdepends))
+	def pkg_addrrecs(pkg, base, suffix, getname, rdepends, d):
+		def packaged(pkg, d):
+			return os.access(bb.data.expand('${STAGING_DIR}/pkgdata/runtime/%s.packaged' % pkg, d), os.R_OK)
+
+                #bb.note('rdepends for %s is %s' % (base, rdepends))
+
 		rreclist = explode_deps(bb.data.getVar('RRECOMMENDS_' + pkg, d, 1) or bb.data.getVar('RRECOMMENDS', d, 1) or "")
 
 		for depend in rdepends:
-			split_depend = depend.split(' (')
-			name = split_depend[0].strip()
-			func(rreclist, name)
+			pkgname = getname(depend, suffix)
+			if not pkgname in rreclist and packaged(pkgname, d):
+				rreclist.append(pkgname)
 
+		#bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist)))
 		bb.data.setVar('RRECOMMENDS_%s' % pkg, ' '.join(rreclist), d)
 
-	def packaged(pkg, d):
-		return os.access(bb.data.expand('${STAGING_DIR}/pkgdata/runtime/%s.packaged' % pkg, d), os.R_OK)
+	def add_dep(list, dep):
+		dep = dep.split(' (')[0].strip()
+		if dep not in list:
+			list.append(dep)
 
+	rdepends = []
+	for dep in explode_deps(bb.data.getVar('RDEPENDS', d, 1) or ""):
+		add_dep(rdepends, dep)
+
 	for pkg in packages.split():
-		for postfix in postfixes:
-			def func(list, name):
-				pkg = '%s%s' % (name, postfix)
-				if not pkg in list:
-					if packaged(pkg, d):
-						list.append(pkg)
+		for dep in explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 1) or ""):
+			add_dep(rdepends, dep)
 
-			base = pkg[:-len(postfix)]
+	#bb.note('rdepends is %s' % rdepends)
+
+	def post_getname(name, suffix):
+		return '%s%s' % (name, suffix)
+	def pre_getname(name, suffix):
+		return '%s%s' % (suffix, name)
+
+	pkgs = {}
+	for pkg in packages.split():
+		for postfix in postfixes:
 			if pkg.endswith(postfix):
-				pkg_addrrecs(pkg, base, func, d)
-				continue
+				if not postfix in pkgs:
+					pkgs[postfix] = {}
+				pkgs[postfix][pkg] = (pkg[:-len(postfix)], post_getname)
 
 		for prefix in prefixes:
-			def func(list, name):
-				pkg = '%s%s' % (prefix, name)
-				if not pkg in list:
-					if packaged(pkg, d):
-						list.append(pkg)
+			if pkg.startswith(prefix):
+				if not prefix in pkgs:
+					pkgs[prefix] = {}
+				pkgs[prefix][pkg] = (pkg[:-len(prefix)], pre_getname)
 
-			base = pkg[len(prefix):]
-			if pkg.startswith(prefix):
-				pkg_addrrecs(pkg, base, func, d)
+	for suffix in pkgs:
+		for pkg in pkgs[suffix]:
+			(base, func) = pkgs[suffix][pkg]
+			if len(pkgs[suffix]) == 1:
+				pkg_addrrecs(pkg, base, suffix, func, rdepends, d)
+			else:
+				rdeps = []
+				for dep in explode_deps(bb.data.getVar('RDEPENDS_' + base, d, 1) or bb.data.getVar('RDEPENDS', d, 1) or ""):
+					add_dep(rdeps, dep)
+				pkg_addrrecs(pkg, base, suffix, func, rdeps, d)
 }
 
 






More information about the Openembedded-commits mailing list