raise
return
+ libpaths = set(portage.util.getlibpaths(
+ mysettings["ROOT"], env=mysettings))
+ libpath_inodes = set()
+ for libpath in libpaths:
+ libdir = os.path.join(mysettings["ROOT"], libpath.lstrip(os.sep))
+ try:
+ s = os.stat(libdir)
+ except OSError:
+ continue
+ else:
+ libpath_inodes.add((s.st_dev, s.st_ino))
+
+ is_libdir_cache = {}
+
+ def is_libdir(obj_parent):
+ try:
+ return is_libdir_cache[obj_parent]
+ except KeyError:
+ pass
+
+ rval = False
+ if obj_parent in libpaths:
+ rval = True
+ else:
+ parent_path = os.path.join(mysettings["ROOT"],
+ obj_parent.lstrip(os.sep))
+ try:
+ s = os.stat(parent_path)
+ except OSError:
+ pass
+ else:
+ if (s.st_dev, s.st_ino) in libpath_inodes:
+ rval = True
+
+ is_libdir_cache[obj_parent] = rval
+ return rval
+
missing_symlinks = []
# Parse NEEDED.ELF.2 like LinkageMapELF.rebuild() does.
obj, soname = fields[1:3]
if not soname:
continue
+ if not is_libdir(os.path.dirname(obj)):
+ continue
obj_file_path = os.path.join(image_dir, obj.lstrip(os.sep))
sym_file_path = os.path.join(os.path.dirname(obj_file_path), soname)
else:
yield (x, None)
-def getlibpaths(root):
+def getlibpaths(root, env=None):
""" Return a list of paths that are used for library lookups """
-
+ if env is None:
+ env = os.environ
# the following is based on the information from ld.so(8)
- rval = os.environ.get("LD_LIBRARY_PATH", "").split(":")
+ rval = env.get("LD_LIBRARY_PATH", "").split(":")
rval.extend(grabfile(os.path.join(root, "etc", "ld.so.conf")))
rval.append("/usr/lib")
rval.append("/lib")