Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: lib/portage/util/_dyn_libs/, bin/
Date: Sun, 24 May 2020 22:18:36
Message-Id: 1590358524.0bd5b693ef12c266000aafeb9557c1437fdfc1b2.zmedico@gentoo
1 commit: 0bd5b693ef12c266000aafeb9557c1437fdfc1b2
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Sat May 9 22:07:17 2020 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Sun May 24 22:15:24 2020 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=0bd5b693
7
8 NeededEntry: don't use scanelf -q (bug 721336)
9
10 We don't use scanelf -q, since that would omit libraries like
11 musl's /usr/lib/libc.so which do not have any DT_NEEDED or
12 DT_SONAME settings. Since we don't use scanelf -q, we have to
13 handle the special rpath value " - ".
14
15 Bug: https://bugs.gentoo.org/721336
16 Fixes: 25fbe7bc1a92 ("NeededEntry: infer implicit soname from file basename (bug 715162)")
17 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
18
19 bin/misc-functions.sh | 6 +++++-
20 lib/portage/util/_dyn_libs/LinkageMapELF.py | 5 ++++-
21 lib/portage/util/_dyn_libs/NeededEntry.py | 5 +++++
22 3 files changed, 14 insertions(+), 2 deletions(-)
23
24 diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
25 index 9efe99b87..c2a16cbe0 100755
26 --- a/bin/misc-functions.sh
27 +++ b/bin/misc-functions.sh
28 @@ -177,7 +177,11 @@ install_qa_check() {
29 if type -P scanelf > /dev/null ; then
30 # Save NEEDED information after removing self-contained providers
31 rm -f "$PORTAGE_BUILDDIR"/build-info/NEEDED{,.ELF.2}
32 - scanelf -qyRF '%a;%p;%S;%r;%n' "${D%/}/" | { while IFS= read -r l; do
33 + # We don't use scanelf -q, since that would omit libraries like
34 + # musl's /usr/lib/libc.so which do not have any DT_NEEDED or
35 + # DT_SONAME settings. Since we don't use scanelf -q, we have to
36 + # handle the special rpath value " - " below.
37 + scanelf -yRBF '%a;%p;%S;%r;%n' "${D%/}/" | { while IFS= read -r l; do
38 arch=${l%%;*}; l=${l#*;}
39 obj="/${l%%;*}"; l=${l#*;}
40 soname=${l%%;*}; l=${l#*;}
41
42 diff --git a/lib/portage/util/_dyn_libs/LinkageMapELF.py b/lib/portage/util/_dyn_libs/LinkageMapELF.py
43 index 2d4929445..473a1243d 100644
44 --- a/lib/portage/util/_dyn_libs/LinkageMapELF.py
45 +++ b/lib/portage/util/_dyn_libs/LinkageMapELF.py
46 @@ -272,7 +272,10 @@ class LinkageMapELF(object):
47 continue
48 plibs.update((x, cpv) for x in items)
49 if plibs:
50 - args = [os.path.join(EPREFIX or "/", "usr/bin/scanelf"), "-qF", "%a;%F;%S;%r;%n"]
51 + # We don't use scanelf -q, since that would omit libraries like
52 + # musl's /usr/lib/libc.so which do not have any DT_NEEDED or
53 + # DT_SONAME settings.
54 + args = [os.path.join(EPREFIX or "/", "usr/bin/scanelf"), "-BF", "%a;%F;%S;%r;%n"]
55 args.extend(os.path.join(root, x.lstrip("." + os.sep)) \
56 for x in plibs)
57 try:
58
59 diff --git a/lib/portage/util/_dyn_libs/NeededEntry.py b/lib/portage/util/_dyn_libs/NeededEntry.py
60 index c52cfce3c..70ff99100 100644
61 --- a/lib/portage/util/_dyn_libs/NeededEntry.py
62 +++ b/lib/portage/util/_dyn_libs/NeededEntry.py
63 @@ -52,6 +52,11 @@ class NeededEntry(object):
64
65 del fields[cls._MIN_FIELDS:]
66 obj.arch, obj.filename, obj.soname, rpaths, needed = fields
67 + # We don't use scanelf -q, since that would omit libraries like
68 + # musl's /usr/lib/libc.so which do not have any DT_NEEDED or
69 + # DT_SONAME settings. Since we don't use scanelf -q, we have to
70 + # handle the special rpath value " - " below.
71 + rpaths = "" if rpaths == " - " else rpaths
72 obj.runpaths = tuple(filter(None, rpaths.split(":")))
73 obj.needed = tuple(filter(None, needed.split(",")))