Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 526698 - virtual/perl-Storable-2.410.0-r1 exists but perl-core/Storable-2.410.0-r1 does not. (block)
Summary: virtual/perl-Storable-2.410.0-r1 exists but perl-core/Storable-2.410.0-r1 doe...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Development (show other bugs)
Hardware: AMD64 Linux
: Normal normal (vote)
Assignee: Gentoo Perl team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-10-25 06:12 UTC by Chad Joan
Modified: 2014-10-25 21:01 UTC (History)
0 users

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 Chad Joan 2014-10-25 06:12:52 UTC
My eix output looks like this:

Hugin etc # eix perl-core/Storable
[U] perl-core/Storable
     Available versions:  2.390.0-r1 ~2.450.0-r1
     Installed versions:  2.390.0(11:25:40 PM 11/17/2013)
     Homepage:            http://search.cpan.org/dist/Storable/
     Description:         The Perl Storable Module

Hugin etc # eix virtual/perl-Storable
[U] virtual/perl-Storable
     Available versions:  2.390.0 2.410.0-r1 ~2.450.0 ~2.490.0
     Installed versions:  2.390.0(10:55:21 PM 11/17/2013)
     Description:         Virtual for Storable

I'm sure a number of other packages have this situation too, as it causes a number of blocked packages when I run perl-cleaner --all:
http://pastebin.com/PxpEGqfp

perl-cleaner tells me to unmerge perl-core packages and then update perl virtuals.  I am unwilling to unmerge a bunch of my existing perl packages (ex: perl-core/Storable-2.390.0-r1), because it looks like this inconsistency in the portage tree would prevent them from merging back in later.

I would like to know just what the implementing package is supposed to be for (virtual/perl-Storable-2.410.0-r1).  After a bit of searching the internet, I have come to the conclusion that this is a nontrivial query.
I tried looking at the .ebuild for the virtual:
vim /usr/portage/virtual/perl-Storable/perl-Storable-2.410.0-r1.ebuild
... and it isn't very clear to me, as I am not acquainted with RDEPEND's syntax.

So I am left with something that looks asymmetrical and bug-like: virtual/perl-Storable-2.410.0-r1 exists but perl-core/Storable-2.410.0-r1 does not. 

I have also read this forum thread where someone had a similar (if not same) issue:
https://forums.gentoo.org/viewtopic-t-997152-postdays-0-postorder-asc-start-0.html
The poster seemed to solve it by merging @world (somehow).  In my case, @world also has a number of blocks, so I have no idea if that would actually work for me (under better circumstances).  Trying to merge these packages with --with-bdeps=y doesn't seem to change anything, either.

As a consequence, a number of my perl-based packages are not operable, and I am unable to proceed with updates.

Please help!
And thank you for all of your diligent efforts, ebuild maintainers.

Here are some versions of relevant tools installed on my system:
sys-apps/portage-2.2.8-r2
app-admin/perl-cleaner-2.16
dev-lang/perl-5.18.2-r2
Comment 1 Jeroen Roovers (RETIRED) gentoo-dev 2014-10-25 07:15:18 UTC
=dev-lang/perl-5.18* should cover that:

perl-Storable-2.410.0-r1.ebuild : RDEPEND="
      || ( =dev-lang/perl-5.18* ~perl-core/Storable-2.410.0 )


|| ( ... ) means any one of the atoms will satisfy the same dependency.
Comment 2 Kent Fredric (IRC: kent\n) (RETIRED) gentoo-dev 2014-10-25 09:33:29 UTC
"Virtuals" say "is this thing provided somehow".

So as long as the virtual has one of the two, the virtual is satisfied, and any dependencies are fullfilled.

Hence, removing perl-core/Storable doesn't actually deprive you of a storable implementation, as dev-lang/perl will fullfill that.

Hence, the advice to remove redundant perl-core/* entries to allow the virtual to be satisfied by dev-lang/perl 

|| (   ... ) 

Says "One of these things must exist" 

!<  x 
!>  y

Says "If x exists and it is older than X, remove it"
and "If y exists and its newer than Y, remove it".

( Because having perl-core/THING-5.10 and virtual/perl-THING-5.1 is a very bad thing to have. Either the versions should be the same, or the perl-core/ one should be missing )
Comment 3 Chad Joan 2014-10-25 21:01:38 UTC
Thanks, both of you!

Now I can unmerge those packages with some amount of confidence.  That solves the problem for me, specifically.

Now for solving the problem in general:
Is there some way we can prevent migration of virtual package implementations from causing spurious blocks?

This might be moving into "enhancement" territory, but I feel it is important.  These kind of things are frustrating for the user, and it generates forum threads and bug reports that developers have to spend time on.

In this instance of perl-core/* vs virtual/perl-*, it seems like something that portage should have been able to figure out on its own.

And if that's too much to ask, then could we at least have a tool for listing the packages that can be used as implementations for a particular version of a virtual package?

The task of listing implementations seems like it could be done correctly and definitively from within a portage tool that has an intimate comprehension of ebuild syntax/semantics, yet would be error-prone and taxing for an uninformed user.  Having at least this kind of tool would be incredibly helpful.

Thoughts?