Re: Help with shlib
Hanspeter Niederstrasser <[email protected]> Sun, 25 Jun 2017 06:27:19 -0500
| Newsgroups | gmane.os.apple.fink.devel |
|---|---|
| Organization | Snaggled Works |
| Message-ID | <[email protected]> |
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