> 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

Reply via email to