8

I made mistake and changed perl non-threaded version to threaded by unmerge first, change USE flags to include ithreads and emerge perl again. Now most packages depending on perl are broken. How do I rebuild them?

AlexD
  • 1,173

2 Answers2

8

On way is to use equery's depends function to get the list of things that depend on a package.

# equery depends perl

If you want to rebuild all of them, try something like:

# emerge -a --oneshot `equery depends perl|awk '{print " ="$1}'`

You'll have issues with that if you have packages installed that were removed from the portage tree, so a sync and world update beforehand is a good idea.

For this specific case, you might also want to look at app-admin/perl-cleaner - it has specific features to rebuild perl modules.

Mat
  • 52,586
3

Try using revdep-rebuild (from app-portage/gentoolkit package, same as equery). It is a tool that scans the system for broken dependencies (like missing shared libraries) and rebuilds the packages that have broken dependencies. An advantage of this compared to Mat's method is that in most cases you don't need to rebuild all packages that depend upon some other one.

  • 1
    revdep-rebuild is first thing I tried, but it can't handle this case because library (libperl.so) is present but missing some symbols. – AlexD Oct 07 '11 at 06:56
  • 1
    Hmm, strange - I thought it already handled USE dependency information correctly. Anyway, since it is a problem with perl, there is a special tool for such job: app-admin/perl-cleaner. – rozcietrzewiacz Oct 07 '11 at 07:10
  • I've tried perl-cleaner --all but it didn't rebuild vim which is linked against libperl.so. – AlexD Oct 07 '11 at 08:15
  • 1
    If vim is still broken after that, you should file a bug report. – rozcietrzewiacz Oct 07 '11 at 08:39
  • But make sure it really is - vim depends on perl only if it is built with perl useflag! (That is also a reason why Mat's method could force far too many rebuilds.) – rozcietrzewiacz Oct 07 '11 at 08:41