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

------------------------------------------------------------------------------
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