summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/classes/package.bbclass42
1 files changed, 20 insertions, 22 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index ea7591855e..1ef0c66ca0 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1382,20 +1382,25 @@ python package_do_shlibs() {
for l in lines:
shlib_provider[l.rstrip()] = (dep_pkg, lib_ver)
- def linux_so(file):
+ def linux_so(file, needed, sonames, renames):
needs_ldconfig = False
+ ldir = os.path.dirname(file).replace(pkgdest, '')
cmd = d.getVar('OBJDUMP', True) + " -p " + pipes.quote(file) + " 2>/dev/null"
fd = os.popen(cmd)
lines = fd.readlines()
fd.close()
+ rpath = []
+ for l in lines:
+ m = re.match("\s+RPATH\s+([^\s]*)", l)
+ if m:
+ rpaths = m.group(1).replace("$ORIGIN", ldir).split(":")
+ rpath = map(os.path.normpath, rpaths)
for l in lines:
m = re.match("\s+NEEDED\s+([^\s]*)", l)
if m:
- if m.group(1) not in needed[pkg]:
- needed[pkg].append(m.group(1))
- if m.group(1) not in needed_from:
- needed_from[m.group(1)] = []
- needed_from[m.group(1)].append(file)
+ dep = m.group(1)
+ if dep not in needed[pkg]:
+ needed[pkg].append((dep, file, rpath))
m = re.match("\s+SONAME\s+([^\s]*)", l)
if m:
this_soname = m.group(1)
@@ -1409,7 +1414,7 @@ python package_do_shlibs() {
renames.append((file, os.path.join(os.path.dirname(file), this_soname)))
return needs_ldconfig
- def darwin_so(file):
+ def darwin_so(file, needed, sonames, renames):
if not os.path.exists(file):
return
@@ -1464,14 +1469,8 @@ python package_do_shlibs() {
name = os.path.basename(dep).replace(".la", "")
elif dep.startswith("-l"):
name = dep.replace("-l", "lib")
- if pkg not in needed:
- needed[pkg] = []
if name and name not in needed[pkg]:
- needed[pkg].append(name)
- if name not in needed_from:
- needed_from[name] = []
- if lafile and lafile not in needed_from[name]:
- needed_from[name].append(lafile)
+ needed[pkg].append((name, lafile, []))
#bb.note("Adding %s for %s" % (name, pkg))
if d.getVar('PACKAGE_SNAP_LIB_SYMLINKS', True) == "1":
@@ -1485,7 +1484,6 @@ python package_do_shlibs() {
use_ldconfig = False
needed = {}
- needed_from = {}
shlib_provider = {}
read_shlib_providers()
@@ -1509,9 +1507,9 @@ python package_do_shlibs() {
if cpath.islink(file):
continue
if targetos == "darwin" or targetos == "darwin8":
- darwin_so(file)
+ darwin_so(file, needed, sonames, renames)
elif os.access(file, os.X_OK) or lib_re.match(file):
- ldconfig = linux_so(file)
+ ldconfig = linux_so(file, needed, sonames, renames)
needs_ldconfig = needs_ldconfig or ldconfig
for (old, new) in renames:
bb.note("Renaming %s to %s" % (old, new))
@@ -1567,12 +1565,12 @@ python package_do_shlibs() {
# but skipping it is still better alternative than providing own
# version and then adding runtime dependency for the same system library
if private_libs and n in private_libs:
- bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n))
+ bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0]))
continue
- if n in shlib_provider.keys():
- (dep_pkg, ver_needed) = shlib_provider[n]
+ if n[0] in shlib_provider.keys():
+ (dep_pkg, ver_needed) = shlib_provider[n[0]]
- bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n, dep_pkg, needed_from[n]))
+ 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
@@ -1584,7 +1582,7 @@ python package_do_shlibs() {
if not dep in deps:
deps.append(dep)
else:
- bb.note("Couldn't find shared library provider for %s, used by files: %s" % (n, needed_from[n]))
+ 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):