Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH] NeededEntry: infer implicit soname from file basename (bug 715162)
Date: Sun, 29 Mar 2020 18:33:05
Message-Id: 20200329183033.42610-1-zmedico@gentoo.org
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

Replies