1 |
Am 29. Dec 2014, 09:46 schrieb Zac Medico <zmedico@g.o>: |
2 |
|
3 |
> In order to implement something like this for Gentoo, we could add |
4 |
> PROVIDES_EXCLUDE and REQUIRES_EXCLUDE ebuild metadata variables. These |
5 |
> variables would be used to automatically generate PROVIDES and REQUIRES |
6 |
> data for binary packages, based on the output of scanelf. The resulting |
7 |
> PROVIDES and REQUIRES data would simply contain lists of sonames (and |
8 |
> their corresponding ABIs, for multilib support), which would be used to |
9 |
> resolve dependencies of binary packages. For example, the resulting |
10 |
> REQUIRES and PROVIDES data for sys-libs/zlib-1.2.8-r1 built with |
11 |
> ABI_X86="32 64" might look something like this: |
12 |
> |
13 |
> REQUIRES: X86_64: libc.so.6 386: libc.so.6 |
14 |
> |
15 |
> PROVIDES: X86_64: libz.so.1 386: libz.so.1 |
16 |
|
17 |
So this basically shifts information that is available only after a |
18 |
merge (and e.g. checked in the preserved-libs feature) to the metadata |
19 |
of the binary package? |
20 |
|
21 |
> For libz, the new PROVIDES_EXCLUDE and REQUIRES_EXCLUDE ebuild variables |
22 |
> would not be needed. However, for things like python and perl modules, |
23 |
> these variables would be used to exclude unwanted sonames from REQUIRES |
24 |
> and PROVIDES. |
25 |
|
26 |
How do you intend to use the new metadata in detail? |
27 |
|
28 |
Is it planned to introduce this as another dependency constraint on |
29 |
binary merges? Will this become a 'hard' or 'soft' dependency? |
30 |
|
31 |
|
32 |
E.g. consider two packages, libfoo-1 (soname libfoo-1) and bar linking |
33 |
against libfoo. And libfoo-2 (with new soname libfoo-2) emerged |
34 |
replacing version 1 on the binhost replacing libfoo-1, bar not rebuild. |
35 |
We now have on the binhost: |
36 |
libfoo-1 (soname libfoo-1) |
37 |
libfoo-2 (soname libfoo-2) |
38 |
bar (dynamically linked to libfoo-1) |
39 |
|
40 |
(i) Currently, an update on a client (using the binhost) will upgrade |
41 |
libfoo-1 to libfoo-2 and the preserved-libs feature will preserve |
42 |
the necessary shared library libfoo-1 for bar. |
43 |
|
44 |
(ii) What should happen with above metadata? Shall an update only |
45 |
resolve to libfoo-1 and bar? |
46 |
|
47 |
(iii) What if libfoo-1 is removed from the binhost? If libfoo-1 is |
48 |
already merged on the client an update wrt (i) is still possible. |
49 |
So, shall the preserved-libs feature be used as a fall back then? |
50 |
|
51 |
(iv) If bar is rebuild on the binhost - which it should be nowadays - |
52 |
above metadata information could be used to automatically remerge |
53 |
bar on the client - but couldn't this already be done with a |
54 |
slot-operator dependency? |
55 |
|
56 |
|
57 |
Further, we currently have multiple approaches for ensuring consistency |
58 |
of dynamic linkage, the "poor man's approach" revdep-rebuild, language |
59 |
specific update scripts (for python, perl, haskell,...), the |
60 |
preserved-libs feature and, finally, slot-operators. |
61 |
This would be another iteration of a solution, this time for binary |
62 |
merges. Can you give me an example where your proposed approach is the |
63 |
only way to ensure consistency of dynamic linkage, or is conceptually |
64 |
cleaner? |
65 |
|
66 |
I, for my part, like the fact that such metadata generation would be |
67 |
completely automatic. |
68 |
|
69 |
Best, |
70 |
Matthias |