Bernd Steinhauser wrote:

> Tiziano Müller schrieb:
>> Hi everyone
>> 
>> I'd like to bring bug #229521 to your attention and see whether we can
>> come up with a solution for it.
>> 
>> The problem:
>> A package "foo" depends on a slotted package "bar" _and_ more than one
>> slot of "bar" can satisfy this dependency.
>> 
>> Why this is a problem:
>> If the dependency looks like one of the following:
>> * DEPEND=">=cat/bar-2"
>> * DEPEND="<=cat/bar-3"
>> * DEPEND="|| ( cat/bar:2 cat/bar:3 )
>> then the package manager doesn't know after building "foo" which slot of
>> "bar" has been used to build "foo". On the other hand might this
>> information be needed to debug problems with package "foo".
>> 
>> The problem gets even worse as soon as RDEPEND comes in:
>> (assuming the same examples from above but with RDEPEND)
>> * The package manager currently doesn't record which slot has been used
>> and can't therefore track whether the user will destroy something in
>> case he uninstalls one of the slots of "bar"
>> * The package manager can't sanely consider whether an update for a slot
>> is actually needed
> 
> There is a section in PMS, that tries to address this.
> 
> =================
> Slot Dependencies
> A named slot dependency consists of a colon followed by a slot name. A
> specification with
> a named slot dependency matches only if the slot of the matched package
> is equal to the slot
> specified. If the slot of the package to match cannot be determined
> (e.g. because it is not a
> supported EAPI), the match is treated as unsuccessful.
> An operator slot dependency consists of a colon followed by one of the
> following operators:
> * Indicates that any slot value is acceptable. In addition, for runtime
> dependencies, indicates
> that the package will not break if the matched package is uninstalled
> and replaced by a
> different matching package in a different slot.
> = Indicates that any slot value is acceptable. In addition, for runtime
> dependencies, indicates
> that the package will break unless a matching package with slot equal to
> the slot of the
> best installed version at the time the package was installed is available.
> To implement the equals slot operator, the package manager will need to
> store the slot of the
> best installed version of the matching package. The package manager may
> do this by appending
> the appropriate slot after the equals sign when saving the package?s
> dependencies. This syntax
> is only for package manager use and must not be used by ebuilds.
> =================
> 
> So, if you go with that, the dependency would look like this:
> DEPEND=">=cat/bar-2:="
> 
> That means, that it accepts any slot of versions above version 2, but
> restricts it to the slot it has been built against, at runtime.
> The combination of >= and := might look a bit ugly, so maybe it might
> indeed be useful to specify a way to provide a list of slots.
> But it would work in most cases.

hmm, this is kdebuild-1...

I miss two things here:
a) What happens in case of DEPEND="", RDEPEND=">=cat/bar-2:=" ? Is that
defined? If yes, what does it mean? If not, what shall be the package
managers behaviour?
b) It is not said that a package depending on "|| ( cat/bar:2 cat/bar:3 )"
then really uses cat/bar:3 if available, it might as well use cat/bar:2 for
one reason or another. It might be clearer if we have slots
named "stable", "unstable". In such a case a package depending on cat/bar
might decided to use cat/bar:stable if available instead of
cat/bar:unstable. So, the spec should either state that the package must
use the best matching version or we need another way for such cases, like a
function to explicitly tell the pm which slot has been used.

I think that problem a) is a bit nasty, but it might become better if we'd
split the dependency variables into DEPEND, RDEPEND, C(OMMON_)DEPEND (where
the last one would be used for packages needed at compile time and
runtime).



-- 
gentoo-dev@lists.gentoo.org mailing list

Reply via email to