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