Toolkit USE Flags

This page Article description::summarizes main points from discussions about toolkit (GTK, QT) USE flags (gtk2, gtk3, qt4, qt5, etc.). The centithreads go back to 2005. It seems sometimes the discussion is going in circles, and it's hard to read all of the previous replies. This is an attempt to summarize the main points, pros and cons, to facilitate a more productive and informed effort towards a usable solution.

Use cases
List of use cases (i.e. scenarios people want to work, or things that happen with packages, etc):


 * Enable just gtk2 for just gtk2 support if available
 * , --> flag provides support for gtk3 apps, in addition to gtk(2)
 * --> flag for gtk3 libraries *and* executables
 * --> REQUIRED_USE="^^ ( gtk gtk3 )" with default switching from version to version (current stable is gtk, previous was gtk3)
 * --> USE=deprecated instead of USE=gtk3 in unstable
 * --> for once, a "simple" USE=gtk3 that enables gtk3 instead of gtk (gtk3 support still experimental?)
 * --> USE=gtk3 enables extra support, in addition to gtk: "Enables building of gtk+3 helper library, gtk+3 runtime sound effects and the canberra-gtk-play utility. To enable the gtk+3 sound effects add canberra-gtk-module to the colon separated list of modules in the GTK_MODULES environment variable." — very unclear: is it needed? recommended? also, why doesn't the package handle the environment variable by itself?
 * we need to ship webkit with gtk2 and gtk3 support
 * MATE desktop can be built against gtk+ 2 or gtk+ 3, and upstream supports doing both
 * a single process cannot load both gtk2 and gtk3 - you *will* get random crashes
 * only three packages (providing libs) needed exception to the rule to avoid unreasonable maintenance overhead: spice, gtk-vnc and avahi
 * Let's take Emacs as an example. The upstream package supports Athena widgets (both in Xaw and Xaw3d variants), Motif, GTK2, and GTK3.
 * What about something like dbus? Qt3 and Qt4 bindings, for apps that use Qt3 and Qt4 (different applications using different versions of Qt) but still using the dbus bindings...
 * You're trying to compare gtk to qt directly. They are not the same. gtk regards only the graphic library, qt is a library of utility functions too. Qt can be considered like gtk+glib, and that make things more complex.
 * users that currently have -qt are going to be confused when it no longer does what they expect
 * I do not want any more qt3 packages on my system
 * I simply don't want QT 4 on my system at this time
 * Since qt4 and qt5 are both relatively 'heavy' dependencies and quite different in many ways (including differences in default styles) many users will want to stick with only one of those
 * The gtk 'solution' forced some ugly things like masking gtk+:3, gconf:3, ... and then selecting packages based on specific -r200 / -r300 revisions. So much work to avoid regressing into gtk3!
 * I want to use fooplayer and bargrapher which are two qt-based applications. fooplayer only supports qt4, and bargrapher only  supports qt5.  What USE flags should I set, without restorting to per-package flags?  Then I also install klunkybrowser which supports both qt4 and qt5 but not at the same time, so how should I manage my flags for that?
 * QA has spoken out pretty clearly against unversioned gtk or qt useflags, and in favour of explicit versioned useflags.
 * qt5 ; -qt5
 * The desktop profile enables qt4 [..] The result is that qt4 is enabled in child profiles of desktop - gnome and kde and plasma. Since plasma enables qt5 and does nothing with qt4, you have all qt versions enabled there. And when popular qt5-only, gui-optional packages appear in the tree, we will need to enable qt5 in desktop profile too.
 * qt4 at qt5 at the same time: app-text/poppler, x11-libs/qwt, qxmpp, qtermwidget, liblastfm
 * We need to be able to tag REQUIRED_USE conflicts with human readable error messages. OK, so I know I can't have USE="qt4 qt5" for this package... but why? How do I fix it?
 * supports multiple toolkits as well
 * I would really like a way to toggle gtk3 for testing
 * Suppose you want to run on an embedded system with limited RAM and the ability to choose means you can use one of the two libraries exclusively, thus eliminating the need to load the other library?