diff options
-rw-r--r-- | meta/classes/package.bbclass | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index d7de72bda3..988e148893 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -1375,7 +1375,9 @@ python package_do_shlibs() { fd.close() for l in lines: s = l.strip().split(":") - shlib_provider[s[0]] = (dep_pkg, s[2]) + if s[0] not in shlib_provider: + shlib_provider[s[0]] = {} + shlib_provider[s[0]][s[1]] = (dep_pkg, s[2]) def linux_so(file, needed, sonames, renames, pkgver): needs_ldconfig = False @@ -1518,13 +1520,15 @@ python package_do_shlibs() { if len(sonames): fd = open(shlibs_file, 'w') for s in sonames: - if s[0] in shlib_provider: - (old_pkg, old_pkgver) = shlib_provider[s[0]] + if s[0] in shlib_provider and s[1] in shlib_provider[s[0]]: + (old_pkg, old_pkgver) = shlib_provider[s[0]][s[1]] if old_pkg != pkg: bb.warn('%s-%s was registered as shlib provider for %s, changing it to %s-%s because it was built later' % (old_pkg, old_pkgver, s[0], pkg, pkgver)) bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s[0])) fd.write(s[0] + ':' + s[1] + ':' + s[2] + '\n') - shlib_provider[s[0]] = (pkg, pkgver) + if s[0] not in shlib_provider: + shlib_provider[s[0]] = {} + shlib_provider[s[0]][s[1]] = (pkg, pkgver) fd.close() if needs_ldconfig and use_ldconfig: bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg) @@ -1539,6 +1543,7 @@ python package_do_shlibs() { assumed_libs = d.getVar('ASSUME_SHLIBS', True) if assumed_libs: + libdir = d.getVar("libdir", True) for e in assumed_libs.split(): l, dep_pkg = e.split(":") lib_ver = None @@ -1546,7 +1551,9 @@ python package_do_shlibs() { if len(dep_pkg) == 2: lib_ver = dep_pkg[1] dep_pkg = dep_pkg[0] - shlib_provider[l] = (dep_pkg, lib_ver) + shlib_provider[l][libdir] = (dep_pkg, lib_ver) + + libsearchpath = [d.getVar('libdir', True), d.getVar('base_libdir', True)] for pkg in packages.split(): bb.debug(2, "calculating shlib requirements for %s" % pkg) @@ -1562,21 +1569,27 @@ python package_do_shlibs() { bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0])) continue if n[0] in shlib_provider.keys(): - (dep_pkg, ver_needed) = shlib_provider[n[0]] + match = None + for p in n[2] + libsearchpath: + if p in shlib_provider[n[0]]: + match = p + break + if match: + (dep_pkg, ver_needed) = shlib_provider[n[0]][match] - bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1])) + bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1])) - if dep_pkg == pkg: - continue + if dep_pkg == pkg: + continue - if ver_needed: - dep = "%s (>= %s)" % (dep_pkg, ver_needed) - else: - dep = dep_pkg - if not dep in deps: - deps.append(dep) - else: - bb.note("Couldn't find shared library provider for %s, used by files: %s" % (n[0], n[1])) + if ver_needed: + dep = "%s (>= %s)" % (dep_pkg, ver_needed) + else: + dep = dep_pkg + if not dep in deps: + deps.append(dep) + continue + bb.note("Couldn't find shared library provider for %s, used by files: %s" % (n[0], n[1])) deps_file = os.path.join(pkgdest, pkg + ".shlibdeps") if os.path.exists(deps_file): |