Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 608158 - Some built-slot dependencies are not rebuilt automatically on update
Summary: Some built-slot dependencies are not rebuilt automatically on update
Status: CONFIRMED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Core - Interface (emerge) (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Portage team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 155723
  Show dependency tree
 
Reported: 2017-02-03 22:44 UTC by Nikita Zlobin
Modified: 2019-09-28 22:35 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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).