On Nov 9, 2014, at 7:56 AM, Alexander Hansen <alexanderk.han...@gmail.com> 
wrote:

> 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 <f...@csl.cornell.edu>
>>>>> 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?

And here’s something which just looks possibly like a maintainer oversight. :-)

$ otool -L 
/sw/opt/llvm-3.5/lib/clang/3.5.0/lib/darwin/libclang_rt.asan_iossim_dynamic.dylib
/sw/opt/llvm-3.5/lib/clang/3.5.0/lib/darwin/libclang_rt.asan_iossim_dynamic.dylib:
        @rpath/libclang_rt.asan_iossim_dynamic.dylib (compatibility version 
0.0.0, current version 0.0.0)
        /sw/src/fink.build/llvm35-3.5.0-0/build/stage2.5/lib/libc++.1.dylib 
(compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 1197.1.1)

but the Shlibs (locally modified for @rpath—originally it had 
%p/opt/llvm-3.5/lib) has:

!@rpath/clang/%v/lib/darwin/libclang_rt.asan_iossim_dynamic.dylib
-- 
Alexander Hansen, Ph.D.
Fink User Liaison

------------------------------------------------------------------------------
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to