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