On Apr 11, 2011, at 12:29 AM, Per Øyvind Karlsen wrote:

> wrong sender.. fgrf
> 
> ---------- Forwarded message ----------
> From: Per Øyvind Karlsen <peroyv...@mandriva.org>
> Date: 2011/4/11
> Subject: Re: [CVS] RPM: rpm/ CHANGES rpm/lib/ librpm.vers rpmds.c
> rpmds.h rpmfc.c
> To: rpm-devel@rpm5.org
> 
> 
> 2011/4/11 Jeff Johnson <n3...@mac.com>:
>> I knew I'd seen this symlink patch before:
>> 
>>        
>> https://lists.dulug.duke.edu/pipermail/rpm-devel/2006-April/001037.html
>> 
>> I did not like the patch the first time, and I don't like it 5 years later.
>> 
>> I will rework the issue under #if RPM_VENDOR_MANDRIVA across the board.
>> 
>> Note that the rule (already implemented except you've turned it off)
>>        All symlinks depend on their end-point.
>> not only covers the special case of ELF libraries (when the symlink is
>> explicitly "owned" by a package), but all other cases of symlinks to
>> end-points in other packages. Yes you will need to teach URPMI and other
>> depsolvers about symlink end-points constructed from RPMTAG_FILELINKTOS
>> data, very not hard.
>> 
>> The only remaining "feature" is the explicit
>>        Requires: devel(whatever)
>> added to metadata. I fully realize the difficulties
>> of transitive closure in "dependency hell", but hey, lets not
>> go around in circles all over again.
>> 
>> Note that the rule I've stated requires zero additional metadata,
>> the linkto dependency is constructed on the install box from the symlink
>> end-points that are already in metadata (but you're likely choosing to
>> disable that functionality some 4? 5? years after being implemented).
>> 
> Hm, I suspect you're misunderstanding the purpose of the devel() 
> dependencies..

See the link where Stefan advocated.

> 
> They're not in place for adding dependencies on where symlinks points at,
> but rather as an identifier for where 'symlink to SONAME ending with
> .so in filename'

You will need to give me an explicitly worked example
because there can be multiple symlinks like here:

        lrwxrwxrwx 1 root root       13 Feb 22 18:11 /usr/lib/libz.so -> 
libz.so.1.2.5*
        lrwxrwxrwx 1 root root       13 Feb 14 12:33 /usr/lib/libz.so.1 -> 
libz.so.1.2.5*
        lrwxrwxrwx 1 root root       23 Feb 14 12:33 /usr/lib/libz.so.1.2.5 -> 
../../lib/libz.so.1.2.5*

The DT_SONAME is actually:

        $ readelf -a /usr/lib/libz.so.1.2.5 | grep SONAME
         0x0000000e (SONAME)                     Library soname: [libz.so.1]

And so I see
        $ rpm -q --provides libzlib-devel
        libz-devel = 1.2.5-3mdv2011.0
        libzlib-devel = 1.2.5-3mdv2011.0
        zlib-devel = 1.2.5-3mdv2011.0
        uClibc-zlib-devel = 1.2.5-3mdv2011.0
        uClibc-zlib1-devel = 1.2.5-3mdv2011.0
        pkgconfig(zlib) = 1.2.5
  ==>   devel(libz)
        libzlib-devel = 1.2.5-3mdv2011.0
        libzlib-devel(x86-32) = 1.2.5-3mdv2011.0

and "devel(libz)" isn't an SONAME at all but rather something that you are 
calling a SONAME.

And I don't know what you mean by "identifier" since I haven't any idea
what is being identified (except de facto what Mandriva wants and what Stefan 
wanted etc).


> is considered as being part of a devel package, hence the
> devel(soname) provides,
> with requires added for all devel(SONAME) found under DT_REQUIRED (so it's 
> more
> dependencies related to what libraries linked at rather than symlinks
> endpoints to).
> 

And so the DT_NEEDED (there is no DT_REQUIRED afaik) is actually:

        $ readelf -a /usr/lib/librpmio-5.3.so | grep NEEDED
        ...
         0x00000001 (NEEDED)                     Shared library: [libz.so.1]

or if you prefer

        $ ldd /usr/bin/rpm
                ...
                libz.so.1 => /lib/libz.so.1 (0xb65a7000)

All of which appear consistently to claim "libz.so.1" as the SONAME.

And "libz.so.1" does _NOT_ appear in
        Requires: devel(libz)


> These are actually quite convenient dependencies added, as it prevents having 
> to
> manually add dependencies on other -devel packages in the -devel package that
> it usually tends to depend on.
> 

Um, I do not see "convenient" whatsoever. I see yet more confusion.

> I'm okay with the helper beng disabled by default, but I really don't
> see any good
> reason for moving it under #ifdef mandriva, that would be a step away from
> any attempts at vendor neutral approach IMO.
> 

WHo else but the Mandriva monoculture uses
        Requires: devel(foo)
WHy SHOULDNT the code be under
        #ifdef RPM_VENDOR_MANDRIVA
if only Mandriva uses?

And I don't see how a half assed patch checked in yesterday and examined
today is a step away from anything whatsoever, including being "vendor neutral".

> The devel() dependencies are way more useful in real world cooker usage than 
> ie.
> the pkgconfig() etc. dependencies at least to my experienec..

I'm not in a position to say useful because I'm hearing no engineering argument,
just cooker! convenient! DT_REQUIRED!
and none of it makes any engineering sense.

The original patch that was posted (which Stefan advocated) was an
attempt to use only primary.xml and avoid having to download filelists.xml.
I understand that original intent to minimize bandwidth (didn't and doesn't work
as anticipated, but whatever).

I do not understand
        Requires: devel(libz)
at all.

For similar "primary.xml only download" reasons,  Mandriva has chosen to do
        Provides: /path/to/file
to populate synthesis files with paths. Rather silly and bizarre imho.

In my world Provides: != Filepaths ... in fact "providing" file paths forces
a more complex implementation in RPM because everything starting with a '/'
might be in either place (or even both places) which muddies many dependency
implementation issue.

73 de Jeff
> --
> Regards,
> Per Øyvind
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> Developer Communication List                        rpm-devel@rpm5.org

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to