We need to add special USE dep handling to dep_zapdeps() so that it ranks the choices correctly when one of the choices is already installed or in graph but happens to have incorrect USE settings.
This is fixed in svn r13881.
This is fixed in 2.2_rc34.
(In reply to comment #2) > This is fixed in 2.2_rc34. The current code behaves badly for cases like kde-base/nepomuk: || ( >=dev-libs/soprano-2.3.0[clucene,dbus,raptor,redland] >=dev-libs/soprano-2.3.0[clucene,dbus,raptor,java] ) I needs to be fixed to distinguish between these two cases and prefer the one which is already satisfied by current USE configuration.
Created attachment 200110 [details, diff] prefer choices with satisfied USE deps, applies to 2.2_rc35 This fixes the issue described in comment #3.
Created attachment 200119 [details, diff] prefer choices with satisfied USE deps, applies to 2.2_rc35 This fixes a bug in the previous patch.
(In reply to comment #5) > Created an attachment (id=200119) [edit] > prefer choices with satisfied USE deps, applies to 2.2_rc35 > > This fixes a bug in the previous patch. > It seems that this patch actually reverts the behavior that this bug was aimed at fixing, so part of it needs to be redone now. Specifically, USE state ("all_use_satisfied") needs to affect the order of the "preferred" list inside dep_zapdeps.
There's a new patch in svn r14165 that will handle || ( foo[a] foo[b] ) correctly now. This patch is not able to distinguish between some cases of || ( foo[a] foo[b] ) and || ( foo[a] bar ), so it could use some improvement.
This is fixed in 2.2_rc41.
This is fixed in 2.1.7.
(In reply to comment #3) > (In reply to comment #2) > > This is fixed in 2.2_rc34. > > The current code behaves badly for cases like kde-base/nepomuk: > > || ( > >=dev-libs/soprano-2.3.0[clucene,dbus,raptor,redland] > >=dev-libs/soprano-2.3.0[clucene,dbus,raptor,java] > ) > > I needs to be fixed to distinguish between these two cases and prefer the one > which is already satisfied by current USE configuration. Note that this "good behavior" for the above dependency is not so good for virtual/fortran: || ( sys-devel/gcc[fortran,openmp?] sys-devel/gcc-apple[fortran,openmp?] dev-lang/ifc dev-lang/ekopath-bin ) Currently, if the user has USE=fortran disabled, then dev-lang/ifc gets pulled in by default. See bug 372513, also discussed on gentoo-portage-dev ml: http://archives.gentoo.org/gentoo-portage-dev/msg_dcaad2f45f48b0505d448604e4fe5901.xml