On 03/02/2013 21:09, Dale wrote:
> Alan McKinnon wrote:
>> emerge -e --keep-going @world
>> shows output like this when a build fails:
>>
>>  * One or more packages are either masked or have missing dependencies:
>>  *
>>  *   >=dev-libs/icu-49:0/50= pulled in by:
>>  *     (x11-libs/qt-core-4.8.4-r1::gentoo, installed)
>>
>> I can't parse that. What kind of SLOT is "0/50=" ?
>>
>> So far this has happened twice. The packages that failed prior are not
>> important,
>> what is important is that when the depgraph is *recalculated*, I get
>> that error.
>> It's always that specific atom for icu causing issues and it's always
>> pulled in
>> by qt-<something>
>>
>> Anyone know what that atom means and if it's a bug or not?
>>
>> This system is ~amd64 and portage is latest masked 2.2.0_alpha161.
>> Active python is 2.7
>>
> 
> 
> LOL  I'll give this a go, sort of.  I get this for icu:
> 
> root@fireball / # equery l -p icu
>  * Searching for icu ...
> [IP-] [  ] dev-libs/icu-49.1.2:0
> [-P-] [ ~] dev-libs/icu-50.1-r1:0/50.1
> [-P-] [ ~] dev-libs/icu-50.1-r2:0/50.1
> [-P-] [ ~] dev-libs/icu-50.1.1:0/50.1.1
> root@fireball / #
> 
> So, does it maybe want icu-50.* instead of the 49 that is installed? 
> That would be equal to or greater than what you likely have.  I might
> add, the 50 and above are keyworded. 
> 
> I took a stab at it but not sure what I hit.  ;-)

It's confusing, lemme see if I can describe it, using the URL that
Michel O posted.

Your eix shows 4 versions of icu. Everything there up to the "/" chars
is normal and what you've been using for ages.

The "/" is sub-slots, introduced in EAPI=5. icu-49 uses a lesser EAPI so
it has no sub-slots. Each icu version >=50 is in SLOT 0, and it will
install .so files with the version after the "/".

So take my icu for example, it's version 50.1.1 and equery files reveals
it installs:

/usr/lib64/libicui18n.so.50.1.1
/usr/lib64/libicuio.so.50.1.1
/usr/lib64/libicule.so.50.1.1

Well whaddaya know, the .so version matches what eix claims (meaning the
icu ebuild is correctly declaring what it will provide).

That's one half of the story, the other half is with packages that
DEPEND on icu. qt-core for example has this:

        icu? ( >=dev-libs/icu-49:= )

Now what that means is "qt-core DEPENDS on any version of icu >49, plus
the following: (this is the bit that's gonna bake your noodle)

If icu is re-emerged and that new version has a different .so version to
what the current version provides, then qt-core will break at run-time.
That's what the trailing = means, ie. qt-core depends on an icu that has
an soname equal to the one it has right now. In my case that is 50.1.1.
If I upgrade icu to a version with a different soname, then qt-core has
to be rebuilt, and now portage knows that.

There's another operator that can go where the "=" is and it's "*".
Which basically means "any". So if I have some package using EAPI=5 and
it has this line in DEPENDS:

        icu? ( >=dev-libs/icu-49:* )

Then that would mean it depends on >icu-49 and the soname doesn't matter
as it can be any version. Presumably the devs did their homework and
figured out what their packages depend on, then put the right info in
their ebuilds. (I fear this last might be a tall order, but hey, we're
discussing syntax here, not human ability)

Is this all starting to sound maybe just a little bit like some magic
that will make @preserved-rebuild and revdep-rebuild redundant? We need
those tools because portage does not know what so versions will work
fine with what, and these sub-slots are supposed to give portage that
info. Whoopee.

;-)

Clear as mud now?


-- 
Alan McKinnon
alan.mckin...@gmail.com


Reply via email to