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(","))) |