Gentoo Archives: gentoo-dev

From: Alexis Ballier <aballier@g.o>
To: "Michał Górny" <mgorny@g.o>
Cc: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] RFC: USE=libav as replacement for broken || ( libav:= ffmpeg:= )
Date: Wed, 21 Jan 2015 10:05:18
Message-Id: 20150121110501.7641b0b7@gentoo.org
In Reply to: Re: [gentoo-dev] RFC: USE=libav as replacement for broken || ( libav:= ffmpeg:= ) by "Michał Górny"
1 On Tue, 20 Jan 2015 22:43:52 +0100
2 Michał Górny <mgorny@g.o> wrote:
3
4 > Dnia 2015-01-20, o godz. 09:13:19
5 > Alexis Ballier <aballier@g.o> napisał(a):
6 >
7 > > > For this reason, I would like to employ the solution used by
8 > > > Exherbo. More specifically, use:
9 > > >
10 > > > libav? ( media-libs/libav:= )
11 > > > !libav? ( media-libs/ffmpeg:= )
12 > > >
13 > > > This has two advantages:
14 > > >
15 > > > 1. gives users more explicit control over whether they want to use
16 > > > libav or ffmpeg. Since the two have mutual blockers, right now
17 > > > random packages could have tried to force you to switch from one
18 > > > to the other. However, most often Portage would just give you
19 > > > terribly unreadable blockers.
20 > >
21 > > This sounds good to me; there are a few things to consider though:
22 > >
23 > > - Whatever default useflag is enabled, people will have "terribly
24 > > unreadable blockers" if they use the other implementation. It is
25 > > even worse if you want to follow upstreams in their preferred
26 > > implementation: some want libav, others ffmpeg...
27 >
28 > It's no better than it is now. I don't see any obvious solution,
29 > except maybe for fake flags that would shout loudly at users, like
30 > USE=libav with matching pkg_pretend() telling to change the global
31 > flag. As I see it, this problem has no solution unless we're going to
32 > make the two co-installable.
33
34 There is indeed no solution I can think of but it is a bit worse than
35 what it is now at first: People that wanted to chose put their
36 implementation in world and were done. With this solution, such people
37 will have to adapt their useflags in make.conf. Don't get me wrong: I'm
38 all for changing it as you suggest (or remi suggests), I'm just saying
39 users might have a hard time finding out what those portage blockers
40 mean and how to fix it. In the long term your proposal is a better
41 solution but the first time will be painful IMHO.
42
43
44 > > - This is hidden by the proposal but it enforces that a package has
45 > > equal visibility of both implementations (while the || requires
46 > > only one); libav tends to have a faster code cleaning rate and thus
47 > > a slower unmasking rate in gentoo. I agree with that requirement but
48 > > this might end-up being unpractical since this means packages
49 > > keywording and stabilization will have the slowest pace: mpv has
50 > > been masked for 4 months and counting for this reason.
51 >
52 > It will *at least* make those issues explicit and visible to repoman.
53 > Rather than discovered via users hitting impossible dep trees.
54
55 They're usually not impossible, but my point was rather: Is this
56 something everyone wants ?
57
58
59 > > - What to do with packages like mplayer that haven't been building
60 > > against libav for a year or so ?
61 >
62 > I don't know. pkg_pretend() like suggested above?
63
64 Me neither. pkg_pretend will be too intrusive into packages I think
65 (and there are quite a few). I remember something that enabled useflags
66 based on if you had a given package installed.
67 /me runs
68
69 > > > 2. Subslots work correctly. Rebuilds are forced when the chosen
70 > > > library is upgraded. Moreover, USE flag change causes a rebuild
71 > > > when user decides to change the ffmpeg provider.
72 > >
73 > > No offense, but this argument is complete crap. You should rather
74 > > fix portage bugs than propose to introduce tree-wide changes to
75 > > hide them... More precisely: || ( a:= b c:= d ) is perfectly
76 > > defined (in the "what it means" sense, not in PMS sense). When the
77 > > package is built, if 'a' is satisfied then a (and its subslot) is
78 > > added to the subslot list of the package; ditto for c. You end up
79 > > with a list of subslot deps, that you can store in vdb or whatever,
80 > > and use that to decide when to rebuild the package.
81 >
82 > Following a specification is not a bug. I could argue here a lot
83 > but... just implement it. And return to us when you do. We had an
84 > item for this for EAPI 6, and it was removed because nobody
85 > volunteered to implement it. In fact, nobody even were able to fully
86 > specify what it should do... but if you want to discuss that, please
87 > start a new thread, possibly at the -pms list.
88
89 Above is a simple algorithm that works in all cases. What you're asking
90 me to do is "go beg pms list to allow something they don't want because
91 the subslot/:= spec was poorly written and thought of". I already gave
92 you the solution, don't count on me for the administrative work :=)
93 (NB: everytime I tried to improve/fix something in pms I failed
94 miserably, so that I have no other choice but giving up on this, check
95 bgo)
96
97 Moreover, when I bumped ffmpeg subslot, portage did rebuild all those
98 packages with || ( := := ) deps properly for me. So, you'll have to be
99 a bit more specific on what goes wrong than 'broken || ( libav:=
100 ffmpeg:= )'...
101
102 Alexis.

Replies