On 01/22/2015 03:11 AM, Alexis Ballier wrote: > On Thu, 22 Jan 2015 02:50:44 -0800 > Zac Medico <zmed...@gentoo.org> wrote: > >> On 01/21/2015 11:25 PM, Alexis Ballier wrote: >>> 1. If portage uses crafted depstrings in its depgraph when >>> rebuilding a package and nobody is able to give me a good reason >>> _why_ this is needed, I really do not want to look at the code :) >> >> It's the emerge --dynamic-deps option, which is enabled by default. If >> you want to use --dynamic-deps=n, then you may need to fix some >> dependencies of installed packages, which you can do by running emerge >> @changed-deps. There's also a --changed-deps [1] option that can be >> applied to @world updates, which will be included in Portage 2.2.16. >> >> [1] >> https://github.com/gentoo/portage/commit/e99fa094ac73514b23509a0f8305b365f114e9a3 > > This answers 'how' and, as I understand it, changed-deps is also about > 'how' to trigger rebuild. > My question was: _why_ when portage knows what package to rebuild > doesn't it use the dep string from the ebuild ?
It does use the dep string for the ebuild, after it has rejected the installed instance and decided to pull in the ebuild instead. > That's what I understand from Michał's comment (quoting him): > >> 1. if you have dynamic-deps enabled, portage will want to install both >> ffmpeg (because of :=) and libav (because of ||). The effective >> deps will look like: >> >> || ( ffmpeg:0/51= libav ) ffmpeg:0/51= > > > As I understand it, portage (correctly) marks this package for rebuild > (because ffmpeg:0/51= dep isn't satisfied anymore), but I don't get why > it doesn't consider the original '|| ( ffmpeg:= libav:= )' dep for the > depgraph and wants to pull ffmpeg in "because of :=". It does consider the original dep. However, it also uses various heuristics when making choices for || deps, and the fact that an instance of ffmpeg is currently installed is taken into account in the heuristics. -- Thanks, Zac