Some packages have multiple "ABIs", which can change independently in new versions. - Packages with multiple libraries, which have sonames with different versions. Example: app-text/poppler-0.22.2 (SLOT="0/35") has libraries with these sonames: libpoppler.so.35 libpoppler-cpp.so.0 libpoppler-glib.so.8 libpoppler-qt4.so.4 Between app-text/poppler-0.22.1 and app-text/poppler-0.22.2, there was change in soname of main library from libpoppler.so.34 to libpoppler.so.35. Sonames of other libraries did not change. - Packages with special requirement of rebuilding. Example: dev-libs/gobject-introspection should be rebuilt after each upgrade/downgrade of dev-libs/glib, regardless of lack of changes in sonames of dev-libs/glib libraries. Other packages, which depend on dev-libs/glib, do not need to be rebuilt so often. Suggested solution: Ebuilds should be able to set subslot as a dictionary of multiple key:value elements, separated by commas. Packages, which depend on given package, would be able to specify, which keys should be used, using :=(key1,key2,...) slot operators etc. Optionally 1 key could be specified as default key, using "*" prefix before key. If package B depends on package A without specifying used keys, then: If default key is specified in package A, then this key will be used. If default key is not specified in package A, then all keys will be used. SLOT syntax introduced in EAPI="5" will remain allowed, but slot operators with named keys could not be used for packages, which use that syntax. Examples: app-text/poppler-0.22.2 could set SLOT="0/main:35,cpp:0,glib:8:qt4:4". app-office/libreoffice could depend on ">=app-text/poppler-0.16:=(main)[xpdf-headers(+),cxx]". kde-base/okular[pdf] could depend on ">=app-text/poppler-0.20:=(qt4)[qt4,-exceptions(-)]". media-gfx/gimp[pdf] could depend on ">=app-text/poppler-0.12.4:=(glib)[cairo]". dev-libs/glib-2.34.3 could set SLOT="2/*main:0,gi:${PV}". dev-libs/gobject-introspection could depend on ">=dev-libs/glib-2.34.1:2=(gi)".
(In reply to comment #0) > app-text/poppler-0.22.2 could set SLOT="0/main:35,cpp:0,glib:8:qt4:4". It should be: SLOT="0/main:35,cpp:0,glib:8,qt4:4"
The goal of subslots is to force a rebuild when one's necessary, not to prevent rebuilds when they're not... This is far too complicated for far too little gain.
A similar situation is with xorg-server, which has 3 important ABIs (VIDEODRV, XINPUT, EXTENSION). Currently, the depending packages are rebuilt more often than strictly necessary.
The idea makes sense. That said, this increases the burden on maintainers. If we decide to provide this functionality, it should be an offer to library maintainers, not a requirement.
(In reply to comment #0) > app-text/poppler-0.22.2 could set SLOT="0/main:35,cpp:0,glib:8:qt4:4". Is it too late to rethink jamming this stuff into SLOT, and if so can we at least have some whitespace?
A possible alternative, which came up in bug 462020, is to use to create a separate virtual for each soname. The subslot of the virtual would then be bumped only when its associated soname changes. The virtual would depend on a range of versions that provide the associated soname. For example: || ( app-text/poppler:0/37 app-text/poppler:0/36 app-text/poppler:0/35 )
(In reply to Zac Medico from comment #6) > A possible alternative, which came up in bug 462020, is to use to create a > separate virtual for each soname. The subslot of the virtual would then be > bumped only when its associated soname changes. The virtual would depend on > a range of versions that provide the associated soname. For example: > > || ( app-text/poppler:0/37 app-text/poppler:0/36 app-text/poppler:0/35 ) This route may make more sense, when only a particular lib is being used out of a package rather than the whole package -- among other things, this would allow the lib to be repackaged later without *DEPEND in comsumers needing to change. However, I tried implementing this with xorg-server and the three primary A{P,B}Is it provides (to coincide with xorg-drivers) -- there is a LOT of addtional work to deal with, to keep the virtuals in sync with the parent package, especially when you have to deal with stable vs ~arch vs multiple versions at the same keyword level. I ended up scripting something to recreate all the virtuals whenever xorg-server's ebuilds were bumped. So if this solution were to become common, we would probably want to build a tool as well as (repoman?) checks to help devs with keeping the virtuals in sync. (*OR*, we could always bring back the PROVIDES= syntax :P )
(In reply to Ciaran McCreesh from comment #2) > The goal of subslots is to force a rebuild when one's necessary, not to > prevent rebuilds when they're not... This is far too complicated for far too > little gain. +1 If rebuilds are to be avoided, splitting the packages that are affected by this makes more sense than further complicating dependency specification. Alternatively, virtuals can be used, as suggested in comment #6.
(In reply to Ulrich Müller from comment #8) > (In reply to Ciaran McCreesh from comment #2) > > The goal of subslots is to force a rebuild when one's necessary, not to > > prevent rebuilds when they're not... This is far too complicated for far too > > little gain. > > +1 > While I like this approach in principle, this works only if we can make it into an official QA policy. Otherwise the, err, rather forceful opposition of several devs will prevent the adoption of subslots at all. For an example, see bug 490362. > Alternatively, virtuals can be used, as suggested in comment #6. That's way more complex.
*** Bug 501656 has been marked as a duplicate of this bug. ***
> Samuli Suominen 2014-02-18 10:14:36 EET Comment 10 > Duplicate of this bug: 501656 media-gfx/imagemagick has different subslot for every release because after every release, dev-ruby/rmagick needs to be rebuilt but now I have no way of handling the SONAME changes so other packages could use := too, now only rmagick can have := in imagemagick dep
(In reply to Samuli Suominen from comment #11) > > Samuli Suominen 2014-02-18 10:14:36 EET Comment 10 > > Duplicate of this bug: 501656 > > media-gfx/imagemagick has different subslot for every release because after > every release, dev-ruby/rmagick needs to be rebuilt > > but now I have no way of handling the SONAME changes so other packages could > use := too, now only rmagick can have := in imagemagick dep and splitting is not an option here, it doesn't help at all.