Re: [gentoo-dev] Re: Re: Multislot dependencies

2008-07-01 Thread Santiago M. Mola
On Tue, Jul 1, 2008 at 2:47 PM, Enrico Weigelt <[EMAIL PROTECTED]> wrote:
>
> Well, some of you might still remember what I said about gtk and
> slots long time ago. Just to summarize my point:
>
> * the use of slots should be MINIMIZED. IMHO, the kernel is one
>  of the few valid uses, gtk is NOT (1.* and 2.* are *different*
>  packages and so should be treated differently).
>
> * at runtime an most packages need that variant/slot they were
>  built for (and gtk1'ed package needs gtk-1.x, NOT gtk-2.* and
>  vice versa)
>

This is not going to change. We already unified the gtk USE flag, we
have SLOT dependencies now, and, generally, prior discussion,
decisions and common practices shows that we're not going to follow
that path.

We are talking about multislot dependencies. At this point, your
arguments are noise. So, please, don't continue with these points in
this thread.

Thanks,
-- 
Santiago M. Mola
Jabber ID: [EMAIL PROTECTED]
-- 
gentoo-dev@lists.gentoo.org mailing list



Re: [gentoo-dev] Re: Re: Multislot dependencies

2008-07-01 Thread Enrico Weigelt
* Gilles Dartiguelongue <[EMAIL PROTECTED]> schrieb:
> Le lundi 30 juin 2008 à 19:01 +0200, Enrico Weigelt a écrit :
> > 
> > 
> > Funny, how you all manage to make simple things complicated ;-o
> > 
> > I guess nobody considered an trivial solutions like an useflag ...
> 
> no, this is not the proper solution. Just consider how bad gtk/gtk2
> useflag was and that was with only 1 package with 2 slots. 

Well, some of you might still remember what I said about gtk and
slots long time ago. Just to summarize my point:

* the use of slots should be MINIMIZED. IMHO, the kernel is one
  of the few valid uses, gtk is NOT (1.* and 2.* are *different* 
  packages and so should be treated differently). 

* at runtime an most packages need that variant/slot they were
  built for (and gtk1'ed package needs gtk-1.x, NOT gtk-2.* and
  vice versa)
  
* often the slots are just necessary because the upstream's 
  bad code design. IMHO, if a package doesn't have *clean* 
  dependency tree, it's simply not a package, but just a 
  bunch of code ;-P
  
> Now think about say db (berkeleydb) or gtkhtml (and I'm still 
> probably overlooking the most important point).

What's exactly the problem with that packages ?


BTW: maybe many things would be easier, if portage itself could
differenciate between source and binary packages, but that might
be a too big step ;-o


cu
-- 
-
 Enrico Weigelt==   metux IT service - http://www.metux.de/
-
 Please visit the OpenSource QM Taskforce:
http://wiki.metux.de/public/OpenSource_QM_Taskforce
 Patches / Fixes for a lot dozens of packages in dozens of versions:
http://patches.metux.de/
-
--
gentoo-dev@lists.gentoo.org mailing list



Re: [gentoo-dev] Re: Re: Multislot dependencies

2008-06-30 Thread Gilles Dartiguelongue
Le lundi 30 juin 2008 à 19:01 +0200, Enrico Weigelt a écrit :
> 
> 
> Funny, how you all manage to make simple things complicated ;-o
> 
> I guess nobody considered an trivial solutions like an useflag ...

no, this is not the proper solution. Just consider how bad gtk/gtk2
useflag was and that was with only 1 package with 2 slots. Now think
about say db (berkeleydb) or gtkhtml (and I'm still probably overlooking
the most important point).
-- 
Gilles Dartiguelongue <[EMAIL PROTECTED]>
Gentoo


signature.asc
Description: Ceci est une partie de message	numériquement signée


Re: [gentoo-dev] Re: Re: Multislot dependencies

2008-06-30 Thread Enrico Weigelt



Funny, how you all manage to make simple things complicated ;-o

I guess nobody considered an trivial solutions like an useflag ...


cu
-- 
-
 Enrico Weigelt==   metux IT service - http://www.metux.de/
-
 Please visit the OpenSource QM Taskforce:
http://wiki.metux.de/public/OpenSource_QM_Taskforce
 Patches / Fixes for a lot dozens of packages in dozens of versions:
http://patches.metux.de/
-
-- 
gentoo-dev@lists.gentoo.org mailing list



Re: [gentoo-dev] Re: Re: Multislot dependencies

2008-06-28 Thread Ciaran McCreesh
On Sat, 28 Jun 2008 23:41:17 +0200
Tiziano Müller <[EMAIL PROTECTED]> wrote:
> > := only makes sense when something is both a DEPEND and an RDEPEND.
> > Actual behaviour, for Paludis, is that it rewrites := deps to :=blah
> > when writing to VDB any time it can, and leaves anything it can't
> > as := deps. Verifying sanity of := use is left to developers and
> > the QA tool.
>
> ... and the spec.

The spec's well defined. It just tells you how := works, not how to use
it in a sensible manner. Pretty much the same as for everything else.

> > The only sensible thing you can do with multiple matches on := slots
> > (and ||=, if that route is taken) is to take the slot of the best
> > matching installed version, and require that ebuilds do that too. In
> > real world cases, this works just fine.
> > 
> so, ebuilds should use best_version instead of has_version for
> example. That's what I meant and what I miss in the kdebuild-1
> spec :-)

Generally, it "just works", because packages are usually fairly good at
picking up the best installed version themselves anyway. But yes, if
you have to pass a version manually to a package, best_version is the
way to do it.

And no, that's not something that should be in the spec. The devmanual,
perhaps, although there's no kdebuild stuff in there just now.

-- 
Ciaran McCreesh


signature.asc
Description: PGP signature


Re: [gentoo-dev] Re: Re: Multislot dependencies

2008-06-28 Thread Bernd Steinhauser

Tiziano Müller schrieb:

Bernd Steinhauser wrote:


Tiziano Müller schrieb:

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...

Indeed, but it is a proposal.


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?

I don't think, that RDEPEND matters here.
If a dep is not in DEPEND, that means, that it doesn't affect the build
process of the package. So in case the dep spec matches more than one
slot, the package should be able to use both without a rebuild.
(Which means, that the package manager can switch the dep.)
If changing the slot would mean, that a rebuild is required, then the
dep affects the package at build time and should be in DEPEND.

Oh, my point is much simpler:
The kdebuild-1 spec says: "[...] 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."
But: RDEPEND doesn't have to be evaluated before installing the package and
DEPEND doesn't contain this package. So, there is no record of such a
package. What now?

tbh, I don't get what you are on about.
The slot restrictions only matter in cases where a rebuild what be 
required, because the package would break, if you change the installed 
slot. But in that case the dep affects runtime and should be in DEPEND.
For runtime-only deps, the package manager should be allowed to change 
the slot, if multiple slots are allowed.



Regarding the || ( cat/bar:2 cat/bar:3 ) construction, if a package
manager chooses one out of the two, it should restrict the package to
this dep at runtime.

Hmm, this is the point: What happens if the package chooses cat/bar:2 to
link against and the package manager records cat/bar:3 since it assumes
this is the better match? Is it it allowed to do the following (it's an
example):

DEPEND="|| ( sys-libs/db:4.5 sys-libs/db:4.6 )"

pkg_setup() {
DB_VER=""
# both major versions work but prefer 4.5 if available
has_version "sys-libs/db:4.5" && DB_VER="4.5"
}

Questions:
a) should DEPEND be valid?
b) will has_version evaluate to true?
c) how will