I saw today emerge autounmask behavior with USE changes:
# USE="doc" emerge -1av --digest gtkmm:2.4
* The --digest option can prevent corruption from being noticed. The
* `repoman manifest` command is the preferred way to generate manifests
* and it is capable of doing an entire repository or category at once.
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] media-libs/gd-2.0.35-r1 USE="fontconfig* jpeg png truetype xpm" 0 kB
[ebuild N ] media-gfx/graphviz-2.26.3-r2 USE="cairo doc gtk java nls perl python -examples -lasi -ruby -static-libs -tcl" 0 kB
[ebuild N ] app-doc/doxygen-1.7.3 USE="doc latex qt4 -debug -nodot -tcl" 0 kB
[ebuild U ] dev-cpp/gtkmm-2.24.1 [2.24.0] USE="doc* test -examples" 0 kB
Total: 4 packages (1 upgrade, 2 new, 1 reinstall), Size of downloads: 0 kB
The following USE changes are necessary to proceed:
#required by media-gfx/graphviz-2.26.3-r2, required by app-doc/doxygen-1.7.3[-nodot], required by dev-cpp/gtkmm-2.24.1[doc], required by gtkmm:2.4 (argument)
NOTE: This --autounmask behavior can be disabled by setting
EMERGE_DEFAULT_OPTS="--autounmask=n" in make.conf.
Use --autounmask-write to write changes to config files (honoring CONFIG_PROTECT).
From my point of view, USE changes are usually needed for newer versions (at least with the same SLOT) and, then, there is no much sense on adding:
I would simply add "media-libs/gd fontconfig" to prevent to have to add a ton of lines to package.use with any new "gd" version.
Thanks a lot
When choosing these atoms, it's not necessarily safe to use really broad atoms. For this particular case it seems like we can optimize it more though. The '=' operator might be appropriate if we were making a package.unmask change, but it's too specific for a package.use change.
One problem with the current code is that it uses '=' if the selected package is not the latest version available in its slot, and this is almost never true for stable packages.
*** This bug has been marked as a duplicate of bug 379333 ***