Skip to contentSkip to conversation

dbg/dev package dependency improvements

PATCH Applied Paul Eggleton 2 participants 4 messages Jul 26, 2012 – Jul 29, 2012

lore
Share & tools
lore
#0 lore raw

cover dbg/dev package dependency improvements

The following changes since commit 14b70cd222519e5bccaca955334787f123d9fc54:

base/perlnative/pythonnative/gzipnative: Add a new variable to enable easier handling of native path issues (2012-07-26 14:55:35 +0100)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib paule/dbgdeps
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/dbgdeps

Paul Eggleton (2):
classes/package: do not add self-dependencies to dev/dbg packages classes/package: reduce dbg package dependencies

 meta/classes/package.bbclass |   36 +++++++++++++++++++++++++++++-------
 meta/classes/task.bbclass    |    3 +++
 2 files changed, 32 insertions(+), 7 deletions(-)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 1/2 classes/package: do not add self-dependencies to dev/dbg packages

Avoid adding dependencies to dev and dbg packages on themselves via the DEPCHAIN_* handling code. These don't actually cause any problems, but they do complicate dependency graphs.

---
 meta/classes/package.bbclass |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
meta/classes/package.bbclass +2 -2
index ea199d3..962abcd 100644
@@ -1629,7 +1629,7 @@ python package_depchains() {
                 depend = depend.replace('-dbg', '')
             pkgname = getname(depend, suffix)
             #bb.note("Adding %s for %s" % (pkgname, depend))
-            if pkgname not in rreclist:
+            if pkgname not in rreclist and pkgname != pkg:
                 rreclist[pkgname] = ""
 
         #bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist)))
@@ -1650,7 +1650,7 @@ python package_depchains() {
                 depend = depend.replace('-dbg', '')
             pkgname = getname(depend, suffix)
             #bb.note("Adding %s for %s" % (pkgname, depend))
-            if pkgname not in rreclist:
+            if pkgname not in rreclist and pkgname != pkg:
                 rreclist[pkgname] = ""
 
         #bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist)))
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH 2/2 classes/package: reduce dbg package dependencies

In reply to Paul Eggleton

Make dbg package dependencies added via DEPCHAIN_POST less aggressive - only add dependencies on dbg packages for shared library dependencies. This avoids dragging in extraneous packages (such as eglibc-dbg forcing bash-dbg to be installed) whilst preserving the ability to easily debug into shared libraries in use by an application by just requesting the installation of the single dbg package for that application.

For task recipes however we preserve the previous behaviour, since when you install task-xxx-dbg you expect the dbg packages for every package in the task to be installed. Unfortunately not all of our tasks inherit from task.bbclass so we just use a name match - this should be tidied up later.

Fixes [YOCTO #2599].

---
 meta/classes/package.bbclass |   32 +++++++++++++++++++++++++++-----
 meta/classes/task.bbclass    |    3 +++
 2 files changed, 30 insertions(+), 5 deletions(-)
meta/classes/package.bbclass +27 -5
index 962abcd..efb03f8 100644
@@ -1580,19 +1580,28 @@ python package_do_pkgconfig () {
     bb.utils.unlockfile(lf)
 }
 
-python read_shlibdeps () {
+def read_libdep_files(d):
+    pkglibdeps = {}
     packages = d.getVar('PACKAGES', True).split()
     for pkg in packages:
-        rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, False) or d.getVar('RDEPENDS', False) or "")
-
+        pkglibdeps[pkg] = []
         for extension in ".shlibdeps", ".pcdeps", ".clilibdeps":
             depsfile = d.expand("${PKGDEST}/" + pkg + extension)
             if os.access(depsfile, os.R_OK):
                 fd = file(depsfile)
                 lines = fd.readlines()
                 fd.close()
-                for l in lines:
-                    rdepends[l.rstrip()] = ""
+                pkglibdeps[pkg].extend([l.rstrip() for l in lines])
+    return pkglibdeps
+
+python read_shlibdeps () {
+    pkglibdeps = read_libdep_files(d)
+
+    packages = d.getVar('PACKAGES', True).split()
+    for pkg in packages:
+        rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, False) or d.getVar('RDEPENDS', False) or "")
+        for dep in pkglibdeps[pkg]:
+            rdepends[dep] = ""
         d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
 }
 
@@ -1694,6 +1703,15 @@ python package_depchains() {
                     pkgs[prefix] = {}
                 pkgs[prefix][pkg] = (pkg[:-len(prefix)], pre_getname)
 
+    if "-dbg" in pkgs:
+        pkglibdeps = read_libdep_files(d)
+        pkglibdeplist = []
+        for pkg in pkglibdeps:
+            for dep in pkglibdeps[pkg]:
+                add_dep(pkglibdeplist, dep)
+        # FIXME this should not look at PN once all task recipes inherit from task.bbclass
+        dbgdefaultdeps = ((d.getVar('DEPCHAIN_DBGDEFAULTDEPS', True) == '1') or (d.getVar('PN', True) or '').startswith('task-'))
+
     for suffix in pkgs:
         for pkg in pkgs[suffix]:
             if d.getVarFlag('RRECOMMENDS_' + pkg, 'nodeprrecs'):
@@ -1701,6 +1719,10 @@ python package_depchains() {
             (base, func) = pkgs[suffix][pkg]
             if suffix == "-dev":
                 pkg_adddeprrecs(pkg, base, suffix, func, depends, d)
+            elif suffix == "-dbg":
+                if not dbgdefaultdeps:
+                    pkg_addrrecs(pkg, base, suffix, func, pkglibdeplist, d)
+                    continue
             if len(pkgs[suffix]) == 1:
                 pkg_addrrecs(pkg, base, suffix, func, rdepends, d)
             else:
meta/classes/task.bbclass +3 -0
index 22c2fd3..6ec154a 100644
@@ -25,3 +25,6 @@ python () {
     d.setVar('PACKAGES', ' '.join(packages+genpackages))
 }
 
+# We don't want to look at shared library dependencies for the
+# dbg packages
+DEPCHAIN_DBGDEFAULTDEPS = "1"
Signature · 1 line
1.7.9.5
#3 lore raw
In reply to Paul Eggleton
Quoted 4 lines · Paul Eggleton

The following changes since commit 14b70cd222519e5bccaca955334787f123d9fc54:

base/perlnative/pythonnative/gzipnative: Add a new variable to enable easier handling of native path issues (2012-07-26 14:55:35 +0100)

Quoted 8 lines

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib paule/dbgdeps
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/dbgdeps

Paul Eggleton (2):
classes/package: do not add self-dependencies to dev/dbg packages classes/package: reduce dbg package dependencies

Merged to master, thanks.

Richard