Re: llvm35/clang35 validation requires @rpath acceptance in shlib validation

Alexander Hansen <[email protected]>
Newsgroups gmane.os.apple.fink.devel
Organization Fink Core Team
Message-ID <[email protected]>
On 11/8/14, 5:23 PM, Alexander Hansen wrote:
> On 11/8/14, 3:33 PM, David Fang wrote:
>> On Sat, 8 Nov 2014, Alexander Hansen wrote:
>>
>>> On 11/8/14, 1:03 PM, David Fang wrote:
>>>>  Alex,
>>>>
>>>> >  On Nov 4, 2014, at 11:07 AM, David Fang <[email protected]>
>>>> wrote:
>>>> > > >  Hi all,
>>>> > >       Sitting in my experimental tree is a draft of llvm35's
>>>> packaging
>>>> > >  that bootstraps (much like its predecessor llvm34), but fails
>>>> Shlib
>>>> > >  validation because the install_names for shlibs all start with
>>>> @rpath
>>>> > >  (or
>>>> > >  on older darwin @executable_path or @loader_path).  This was a
>>>> > >  decision by
>>>> > >  upstream build maintainers that allows this package to be
>>>> > >  binary-relocatable, even though fink makes no such guarantees
>>>> about > >  its
>>>> > >  packages -- fink's remain in fixed install locations.
>>>> > >  dmacks and akh began to look into a patch that would allow this
>>>> to > >  pass
>>>> > >  validation.  Can you guys comment on the status/issues/obstacles?
>>>> > >  Such a fix would unblock llvm35 from hitting dists.
>>>> > > > >  Thanks!
>>>> > > > >  Fang
>>>> > > > >  --
>>>> > >  David Fang
>>>> > >  http://www.csl.cornell.edu/~fang/
>>>> > > > > >  Here?s the change I injected thus far:
>>>> > >  diff --git a/perlmod/Fink/Validation.pm
>>>> b/perlmod/Fink/Validation.pm
>>>> >  index 29fc4ab..a5010dd 100644
>>>> >  --- a/perlmod/Fink/Validation.pm
>>>> >  +++ b/perlmod/Fink/Validation.pm
>>>>> @@ -2198,12 +2198,12 @@ sub _validate_dpkg {
>>>> >                                         <OTOOL>; # skip first line
>>>> >                                         my ($libname,
>>>> $compat_version)
>>>> >  = <OTOOL> =~ /^\s*(\S+)\s*\(compatibility version ([\d\.]+)/;
>>>> >                                         close (OTOOL);
>>>> >  -                                       if ($libname !~ /^\//) {
>>>> >  +                                       if (($libname !~ /^\//) and
>>>> >  ($libname !~ /\@.*path\//)) {
>>>> >                                                 print "Error: package
>>>> >  contains the shared library\n";
>>>> >                                                 print "
>>>> >  $dylib\n";
>>>> >                                                 print "       but the
>>>> >  corresponding install_name\n";
>>>> >                                                 print "
>>>> >  $libname\n";
>>>> >  -                                               print "       is not
>>>> >  an absolute pathname.\n";
>>>> >  +                                               print "       is not
>>>> >  an absolute pathname or runtime path.\n";
>>>> >                                                 $looks_good = 0;
>>>> >                                         } elsif (not exists
>>>> >  $deb_shlibs->{$libname}) {
>>>> >                                                 $libname =~
>>>> >  s/^$basepath/%p/;
>>>> > >  And the validator moves on:
>>>> > >  Validating .deb file
>>>> >  /sw/fink/debs/polly35-shlibs_3.5.0-0_darwin-x86_64.deb...
>>>> >  Error: package contains the shared library
>>>> >           /sw/opt/llvm-3.5/lib/libPolly.dylib
>>>> >        but the corresponding install_name and compatibility_version
>>>> >           @rpath/libPolly.dylib 0.0.0
>>>> >        are not listed in the Shlibs field.  See the packaging manual.
>>>>
>>>>  Thanks for working on this patch.
>>>>  I'm a little puzzled about the libPolly error, since my .info file
>>>> has:
>>>>
>>>>       Package: polly35-shlibs
>>>>       ...
>>>>           Files: <<
>>>>                   opt/llvm-3.5/lib/LLVMPolly.so
>>>>                   opt/llvm-3.5/lib/libPolly*.dylib
>>>>           <<
>>>>           DocFiles: tools/polly/LICENSE.txt tools/polly/CREDITS.txt
>>>>           Shlibs: <<
>>>> !% p/opt/llvm-3.5/lib/LLVMPolly.so
>>>> !% p/opt/llvm-3.5/lib/libPolly.dylib
>>>>           <<
>>>>
>>>>  Am I missing some obvious fix?
>>>>
>>>>  Fang
>>>>
>>>
>>> I assumed that it was because Shlibs entries refer to the
>>> install_name, which happens not to map onto the filename when using
>>> @rpath and friends.  Maybe
>>>
>>> Shlibs: <<
>>>     !@ rpath/LLVMPolly.so
>>>     !@ rpath/LLVMPolly.dylib
>>> <<
>>>
>>> would do the job.  I'll check that.
>>
>> Did any of the other split-offs trigger that diagnostic?  All shlib
>> split-offs follow the same form.
>>
>
> Yeah, they all did.
>

Now, having put @rpath/foo.dylib in the relevant places, I've been able 
to find the next place where there's a problem:

Fiona-2:upstream_fink hansen$ fink validate 
/sw/fink/debs/clang35-shlibs_3.5.0-0_darwin-x86_64.deb
Validating .deb file 
/sw/fink/debs/clang35-shlibs_3.5.0-0_darwin-x86_64.deb...
Error: Shlibs field specifies file '@rpath/libclang.3.5.dylib', but it 
does not exist!
Error: Shlibs field specifies file '@rpath/libiomp5.dylib', but it does 
not exist!

Maybe in the case where we have @rpath or other such variable we'll want 
simply to find the dylib, since the whole point of @rpath is that the 
libraries don't need to know where they are except relative to the 
executable, right?
-- 
Alexander Hansen, Ph.D.
Fink User Liaison
My package updates: http://finkakh.wordpress.com/

------------------------------------------------------------------------------
_______________________________________________
Fink-devel mailing list
[email protected]
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.