Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 608158

Summary: Some built-slot dependencies are not rebuilt automatically on update (needs --rebuild-if-new-slot by default)
Product: Portage Development Reporter: Nikita Zlobin <cook60020tmp>
Component: Core - Interface (emerge)Assignee: Portage team <dev-portage>
Status: CONFIRMED ---    
Severity: normal CC: esigra, pacho
Priority: Normal    
Version: unspecified   
Hardware: All   
OS: Linux   
See Also: https://bugs.gentoo.org/show_bug.cgi?id=693242
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on:    
Bug Blocks: 155723    

Description Nikita Zlobin 2017-02-03 22:44:54 UTC
During upgrade it is standard case, when upgrade failes, because some library is built-slot dependency, and by unclear reason emerge is not considering to rebuild its dependants during upgrade. Sometimes rebuilds are happening, but it seems to work selectively. One example - with imagemagick:
(from "emerge -avuDN world" output)

/=========================================

media-gfx/imagemagick:0

  (media-gfx/imagemagick-6.9.7.4:0/6.9.7.4::gentoo, ebuild scheduled for merge) pulled in by
    (no parents that aren't satisfied by other packages in this slot)

  (media-gfx/imagemagick-6.9.6.2:0/6.9.6.2::gentoo, installed) pulled in by
    media-gfx/imagemagick:0/6.9.6.2= required by (media-gfx/uniconvertor-2.0_pre379-r1:0/0::gentoo, installed)
                         ^^^^^^^^^^^                                                                                                              
    (and 1 more with the same problem)

\===================================

Second blocker was inkscape.
# emerge -av1 media-gfx/imagemagick:0
Also fails with same error.

However, listing blockers after imagemagick makes it work:
/===========================================================
# emerge -av1 media-gfx/imagemagick:0 media-gfx/uniconvertor inkscape

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     U  ] media-gfx/imagemagick-6.9.7.4:0/6.9.7.4::gentoo [6.9.6.2:0/6.9.6.2::gentoo] USE="autotrace bzip2 cxx djvu fftw fontconfig fpx graphviz hdri jbig jpeg jpeg2k lcms lqr lzma openexr openmp pango perl png raw svg tiff truetype webp wmf xml zlib -X -corefonts (-opencl) -postscript -q32 -q64 -q8 -static-libs {-test}" 8592 KiB
[ebuild   R    ] media-gfx/uniconvertor-2.0_pre379-r1::gentoo  PYTHON_TARGETS="python2_7" 1802 KiB
[ebuild   R   #] media-gfx/inkscape-0.91-r3::gentoo  USE="cdr dbus dia exif imagemagick inkjar jpeg lcms nls openmp spell visio wpg -gnome -latex -postscript -static-libs" PYTHON_TARGETS="python2_7" 25253 KiB

Total: 3 packages (1 upgrade, 2 reinstalls), Size of downloads: 35646 KiB

Would you like to merge these packages? [Yes/No] yes
\=======================================

After that i tried to update again, with following order:
1. # emerge -avuDN --verbose-conflicts world
To get full blockers list with
2. Final update command: # emerge -avuDN -1 world <rebuild list>
where <rebuild list> includes packages blockers, which don't have updates (sometimes it lists packages with updates too)

Now update is working.

I propose to add option like rebuild-all-build-slot for such cases (if not even change default befavior).
Comment 1 Zac Medico gentoo-dev 2017-02-12 05:39:58 UTC
(In reply to Nikita Zlobin from comment #0)
> I propose to add option like rebuild-all-build-slot for such cases (if not
> even change default befavior).

It's intended to trigger the rebuilds by default when they are appropriate, but the existing mechanism is complex and error-prone. For example, see bug 439688 were unnecessary rebuilds were triggered when an available update had to be skipped due to a dependency conflict.

In order to improve the situation, it probably does make sense for it to assume that all things need to be rebuilt (as an initial approximation). After it has successfully built a dependency graph under this assumption, it could use that as a guide to assemble an optimal dependency graph that uses as many of the installed packages as possible (avoiding unnecessary rebuilds).
Comment 2 Nikita Zlobin 2022-10-24 08:34:26 UTC
Found solution:
option --rebuild-if-new-slot does what's expected. Of course it will not help for restrictions like.

In my opinion this option must be set by default. Whoever thinks it's better off - must have skill to easily reconfigure default flags for self. No matter, what's expected level for target auditory, there's also newcomers subset, for which default settings must be oriented.

Also - for cases of ebuild writer mistakes, when they forget to make dependencies like ":=" (for those deps, which need that), there's possible "paranoid" mode, using --rebuild-if-new-ver.