diff options
author | Marius Mauch <genone@gentoo.org> | 2008-06-17 17:03:40 +0000 |
---|---|---|
committer | Marius Mauch <genone@gentoo.org> | 2008-06-17 17:03:40 +0000 |
commit | 467975ea2355033e6fa6a8fab835b42a8a1dab39 (patch) | |
tree | e619ea8f119379b0d3141563d70a27f0498be493 | |
parent | 3aebdba090309445bfd509370f3ef759e1b6a3b5 (diff) | |
download | portage-467975ea2355033e6fa6a8fab835b42a8a1dab39.tar.gz portage-467975ea2355033e6fa6a8fab835b42a8a1dab39.tar.bz2 portage-467975ea2355033e6fa6a8fab835b42a8a1dab39.zip |
Do not preserve the master link of a library to avoid packages being linked against preserved libs on rebuilds
svn path=/main/trunk/; revision=10693
-rw-r--r-- | pym/portage/dbapi/vartree.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index b184630ac..2dbb747a0 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -180,6 +180,17 @@ class LinkageMap(object): self._libs = libs self._obj_properties = obj_properties + return self._obj_properties[obj] + + def isMasterLink(self, obj): + basename = os.path.basename(obj) + if obj not in self._obj_properties: + obj = os.path.realpath(obj) + if obj not in self._obj_properties: + raise KeyError("%s not in object list" % obj) + soname = self._obj_properties[obj][3] + return (len(basename) < len(soname)) + def listLibraryObjects(self): rValue = [] if not self._libs: @@ -2010,6 +2021,9 @@ class dblink(object): if not has_external_consumers(lib, old_contents, candidates): candidates.remove(lib) continue + if linkmap.isMasterLink(lib): + candidates.remove(lib) + continue # only preserve the lib if there is no other copy to use for each consumer keep = False for c in linkmap.findConsumers(lib): |