> 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? Should I set the name to the correct ‘libcryptopp.N.dylib’ after the build and before the install? 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. 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??) package-dev: headers in include/libcryptopp 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 ------------------------------------------------------------------------------ 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