On 21 August 2011 08:10, Matt Turner <matts...@gentoo.org> wrote:

>
> See https://bugs.gentoo.org/372513
>

^ tldr version for everyone else.

This is due to the || condition in virtual/fortran

|| ( sys-devel/gcc[fortran,openmp?] sys-devel/gcc-apple[fortran,openmp?]
dev-lang/ifc dev-lang/ekopath-bin )

Where gcc[fortran] takes precedence over ifc.


> I wonder if there's some way we can manage this kind of situation?
> Perhaps portage could print alternative dependencies for virtuals,
> similar to the very helpful recent "The following keyword changes are
> necessary to proceed:" addition.
>
>
This usecases specifics aside, I'd welcome some sort of way to show that an
"or" condition is occurring somewhere in the tree, but it'd have to be
opt-in, instead of opt-out, as the potential for being very noisy is great (
you'll get a lot of noise if you hit virtual/perl-* for instance ).

And likewise, I'd love to have "some way" to produce some sort of graph for
alternative merge trees that may work if you toggle some variable, but the
amount of complexity to do this I'd imagine is quite large, and could easily
be computationally expensive.

It would very likely need some limiting factor for how deep it did
permutations at.


[ebuild  N     ] sys-libs/libstdc++-v3-3.3.6  USE="(multilib) nls" 23,459 kB
[ebuild  N     ] app-shells/tcsh-6.16  USE="perl -catalogs" 869 kB
# app-shells/tcsh-6.16 =>
#    perl? (
#       dev-lang/perl
#    )
[ebuild  N     ] app-emulation/emul-linux-x86-
compat-20100611
USE="(multilib)" 930 kB
[ebuild  N     ] virtual/libstdc++-3.3  0 kB
#  virtual/libstdc++-3.3 =>
#    || (
#      =sys-libs/libstdc++-v3-bin-3.3*
#      =sys-libs/libstdc++-v3-3.3*
#    )
[ebuild  N     ] dev-lang/ifc-10.0.026-r1  40,378 kB
#  virtual/fortran-0  -openmp =>
#    || (
#      sys-devel/gcc +fortran
#      sys-devel/gcc-apple +fortran
#      dev-lang/ifc
#      dev-lang/ekopath-bin
#    )
# virtual/fortran-0  +openmp =>
#    || (
#      sys-devel/gcc +fortran
#      sys-devel/gcc-apple +fortran
#      dev-lang/ifc
#      dev-lang/ekopath-bin
#    )
#   || (
#       sys-devel/gcc +fortran +openmp
#       sys-devel/gcc-apple +fortran +openmp
#      dev-lang/ifc
#      dev-lang/ekopath-bin
#    )
[ebuild  N     ] virtual/fortran-0  USE="openmp" 0 kB
[ebuild  N F   ] sci-chemistry/cns-1.2.1  USE="openmp" 31,981 kB

Would be a sample output for depthlimit = 1

Note that in this example I have made a few omissions, some because I
couldn't be bothered working out all the other ACCEPT_KEYWORDS stuff to
mentally compute which of the above targets were actually possible to
install and what ACCEPT_KEYWORDS permuations could be done, and others
because they are for whatever reason "fixed dependencies", thus, showing
only dependencies that user choices can impact.

ie: app-emulation/emul-linux-x86-compat-20100611  has different dependencies
depending on the multilib USE flag, but that useflag is profile mandated so
its pointless to show to a user.

Alternatively, you could let the user dictate what type of permutations to
display/compute, ie:

 use-flag based permutations, keyword based permutations, mask-based
permutations, ||() conditional OR  based permutations,  package-version/slot
permutations etc.

For "package version/slot" permutations, it would display every variation on
package/slot ( ie: slots/versions that are not the "current" version ) that
were installable, or installable with some permutation ( if the depth of
permutation is large enough ), so that a user could see a path of
installation they wanted and twist user masks to make it happen.

Of course, this is all looking like harder and harder stuff to do (
programming is the gateway-drug for feature creep ) , but it would still be
something nice to have on a theoretical magic computer that can do all
computations in zero time.

ΒΆΒΆ
-- 
Kent

perl -e  "print substr( \"edrgmaM  SPA NOcomil.ic\\@tfrken\", \$_ * 3, 3 )
for ( 9,8,0,7,1,6,5,4,3,2 );"

http://kent-fredric.fox.geek.nz

Reply via email to