aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/misc-functions.sh6
-rw-r--r--lib/portage/util/_dyn_libs/LinkageMapELF.py16
2 files changed, 22 insertions, 0 deletions
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index 4f8a4112d..9efe99b87 100755
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@ -183,6 +183,12 @@ install_qa_check() {
soname=${l%%;*}; l=${l#*;}
rpath=${l%%;*}; l=${l#*;}; [ "${rpath}" = " - " ] && rpath=""
needed=${l%%;*}; l=${l#*;}
+
+ # Infer implicit soname from basename (bug 715162).
+ if [[ -z ${soname} && $(file "${D%/}${obj}") == *"SB shared object"* ]]; then
+ soname=${obj##*/}
+ fi
+
echo "${obj} ${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
echo "${arch:3};${obj};${soname};${rpath};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.ELF.2
done }
diff --git a/lib/portage/util/_dyn_libs/LinkageMapELF.py b/lib/portage/util/_dyn_libs/LinkageMapELF.py
index 70bec116a..2d4929445 100644
--- a/lib/portage/util/_dyn_libs/LinkageMapELF.py
+++ b/lib/portage/util/_dyn_libs/LinkageMapELF.py
@@ -311,6 +311,22 @@ class LinkageMapELF(object):
raise
# File removed concurrently.
continue
+
+ # Infer implicit soname from basename (bug 715162).
+ if not entry.soname:
+ try:
+ proc = subprocess.Popen([b'file',
+ _unicode_encode(entry.filename,
+ encoding=_encodings['fs'], errors='strict')],
+ stdout=subprocess.PIPE)
+ out, err = proc.communicate()
+ proc.wait()
+ except EnvironmentError:
+ pass
+ else:
+ if b'SB shared object' in out:
+ entry.soname = os.path.basename(entry.filename)
+
entry.multilib_category = compute_multilib_category(elf_header)
entry.filename = entry.filename[root_len:]
owner = plibs.pop(entry.filename, None)