> On Jun 25, 2017, at 17:39, Scott Hannahs <s...@magnet.fsu.edu> wrote:
> 
>> 
>> On Jun 25, 2017, at 7:27 AM, Hanspeter Niederstrasser 
>> <f...@snaggledworks.com> wrote:
>> 
>> On 6/24/17 5:19 PM, Scott Hannahs via Fink-devel wrote:
>>> I need a bit of help with a fink package.  I don’t fully understand the 
>>> Shlibs: tag in a fink package.  I am trying to create a package for a 
>>> dynamic library.  The library builds correctly.  However it just builds the 
>>> library as cryptopp.dylib in the midst of the source files.
>>> The discussion of the SHLIBS tag in the packaging manual seems a bit 
>>> obscure to me.
>>> Here is the relevant part of the package as I have it now following another 
>>> library package as a template.
>>> NoSourceDirectory: True
>>> CompileScript: make dynamic
>>> InfoTest: <<
>>>  TestScript: make test || exit2
>>> <<
>>> DocFiles: Install.txt License.txt Readme.txt
>>> InstallScript: make install PREFIX=%i
>>> SplitOff: <<
>>>   Package: %N-shlibs
>>>   Files: <<
>>>      lib/libcryptopp.dylib
>>>    <<
>>>   Shlibs: <<
>>>      %p/lib/libcryptopp.dylib 5.6.0 %n (>= 5.6.5-5)
>>>   <<
>>> <<
>>> SplitOff2: <<
>>>   Package: %N-dev
>>>   Depends: %N-shlibs (= %v-%r)
>>>   BuildDependsOnly: true
>>>   Files: <<
>>>      include
>>>   <<
>>> <<
>>> the package goes and build both the dylib and .a libraries, but has a 
>>> problem installing them.  The deb file does not pass authentication when I 
>>> run fink in -m mode.
>>> When I try to build with the -km flags, I get the following:
>>> Validating .deb dir /sw/src/fink.build/root-libcryptopp-shlibs-5.6.5-13...
>>> Error: Name '/sw/lib/libcryptopp.dylib' specified in Shlibs does not match 
>>> install_name 
>>> '/sw/src/fink.build/root-libcryptopp-5.6.5-13/sw/lib/libcryptopp.dylib'
>>> Error: package contains the shared library
>>>          /sw/lib/libcryptopp.dylib
>>>       but the corresponding install_name and compatibility_version
>>>          
>>> %p/src/fink.build/root-libcryptopp-5.6.5-13/sw/lib/libcryptopp.dylib 5.6.0
>>>       are not listed in the Shlibs field.  See the packaging manual.
>> 
>> Your Shlibs: field is OK given what the library is giving you, but the 
>> problem is that upstream is not handling their library in a useful way.
>> 
>> 1) Their library is not versioned. It is named 'librcrypto.dylib', but 
>> should be 'libcrypto.N.dylib', where N is the library version (not 
>> necessarily the zipfile version). This can be fixed by modifying the 
>> makefile and adding $(LIB_MAJOR) to the install_name bits.
>> 
>> 2) The makefile uses install_name_tool to change the install name of the 
>> library but uses $(DESTDIR) badly in setting the new -id of the library. 
>> This incorrectly adds the whole 'src/fink.build/root-...' mess to the 
>> install_name. Fix the makefile to only use LIBDIR when setting the 
>> install_name for the library. And tell upstream, because that is a basic 
>> error.
>> 
>> 3) As far as I can tell, the Makefile fully supports DESTDIR, so you're 
>> probably better off using both DESTDIR=%d and PREFIX=%p in the install 
>> command (and not PREFIX=%i).
>> 
>> 4) Fink convention is that if your library is libcryptopp.5.dylib, your 
>> package should be libcryptopp5-shlibs and libcryptopp5-dev. The base package 
>> (if non-library) can stay libcryptopp (no 5).
>> 
>> Hanspeter
> 
> Thanks, I have attempted this but I am not sure I understand what the 
> install_name_tool actually does.  I don’t think that it creates the 
> ‘libcryptopp.N.dylib’ files themselves?  But sets an internal name?
> 

Correct.  

> Should I set the name to the correct ‘libcryptopp.N.dylib’ after the build 
> and before the install?
> 

You can even set it at the end of the install phase (i.e. somewhere in the 
InstallScript).  

> So do I need to modify the install phase to install the 
> /sw/lib/libcryptopp.5.dylib file?  Should it be a hard link to the 
> libcryptopp.dylib or should that file not exist.
> 

The preferred option is actually the reverse:  real libcryptopp.5.dylib with 
libcryptopp.dylib as a symbolic link.  

> When there are two split off packages, I think I have the following
> all packages: Install.txt License.txt Readme.txt in share/doc/libcryptopp5
> package: cryptest.exe in /bin  testdata in share/libcryptopp/ headers in 
> include/libcryptopp
> package-shlib: lib/libcryptopp.5.dylib and libcryptopp.dylib (and maybe 
> libcryptopp.a but I think I can delete it??)

Ideally, package-shlibs should only contain the shared library/libraries and 
the DocFiles you noted earlier.

> package-dev: headers in include/libcryptopp

If libcryptopp.dylib is a symlink as I suggested above, it needs to go here.  
This structure helps us to have multiple versions of the library available for 
builds, since by swapping the -dev package we can change what -lFOO on a build 
line really points to.
 
> 
> for some reason it tries to move instead of copy and it fails creating the 
> shlibs folder structure.
> 
> /bin/mv 
> /sw/src/fink.build/root-libcryptopp5-5.6.5-16/sw/lib/libcryptopp.dylib 
> /sw/src/fink.build/root-libcryptopp5-shlibs-5.6.5-16/sw/lib/
> mv: rename 
> /sw/src/fink.build/root-libcryptopp5-5.6.5-16/sw/lib/libcryptopp.dylib to 
> /sw/src/fink.build/root-libcryptopp5-shlibs-5.6.5-16/sw/lib/libcryptopp.dylib:
>  No such file or directory
> 
> -Scott
> 

Moving rather than is intentional, since you aren’t supposed to have the same 
file provided by multiple splitoffs in a package build.  We’d wind up with 
files duplicated between the main package and splitoffs, or we’d have to go 
back and delete them after the fact.

Make sure that you didn’t declare it in multiple Files lines, and otherwise 
check what’s actually in the directory.

-- 
Alexander Hansen, Ph.D.
Fink User Liaison

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
List archive:
https://sourceforge.net/p/fink/mailman/fink-devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to