From: Fabian Groffen Date: Thu, 19 Nov 2009 19:48:32 +0000 (-0000) Subject: Merged from trunk -r14819:14820 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=33fb252778cf123df6dd01dc43126d23dd479c89;p=portage.git Merged from trunk -r14819:14820 | 14820 | Inside LinkageMap.rebuild(), ensure that all preserved | | zmedico | libraries have an entry in self._obj_properties, even when | | | they fail to appear in scanelf output. This is important in | | | order to prevent findConsumers from raising an unwanted | | | KeyError. | svn path=/main/branches/prefix/; revision=14848 --- diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index a2a40c540..c305f9c80 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -338,9 +338,11 @@ class LinkageMap(object): # have to call scanelf for preserved libs here as they aren't # registered in NEEDED.ELF.2 files + plibs = set() if self._dbapi.plib_registry and self._dbapi.plib_registry.getPreservedLibs(): args = [EPREFIX+"/usr/bin/scanelf", "-qF", "%a;%F;%S;%r;%n"] for items in self._dbapi.plib_registry.getPreservedLibs().values(): + plibs.update(items) args.extend(os.path.join(root, x.lstrip("." + os.sep)) \ for x in items) try: @@ -370,9 +372,20 @@ class LinkageMap(object): level=logging.ERROR, noiselevel=-1) continue fields[1] = fields[1][root_len:] + plibs.discard(fields[1]) lines.append(";".join(fields)) proc.wait() + if plibs: + # Preserved libraries that did not appear in the scanelf output. + # This is known to happen with statically linked libraries. + # Generate dummy lines for these, so we can assume that every + # preserved library has an entry in self._obj_properties. This + # is important in order to prevent findConsumers from raising + # an unwanted KeyError. + for x in plibs: + lines.append(";".join(['', x, '', '', ''])) + for l in lines: l = l.rstrip("\n") if not l: