[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gentoo-portage-dev
Subject:    =?utf-8?Q?Re=C2=A0:_Re:_[gentoo-portage-dev]_Constraint-?= =?utf-8?Q?Based_Dependency_Solver_for_Por
From:       michael.lienhardt () laposte ! net
Date:       2019-06-21 10:41:16
Message-ID: 1508358953.2810448.1561113676512.JavaMail.zimbra () laposte ! net
[Download RAW message or body]


----- Zac Medico <zmedico@gentoo.org> a écrit  :
> It's capable of considering older versions, but maybe there's some
> deficiency in the algorithm. We should analyze a specific example in
> order to understand the behavior.
> 
> Maybe you're referring to this code which forces the highest version in
> the event of a conflict:
> 
> https://gitweb.gentoo.org/proj/portage.git/commit/?id=a9064d08ef4c92a5d0d1bfb3dc8a01b7850812b0
>  

Yes, this seems to be the cause of the problem, thank you.

For testing, I created two ebuilds (and tested with "emerge -pv \
--autounmask-backtrack y net-misc/pdepa"):

## net-misc/pdepa-1.0
EAPI=6
KEYWORDS="amd64"
SLOT="1"
IUSE="feature"
REQUIRED_USE=""
DEPEND=""

## net-misc/pdepa-2.0
EAPI=6
KEYWORDS="amd64"
SLOT="1"
IUSE="feature"
REQUIRED_USE="^^ ( feature )" # feature is not set => not installable
DEPEND=""

Like you said, due to SLOT conflict, only net-misc/pdepa-2.0 is tried, and emerge \
fails. Changing the SLOT of net-misc/pdepa-2.0 to 2 "solves the issue": emerge \
succeeds and propose to install net-misc/pdepa-1.0

However, this solution is only local: if in net-misc/pdepa-2.0 I replace
REQUIRED_USE="" # now the package has no configuration problem
DEPEND="!virtual/libc" # but it conflicts with an important library

then emerge fails again, saying that virtual/libc blocks net-misc/pdepa-2.0


I don't know how many actual packages cannot be installed due to this optimization.
I noticed this behavior in a previous version of the portage tree, when trying to \
                install sys-auth/polkit without configuring it:
 - old version: REQUIRED_USE="??( systemd consolekit )"
 - more recent version REQUIRED_USE="^^ ( consolekit, elogind systemd )"
In practice however, this was not a problem, as some dependencies of polkit deep in \
the tree did require one of ( systemd consolekit ) to be set.

If you want, I can implement a test that check if this optimization is a problem in \
practice. Checking the issue shouldn't be too difficult (I think I just need to check \
that all REQUIRED_USE and *DEPEND are equivalent for a SLOT).

Best,
Michael


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic