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 [email protected] List archive: https://sourceforge.net/p/fink/mailman/fink-devel Subscription management: https://lists.sourceforge.net/lists/listinfo/fink-devel
