Skip to content
Snippets Groups Projects

sodepends: fix listing binaries, check libdepends, libprovides

Merged Balló György requested to merge bgyorgy/namcap:fix-sodepends-list into master
1 unresolved thread
+ 11
4
@@ -73,7 +73,7 @@ def scanlibs(fileobj, filename, custom_libs, liblist, libdepends, libprovides):
# We didn't know about the library, so add it for fail later
liblist[libname].add(filename)
def finddepends(liblist, infos):
def finddepends(liblist):
"""
Find packages owning a list of libraries
@@ -81,9 +81,11 @@ def finddepends(liblist, infos):
dependlist -- a dictionary { package => set(libraries) }
libdependlist -- a dictionary { soname => package }
orphans -- the list of libraries without owners
missing_provides -- the list of sonames without providers
"""
dependlist = defaultdict(set)
libdependlist = {}
missing_provides = {}
somatches = {}
actualpath = {}
@@ -118,10 +120,10 @@ def finddepends(liblist, infos):
if soname in stripped_provides:
libdependlist[soname] = pkg.name
else:
infos.append(("libdepends-missing-provides %s %s", (soname, pkg.name )))
missing_provides[soname] = pkg.name
orphans = list(knownlibs - foundlibs)
return dependlist, libdependlist, orphans
return dependlist, libdependlist, orphans, missing_provides
def filllibcache():
var = subprocess.Popen('ldconfig -p',
@@ -149,6 +151,7 @@ class SharedLibsRule(TarballRule):
libprovides = defaultdict(set)
dependlist = {}
libdependlist = {}
missing_provides = {}
filllibcache()
os.environ['LC_ALL'] = 'C'
pkg_so_files = ['/' + n for n in tar.getnames() if '.so' in n]
@@ -169,12 +172,16 @@ class SharedLibsRule(TarballRule):
f.close()
# Ldd all the files and find all the link and script dependencies
dependlist, libdependlist, orphans = finddepends(liblist, self.infos)
dependlist, libdependlist, orphans, missing_provides = finddepends(liblist)
# Handle "no package associated" errors
self.warnings.extend([("library-no-package-associated %s", i)
for i in orphans])
# Hanle when a required soname does not provided by the associated package yet
self.infos.extend([("libdepends-missing-provides %s %s", (i, missing_provides[i]))
for i in missing_provides])
# Print link-level deps
for pkg, libraries in dependlist.items():
if isinstance(libraries, set):
Loading