Re: Help with shlib

Scott Hannahs <[email protected]> Sun, 25 Jun 2017 20:39:24 -0400
Newsgroups gmane.os.apple.fink.devel
Message-ID <[email protected]>
> On Jun 25, 2017, at 7:27 AM, Hanspeter Niederstrasser <[email protected]> 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
[email protected]
List archive:
https://sourceforge.net/p/fink/mailman/fink-devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel