Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Tiziano Müller
Am Donnerstag, den 09.04.2009, 23:36 +0530 schrieb Nirbheek Chauhan:
> On Thu, Apr 9, 2009 at 10:15 PM, Tiziano Müller  wrote:
> > roughly 90% packages depending on one of:
> >
> > sys-libs/db
> 
> Why the hell does this have so many slots in-tree? I am unaware of the
> reasons for it. Horribly changed API every release? How does every
> other distro handle sys-libs/db ?
Doesn't matter in this context since somebody just wanted examples.

> 
> > dev-libs/boost
> 
> Has one unmasked slot in-tree
Oh, you got me. Nevertheless, will be 4 by the end of the week.

> 
> > dev-lang/python
> >
> 
> So, wait, you want to depend on specific slots of python and keep them
> around, and manage all their related bugs? Isn't that exactly the
> opposite of what python upstream suggests, and *ALL* distros do?
See dleverton's reply.

> 
> > Besides: We wouldn't need the need_python_rebuild anymore, users could
> > safely uninstall old sys-libs/db versions, old dev-libs/boost versions
> 
> @preserved-libs. More generic, a low-level catch-all for library
> breakages, and more convenient for users (rebuild as and when
> possible, not *right now* lest everything break).
> 
> > and the list of packages to reinstall in python-updater boils down to
> > what "paludis -u dev-lang/python:2.4" spits out as reverse-dependencies
> > (or the corresponding portage command).
> 
> You mean emerge -C dev-lang/python:2.4 ? That'll say "bai bai python".
> In any case, what is wrong with python_need_rebuild ?
> 
> Slot operators need changes to the ebuilds, so does python_need_rebuild.
> Slot operators need an EAPI bump for the ebuild, python_need_rebuild doesn't.
> 
> So, isn't python_need_rebuild superior.. ?
> 
No. Python rebuild makes explicit use of how vdb works. Which is not
specified by eapi and therefore not guaranteed to work.
But since you checked how things work before you start writing you
already know that, don't you?



signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil


Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread David Leverton
On Thursday 09 April 2009 19:06:16 Nirbheek Chauhan wrote:
> > dev-lang/python
>
> So, wait, you want to depend on specific slots of python and keep them
> around, and manage all their related bugs? Isn't that exactly the
> opposite of what python upstream suggests, and *ALL* distros do?

If you install a Python library for Python x.y, even if the library itself can 
support other versions, then the installed package depends on Python x.y, 
period.  Using := is simply acknowledging that fact.  It doesn't mean you 
have to keep x.y around for all time, but it does mean that the package 
manager knows what needs to be reinstalled before x.y can safely be removed.

> @preserved-libs. More generic, a low-level catch-all for library
> breakages, and more convenient for users (rebuild as and when
> possible, not *right now* lest everything break).

More generic?  @preserved-libs knows about Python now?  And the whole point of 
slotting is that you can keep old versions installed, so you don't need to 
rebuild dependent packages "right now".



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Nirbheek Chauhan
On Thu, Apr 9, 2009 at 10:15 PM, Tiziano Müller  wrote:
> roughly 90% packages depending on one of:
>
> sys-libs/db

Why the hell does this have so many slots in-tree? I am unaware of the
reasons for it. Horribly changed API every release? How does every
other distro handle sys-libs/db ?

> dev-libs/boost

Has one unmasked slot in-tree

> dev-lang/python
>

So, wait, you want to depend on specific slots of python and keep them
around, and manage all their related bugs? Isn't that exactly the
opposite of what python upstream suggests, and *ALL* distros do?

> Besides: We wouldn't need the need_python_rebuild anymore, users could
> safely uninstall old sys-libs/db versions, old dev-libs/boost versions

@preserved-libs. More generic, a low-level catch-all for library
breakages, and more convenient for users (rebuild as and when
possible, not *right now* lest everything break).

> and the list of packages to reinstall in python-updater boils down to
> what "paludis -u dev-lang/python:2.4" spits out as reverse-dependencies
> (or the corresponding portage command).

You mean emerge -C dev-lang/python:2.4 ? That'll say "bai bai python".

In any case, what is wrong with python_need_rebuild ?

Slot operators need changes to the ebuilds, so does python_need_rebuild.
Slot operators need an EAPI bump for the ebuild, python_need_rebuild doesn't.

So, isn't python_need_rebuild superior.. ?


-- 
~Nirbheek Chauhan



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Tiziano Müller
Am Donnerstag, den 09.04.2009, 12:03 +0200 schrieb Rémi Cardona:
> Mart Raudsepp a écrit :
> > Hello,
> > 
> > 
> > This thread is for any discussion about the slot operator support item
> > in EAPI-3 draft.
> 
> Could anyone actually give a good reason for slot operators? What 
> packages would have a _clear_ benefit from using them? I'm asking for an 
> actual list of packages, not just some package that may exist in a 
> parallel universe.

roughly 90% packages depending on one of:

sys-libs/db
dev-libs/boost
dev-lang/python

Sooo, something around 500 packages.

Besides: We wouldn't need the need_python_rebuild anymore, users could
safely uninstall old sys-libs/db versions, old dev-libs/boost versions
and the list of packages to reinstall in python-updater boils down to
what "paludis -u dev-lang/python:2.4" spits out as reverse-dependencies
(or the corresponding portage command).



signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil


Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Ciaran McCreesh
On Thu, 09 Apr 2009 05:25:33 +0300
Mart Raudsepp  wrote:
> Are we sure := and :* is the syntax that makes sense once we try to
> cover some of the above with new syntax?

:= and :* covers the cases that can be covered with existing dependency
ranges. If you want to cover things that need horrible || hacks with the
current dependency format, you also need either to add ||= and ||*
dependencies (which run against the definition of ||) or start
supporting [>=2&<3] ranged dependencies.

:= and :* are appropriate. Your objections to them are based upon
limitations with the current dependency format, and have nothing to do
with := and :* themselves.

They're not real limitations, either, since as Tiziano points out, in
the real world there's a neat correspondence between version ranges
and slots, and if there aren't you can't deal with them anyway.

-- 
Ciaran McCreesh


signature.asc
Description: PGP signature


Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Peter Alfredsen
On Thu, 9 Apr 2009 17:06:47 +0530
Nirbheek Chauhan  wrote:

> So you're looking for ABI deps? @preserved-libs is the answer (C-sharp
> support for that?). Suggested rebuilds upon upgrade? Separate issue,
> separate solution (pkg_pretend maybe?)

@preserved-libs is a horrible hack that is used in place of ABI deps.
It requires a seperate implementation for each language/subset of
packages and does not take into account "silent" ABI breakage.

*DO*NOT*WANT*

In other words. :-)



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Nirbheek Chauhan
On Thu, Apr 9, 2009 at 4:56 PM, Peter Alfredsen  wrote:
> As I said, I would be using slot-deps as ABI-deps. I would find actual
> ABI deps to be vastly more useful since I wouldn't have to keep track
> of earlier slots to block.
>
> Imagine a world with no revdep-rebuild?
>

So you're looking for ABI deps? @preserved-libs is the answer (C-sharp
support for that?). Suggested rebuilds upon upgrade? Separate issue,
separate solution (pkg_pretend maybe?)


-- 
~Nirbheek Chauhan



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Peter Alfredsen
On Thu, 9 Apr 2009 16:29:53 +0530
Nirbheek Chauhan  wrote:

> I think the current way is the most easily-supportable way for us.
> Complex interdependencies b/w packages and slots => O(n^k) times bugs,
> where k = no. of slots for a library.
> 
> If we don't get all those bugs, it means people are running the latest
> package and latest slot. So slot operators would be m00t in that case.

I wouldn't be using slotdeps as actual slotdeps, more like ABI deps.
Each slot would soft-block all other slots, so upgrades would be
handled normally by portage. Only, all other packages could use slotdeps
to be rebuilt when a new version of gtk-sharp is released. It would
probably take a bit of eclass fudgery, but it could be made to work.
Also, it would allow people to mix ~arch and arch for -sharp stuff.
Which would be good.

As I said, I would be using slot-deps as ABI-deps. I would find actual
ABI deps to be vastly more useful since I wouldn't have to keep track
of earlier slots to block.

Imagine a world with no revdep-rebuild?

/loki_val



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Mart Raudsepp
On N, 2009-04-09 at 11:30 +0200, Tiziano Müller wrote:
> Am Donnerstag, den 09.04.2009, 05:25 +0300 schrieb Mart Raudsepp:
> > Hello,
> > 
> > 
> > This thread is for any discussion about the slot operator support item
> > in EAPI-3 draft.
> > 
> > The premise is good what := and :* allow for, but I'm concerned about
> > the syntax possibly ending up being suboptimal in relation to the syntax
> > we come up in the future for covering the cases not covered now.
> > 
> > 
> > Such cases are for example:
> > 
> > * A library package has slots 2.4, 2.6 and 2.8. An application works
> > with either 2.6 or 2.8, but needs a recompile for changed ABI. It does
> > not work with 2.4 - it has API missing that it needs.
>   DEPEND=RDEPEND=">=cat/lib-2.6:="

This is an abuse of the version number. There is no actual guarantee
that SLOT 2.6 revisions carry a 2.6* version number, etc.

> > * Same case as previous, but additionally the library has a version with
> > slot 3.0 - it is a complete redesign and applications working with 2.8
> > have no chance of working. So need to express a list of acceptable SLOTs
> > or a minimum and maximum (but slots aren't really guaranteed to be
> > numeric and versionable).
> slot operators won't help here, so it remains:
>   RDEPEND="|| ( cat/lib:2.6 cat/lib:2.8 )"

The package additionally needs to know which one the package manager
picked for it, to instruct the build system to actually use that
version.
Without this the whole := deal is pretty useless for many cases.

> with ranged dependencies:
>   RDEPEND="cat/lib[>=2.6&<3]:="

Version/slot mixing abuse

> or slot ranges:
>   RDEPEND="cat/lib:[2.6|2.8]="
> or
>   RDEPEND="cat/lib:=[2.6|2.8]"
> (depends on how we want to define the syntax)

I guess that would go along with the := proposed now and therefore be an
evolution and not a problem to do := now. At least for this case.

> > * Same case as previous (either of them), but if using SLOT 2.6, it
> > needs to be at least >=libr/ary-2.6.5:2.6 and if SLOT 2.8 at least
> > >=libr/ary-2.8.3:2.8. A re-compile if switching provider may or may not
> > be necessary (considering both cases separately)
> slot operators won't help here, so it remains:
>   RDEPEND="|| ( >=cat/lib-2.8.3:2.8 >=cat/lib-2.6.5:2.6 )"

That doesn't work for the same reason cat/lib or || ( cat/lib:2.6
cat/lib:2.8 ) doesn't.

> again with ranged dependencies (somebody please check this):
>   RDEPEND="cat/lib[<3.0&(>=2.8.3|>=2.6.5)]:="
> or
>   RDEPEND="cat/lib[<3.0&(>=2.8.3|>=2.6.5)]:*"
> 
> or maybe combined with slot ranges:
>   RDEPEND="cat/lib[>=2.8.3|>=2.6.5]:=[2.8|2.6]

There is no relation between 2.8.3 and slot 2.8 here really.
We do not declare anywhere how SLOT naming related to version numbers
it's used in. So none of those examples work for me.

> please note: the ebuild maintainer has to make sure that the package has
> to use the best-matching version, otherwise even the slot specifiers are
> worthless.

The package manager needs to tell the ebuild which version it went with,
or this doesn't work right. If you assume best matching version always,
then all this slot operator deal becomes superfluous. Maintainers should
then simply always depend on just the latest version and there is
minimal benefits to slot operators and the complexity in the readability
might not be worth it.

> Real-world example for that:
> DEPEND="sys-libs/db:="
> RDEPEND="${RDEPEND}"
> 
> By the time of installation you have sys-libs/db:{4.6,4.7} installed,
> then your app has to use sys-libs/db:4.7.
> (best_version should provide that information as far as I know).
> 
> > 
> > * A library provides slots 1.2, 1.4 and 1.6. An application can work
> > with all of them, but needs a recompile if upgrading from being linked
> > against 1.2 to newer. 1.4 and 1.6 are runtime interchangeable. Very rare
> > possibility of this though, involving dlopen and more. Probably
> > acceptable to declare rebuild need for all changes.
> Yes.
> 
> > Are we sure := and :* is the syntax that makes sense once we try to
> > cover some of the above with new syntax?
> Yes. It's quiet extendable (as seen above).
> 
> > 
> > Perhaps some forward thinking is sensible here to not end up with having
> > to deprecate the := and :* syntax soon after its introduction.
> Done.


I see no need for :* based on the examples provided and can't think of
any real world cases for it either right now.
There is that theoretical case when some package does dynamic usage of
the library through dlopen and handles the ABI differences, but even
then there is no guarantee (and it is quite unlikely) that it can handle
a future ABI SLOT of the library, and so using :* is unsafe, and :=[list
of known to work ABI SLOTs] should be used instead.


-- 
Mart Raudsepp
Gentoo Developer
Mail: l...@gentoo.org
Weblog: http://planet.gentoo.org/developers/leio


signature.asc
Description: This is a digitally signed message part


Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Nirbheek Chauhan
On Thu, Apr 9, 2009 at 4:09 PM, Peter Alfredsen  wrote:
> All package depending on dev-dotnet/gtk-sharp. Although these won't be
> parallel-installable slots, it will really easy the transition between
> versions and allow us to ease the currently quite strict
> interdependencies between the various packages that make up the
> gtk-sharp, gnome-sharp and gnome-desktop-sharp tarballs, where all
> versions of all packages are bound to a single gtk-sharp major version
> (2.12 at the moment). Currently we handle bumps in api by bumping every
> package in this trifecta from hell. That way, users only have to
> rebuild their apps, portage will take care of rebuilding the -sharp
> libs.
>

I think the current way is the most easily-supportable way for us.
Complex interdependencies b/w packages and slots => O(n^k) times bugs,
where k = no. of slots for a library.

If we don't get all those bugs, it means people are running the latest
package and latest slot. So slot operators would be m00t in that case.


-- 
~Nirbheek Chauhan



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Peter Alfredsen
On Thu, 09 Apr 2009 12:03:03 +0200
Rémi Cardona  wrote:

> Could anyone actually give a good reason for slot operators? What 
> packages would have a _clear_ benefit from using them? I'm asking for
> an actual list of packages, not just some package that may exist in a 
> parallel universe.

All package depending on dev-dotnet/gtk-sharp. Although these won't be
parallel-installable slots, it will really easy the transition between
versions and allow us to ease the currently quite strict
interdependencies between the various packages that make up the
gtk-sharp, gnome-sharp and gnome-desktop-sharp tarballs, where all
versions of all packages are bound to a single gtk-sharp major version
(2.12 at the moment). Currently we handle bumps in api by bumping every
package in this trifecta from hell. That way, users only have to
rebuild their apps, portage will take care of rebuilding the -sharp
libs.



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Rémi Cardona

Mart Raudsepp a écrit :

Hello,


This thread is for any discussion about the slot operator support item
in EAPI-3 draft.


Could anyone actually give a good reason for slot operators? What 
packages would have a _clear_ benefit from using them? I'm asking for an 
actual list of packages, not just some package that may exist in a 
parallel universe.


To me it just looks like it's overly complicated and it makes my eyes bleed.

Rémi



Re: [gentoo-dev] EAPI-3 draft: slot operator support

2009-04-09 Thread Tiziano Müller
Am Donnerstag, den 09.04.2009, 05:25 +0300 schrieb Mart Raudsepp:
> Hello,
> 
> 
> This thread is for any discussion about the slot operator support item
> in EAPI-3 draft.
> 
> The premise is good what := and :* allow for, but I'm concerned about
> the syntax possibly ending up being suboptimal in relation to the syntax
> we come up in the future for covering the cases not covered now.
> 
> 
> Such cases are for example:
> 
> * A library package has slots 2.4, 2.6 and 2.8. An application works
> with either 2.6 or 2.8, but needs a recompile for changed ABI. It does
> not work with 2.4 - it has API missing that it needs.
  DEPEND=RDEPEND=">=cat/lib-2.6:="

> * Same case as previous, but additionally the library has a version with
> slot 3.0 - it is a complete redesign and applications working with 2.8
> have no chance of working. So need to express a list of acceptable SLOTs
> or a minimum and maximum (but slots aren't really guaranteed to be
> numeric and versionable).
slot operators won't help here, so it remains:
  RDEPEND="|| ( cat/lib:2.6 cat/lib:2.8 )"

with ranged dependencies:
  RDEPEND="cat/lib[>=2.6&<3]:="

or slot ranges:
  RDEPEND="cat/lib:[2.6|2.8]="
or
  RDEPEND="cat/lib:=[2.6|2.8]"
(depends on how we want to define the syntax)

> * Same case as previous (either of them), but if using SLOT 2.6, it
> needs to be at least >=libr/ary-2.6.5:2.6 and if SLOT 2.8 at least
> >=libr/ary-2.8.3:2.8. A re-compile if switching provider may or may not
> be necessary (considering both cases separately)
slot operators won't help here, so it remains:
  RDEPEND="|| ( >=cat/lib-2.8.3:2.8 >=cat/lib-2.6.5:2.6 )"

again with ranged dependencies (somebody please check this):
  RDEPEND="cat/lib[<3.0&(>=2.8.3|>=2.6.5)]:="
or
  RDEPEND="cat/lib[<3.0&(>=2.8.3|>=2.6.5)]:*"

or maybe combined with slot ranges:
  RDEPEND="cat/lib[>=2.8.3|>=2.6.5]:=[2.8|2.6]

please note: the ebuild maintainer has to make sure that the package has
to use the best-matching version, otherwise even the slot specifiers are
worthless.

Real-world example for that:
DEPEND="sys-libs/db:="
RDEPEND="${RDEPEND}"

By the time of installation you have sys-libs/db:{4.6,4.7} installed,
then your app has to use sys-libs/db:4.7.
(best_version should provide that information as far as I know).

> 
> * A library provides slots 1.2, 1.4 and 1.6. An application can work
> with all of them, but needs a recompile if upgrading from being linked
> against 1.2 to newer. 1.4 and 1.6 are runtime interchangeable. Very rare
> possibility of this though, involving dlopen and more. Probably
> acceptable to declare rebuild need for all changes.
Yes.

> Are we sure := and :* is the syntax that makes sense once we try to
> cover some of the above with new syntax?
Yes. It's quiet extendable (as seen above).

> 
> Perhaps some forward thinking is sensible here to not end up with having
> to deprecate the := and :* syntax soon after its introduction.
Done.



signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil


[gentoo-dev] EAPI-3 draft: slot operator support

2009-04-08 Thread Mart Raudsepp
Hello,


This thread is for any discussion about the slot operator support item
in EAPI-3 draft.

The premise is good what := and :* allow for, but I'm concerned about
the syntax possibly ending up being suboptimal in relation to the syntax
we come up in the future for covering the cases not covered now.


Such cases are for example:

* A library package has slots 2.4, 2.6 and 2.8. An application works
with either 2.6 or 2.8, but needs a recompile for changed ABI. It does
not work with 2.4 - it has API missing that it needs.
* Same case as previous, but additionally the library has a version with
slot 3.0 - it is a complete redesign and applications working with 2.8
have no chance of working. So need to express a list of acceptable SLOTs
or a minimum and maximum (but slots aren't really guaranteed to be
numeric and versionable).
* Same case as previous (either of them), but if using SLOT 2.6, it
needs to be at least >=libr/ary-2.6.5:2.6 and if SLOT 2.8 at least
>=libr/ary-2.8.3:2.8. A re-compile if switching provider may or may not
be necessary (considering both cases separately)

* A library provides slots 1.2, 1.4 and 1.6. An application can work
with all of them, but needs a recompile if upgrading from being linked
against 1.2 to newer. 1.4 and 1.6 are runtime interchangeable. Very rare
possibility of this though, involving dlopen and more. Probably
acceptable to declare rebuild need for all changes.


Are we sure := and :* is the syntax that makes sense once we try to
cover some of the above with new syntax?

Perhaps some forward thinking is sensible here to not end up with having
to deprecate the := and :* syntax soon after its introduction.



-- 
Mart Raudsepp
Gentoo Developer
Mail: l...@gentoo.org
Weblog: http://planet.gentoo.org/developers/leio


signature.asc
Description: This is a digitally signed message part