1 |
For dynamic libraries, infer an implicit DT_SONAME setting from the |
2 |
file basename, which is consistent with dynamic linking behavior in |
3 |
practice. This makes it possible to resolve soname dependencies for |
4 |
musl's libc.so which lacks a DT_SONAME setting. |
5 |
|
6 |
Bug: https://bugs.gentoo.org/715162 |
7 |
Signed-off-by: Zac Medico <zmedico@g.o> |
8 |
--- |
9 |
lib/portage/package/ebuild/doebuild.py | 3 +++ |
10 |
lib/portage/util/_dyn_libs/LinkageMapELF.py | 3 +++ |
11 |
2 files changed, 6 insertions(+) |
12 |
|
13 |
diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py |
14 |
index 2bff94cb1..dd4a34a74 100644 |
15 |
--- a/lib/portage/package/ebuild/doebuild.py |
16 |
+++ b/lib/portage/package/ebuild/doebuild.py |
17 |
@@ -35,6 +35,7 @@ portage.proxy.lazyimport.lazyimport(globals(), |
18 |
'portage.package.ebuild._ipc.QueryCommand:QueryCommand', |
19 |
'portage.dep._slot_operator:evaluate_slot_operator_equal_deps', |
20 |
'portage.package.ebuild._spawn_nofetch:spawn_nofetch', |
21 |
+ 'portage.util.elf.constants:ET_DYN', |
22 |
'portage.util.elf.header:ELFHeader', |
23 |
'portage.dep.soname.multilib_category:compute_multilib_category', |
24 |
'portage.util._desktop_entry:validate_desktop_entry', |
25 |
@@ -2399,6 +2400,8 @@ def _post_src_install_soname_symlinks(mysettings, out): |
26 |
|
27 |
# Compute the multilib category and write it back to the file. |
28 |
entry.multilib_category = compute_multilib_category(elf_header) |
29 |
+ if not entry.soname and elf_header.e_type == ET_DYN: |
30 |
+ entry.soname = os.path.basename(entry.filename) |
31 |
needed_file.write(_unicode(entry)) |
32 |
|
33 |
if entry.multilib_category is None: |
34 |
diff --git a/lib/portage/util/_dyn_libs/LinkageMapELF.py b/lib/portage/util/_dyn_libs/LinkageMapELF.py |
35 |
index 70bec116a..fa17d8f4d 100644 |
36 |
--- a/lib/portage/util/_dyn_libs/LinkageMapELF.py |
37 |
+++ b/lib/portage/util/_dyn_libs/LinkageMapELF.py |
38 |
@@ -25,6 +25,7 @@ from portage.util import normalize_path |
39 |
from portage.util import varexpand |
40 |
from portage.util import writemsg_level |
41 |
from portage.util._dyn_libs.NeededEntry import NeededEntry |
42 |
+from portage.util.elf.constants import ET_DYN |
43 |
from portage.util.elf.header import ELFHeader |
44 |
|
45 |
if sys.hexversion >= 0x3000000: |
46 |
@@ -313,6 +314,8 @@ class LinkageMapELF(object): |
47 |
continue |
48 |
entry.multilib_category = compute_multilib_category(elf_header) |
49 |
entry.filename = entry.filename[root_len:] |
50 |
+ if not entry.soname and elf_header.e_type == ET_DYN: |
51 |
+ entry.soname = os.path.basename(entry.filename) |
52 |
owner = plibs.pop(entry.filename, None) |
53 |
lines.append((owner, "scanelf", _unicode(entry))) |
54 |
proc.wait() |
55 |
-- |
56 |
2.24.1 |