1 |
As mentioned last week, I created lists of "needed" libs and |
2 |
"installed" libs. I was hoping that the difference would produce a set |
3 |
of "missing" libs, but I encountered several problems with that, which |
4 |
I discuss below. |
5 |
|
6 |
The list of "needed" libraries is found by calling findProviders() on |
7 |
all installed files listed in each atom's CONTENTS. It's inefficient, |
8 |
but once I'm able to find a solution to the problems mentioned below, |
9 |
I will try a different implementation to build a list of "needed" |
10 |
libs, most likely by creating another method in LinkageMap (if that is |
11 |
okay). |
12 |
|
13 |
A couple libraries that I've questions about: |
14 |
|
15 |
|
16 |
libodbc.so; libodbcinst.so; libgdbm.so.2; libdb-3.1.so; libcrypto.so.0.9.6: |
17 |
|
18 |
dev-java/sun-jdk-1.6.0.05/NEEDED.ELF.2: |
19 |
386;/opt/sun-jdk-1.6.0.05/jre/lib/i386/libJdbcOdbc.so;libJdbcOdbc.so;$ORIGIN;libodbcinst.so,libodbc.so,libjvm.so,libc.so.6 |
20 |
app-office/openoffice-bin-2.4.0/NEEDED.ELF.2: |
21 |
386;/usr/lib/openoffice/program/python-core-2.3.4/lib/lib-dynload/dbm.so;;;libgdbm.so.2,libpthread.so.0,libc.so.6 |
22 |
|
23 |
These libraries are needed as shown above; however, they are not in |
24 |
the filesystem and consequently have no scanelf entries in any NEEDED |
25 |
file. How are they dynamically linked when the library isn't |
26 |
installed? I'm not sure what's going on with these libraries at all. |
27 |
|
28 |
|
29 |
ld-linux.so.2 -> ld-2.6.1.so: |
30 |
|
31 |
This is installed by sys-libs/glibc-2.6.1; however, it has no entry in |
32 |
any NEEDED file. Scanning the library myself produces |
33 |
EM_386;/lib/ld-2.6.1.so;ld-linux.so.2;;. I'd assume that the dynamic |
34 |
linker would also have a NEEDED file entry for consistency, but it |
35 |
doesn't. Is there a reason why? |
36 |
|
37 |
|
38 |
libGLcore.so.1; libnvidia-tls.so.1: |
39 |
|
40 |
Similar to above, these libraries from |
41 |
x11-drivers/nvidia-drivers-169.09-r1 are installed and dynamically |
42 |
linked to other libraries, but they have no entry in a NEEDED file. |
43 |
For libGLcore.so.1, scanelf produced |
44 |
EM_386;/usr/lib/opengl/nvidia/lib/libGLcore.so.169.09;libGLcore.so.1;; |
45 |
|
46 |
|
47 |
libmix.so: |
48 |
|
49 |
dev-libs/libmix-2.05/NEEDED.ELF.2: |
50 |
386;/usr/lib/libmix.so;;;libc.so.6 |
51 |
|
52 |
It is a part of dev-libs/libmix-2.05 and needed by /usr/bin/nc, which |
53 |
is in net-analyzer/netcat-110-r8. This library is installed and has an |
54 |
entry in a NEEDED file, but that scanelf entry has no soname. |
55 |
|
56 |
|
57 |
A couple other libraries (eg libpython2.3.so.1.0, libview.so.2, |
58 |
libatkmm-1.6.so.1, libcrypto.so.0.9.7, libglibmm-2.4.so.1), which are |
59 |
part of app-office/openoffice-bin-2.4.0 or |
60 |
app-emulation/vmware-workstation-5.5.5.56455, are located in |
61 |
directories, which are not in portage.util.getlibpaths(). |
62 |
|
63 |
|
64 |
As a consequence of the previous situations, the dict returned by |
65 |
findProviders() includes all the previously needed libraries as keys, |
66 |
but their associated values are the empty set. I'm unsure if these |
67 |
libraries should be ignored or if some other action should be taken. |
68 |
|
69 |
My current problem is that I was expecting findProviders() to return |
70 |
the empty set for binaries which are missing libraries, and thus those |
71 |
binaries need to be re-emerged, but the above situations complicate |
72 |
things because those libraries also map to the empty set. Hopefully, I |
73 |
am able to reduce these irregularities into more general cases so that |
74 |
what I've done so far has not been in vain. :) |
75 |
|
76 |
For the next week, I'll attempt to resolve these issues, which will |
77 |
likely lead me back to reading the old revdep-rebuild script. |
78 |
|
79 |
The code is hosted at |
80 |
http://repo.or.cz/w/revdep-rebuild-reimplementation.git?a=tree |
81 |
|
82 |
|
83 |
-Lucian |
84 |
-- |
85 |
gentoo-soc@l.g.o mailing list |