See e.g. bug 523616 for the reason and some discussion.
I'll repeat it here: Do NOT randomly add := subslot dependencies to your packages just because they link against the Qt libraries. Depending on a specific subslot or using := is ONLY for those packages that use one or more Qt *private* APIs. Qt public APIs (those used by 99% of the packages) guarantee binary compatibility until the next major version (Qt 6).
https://gitweb.gentoo.org/proj/qt.git/commit/?id=dc5198319f4e13261e91504a0e1d411b6f11be3c
mgorny is against introducing this because it is not the most common use case for subslots. I disagree, because this solves severe silent breakage in Plasma 5.
FTR, I'm neutral on this matter.
The problem is that you're adding yet another rule to the huge list of 'how to write dependencies properly'. This means that writing ebuilds will get even worse because people will have to remember that subslots in Qt are special, which the same awful, terrible stupidity as poppler. From the other bug, I can't judge how wide the need for this is. However, I think the simplest solution would be an extra virtual package that would hold the subslot for private APIs. Like libudev/libgudev virtuals.
The problem with poppler is that people were asked to add the dep with clarifying in which situations it should be used. Knowing when to use the right subslot is no bigger burden that knowing which slot of eg. virtual/jpeg to use.
So, can we reach a decision here? I'd like to import Qt 5.5 from the overlay.
There is no policy requiring subslots to be used in any particular way, so I think the implementation in the overlay is fine. There's no other way for us to automatically fix breakage caused by private ABI changes - it does not appear to be detected by revdep-rebuild or preserved-libs. I don't think "I can't be bothered to write correct dependencies" is a good reason to not implement this.
FYI, this https://codereview.qt-project.org/126845 should help a lot for future versions (post 5.6.0)
(In reply to Davide Pesavento from comment #9) > FYI, this https://codereview.qt-project.org/126845 should help a lot for > future versions (post 5.6.0) Additionally, since we can now describe subslot meaning in metadata.xml and breakage observed in multiple packages with 5.5 I would still like this to go ahead.
I'd like to update the various metadata.xml with a subslot description, something like: <slots> <subslots> Must only be used by packages that are known to use private parts of the Qt API. </subslots> </slots>
(In reply to Davide Pesavento from comment #9) > FYI, this https://codereview.qt-project.org/126845 should help a lot for > future versions (post 5.6.0) Is anyone familiar with working with symbols? I wasn't yet able to match any of the symbols marked with Qt_5_PRIVATE_API with those used in packages known to use the private API.
FYI http://lists.qt-project.org/pipermail/development/2016-January/024554.html
(In reply to Michael Palimaka (kensington) from comment #12) > Is anyone familiar with working with symbols? I wasn't yet able to match any > of the symbols marked with Qt_5_PRIVATE_API with those used in packages > known to use the private API. Yes, sorry for the delay. You can use either objdump or readelf: $ objdump -CTw /usr/lib64/libQt5Xml.so.5.6.0 | grep -F Qt_5_PRIVATE_API 0000000000000000 DF *UND* 0000000000000000 Qt_5_PRIVATE_API QXmlUtils::isChar(QChar) 0000000000000000 DF *UND* 0000000000000000 Qt_5_PRIVATE_API QXmlUtils::isLetter(QChar) 0000000000000000 DF *UND* 0000000000000000 Qt_5_PRIVATE_API QXmlUtils::isNameChar(QChar) 0000000000000000 DF *UND* 0000000000000000 Qt_5_PRIVATE_API QXmlUtils::isPublicID(QString const&) 0000000000000000 g DO *ABS* 0000000000000000 Qt_5_PRIVATE_API Qt_5_PRIVATE_API $ readelf -sW /usr/lib64/libQt5Xml.so.5.6.0 | c++filt | grep -F Qt_5_PRIVATE_API 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND QXmlUtils::isChar(QChar)@Qt_5_PRIVATE_API (13) 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND QXmlUtils::isLetter(QChar)@Qt_5_PRIVATE_API (13) 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND QXmlUtils::isNameChar(QChar)@Qt_5_PRIVATE_API (13) 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND QXmlUtils::isPublicID(QString const&)@Qt_5_PRIVATE_API (13) 423: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS Qt_5_PRIVATE_API
(In reply to Michael Palimaka (kensington) from comment #11) > I'd like to update the various metadata.xml with a subslot description, > something like: > > <slots> > <subslots> > Must only be used by packages that are known to use > private parts of the Qt API. > </subslots> > </slots> was this implemented? we should do it now before moving 5.6 to the tree.
Another option is to put it in repoman.
(In reply to Alex Xu (Hello71) from comment #16) > Another option is to put it in repoman. Never mind, that doesn't make any sense.
Thanks everyone, added as part of 5.6.0 version bump.