Gentoo Archives: gentoo-dev

From: Matthias Maier <tamiko@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] [RFC] New ebuild metadata variables for filtering of binary package soname dependencies (analogous to Fedora __provides_exclude and __requires_exclude)
Date: Mon, 29 Dec 2014 11:28:16
Message-Id: 87zja6u24e.fsf@jackdaw.kyomu.43-1.org
In Reply to: [gentoo-dev] [RFC] New ebuild metadata variables for filtering of binary package soname dependencies (analogous to Fedora __provides_exclude and __requires_exclude) by Zac Medico
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

Replies