blob: ec8d0ae634cc24879cacf96a367ad9123c5fb3f8 [file] [log] [blame]
<div class="wiki-content maincontent"><h1>ActiveMQ-CPP, libtool and packaging notes</h1>
<h3>Introduction</h3>
<p>This page attempts to summarise information to be considered</p>
<ul><li>when configuring libtool</li><li>when packaging ActiveMQ for distribution on Debian, Red Hat, Solaris.</li></ul>
<h3>Concepts</h3>
<p>Product version numbers</p>
<ul><li>Please see the notes on <link><page ri:content-title="ActiveMQ-CPP product version number"></page></link></li></ul>
<p>SONAME</p>
<ul><li>At runtime (when dynamic linking occurs) the SONAME embedded in the library must match the SONAME expected by the application.</li><li>To see the SONAME embedded in the library, objdump -p libactivemq-cpp-2.1.2.so | grep SONAME</li><li>To see the SONAMEs expected by an application, objdump -p | grep NEEDED</li><li>By default, libtool will use the library filename as the SONAME</li><li>Libtool's default behaviour can be modified by the soname_spec variable</li><li>Possible SONAMEs fro ActiveMQ CPP:
<ul><li>libactivemq-cpp-2.1.2.so.0 (each executable will depend on a specific build and will refuse to work with any other build)</li><li>libactivemq-cpp.so.0 (only one version can be installed at the same time)</li><li>libactivemq2-cpp.so.0 (so that 2.x and 3.x can be installed simultaneously)</li></ul>
</li></ul>
<p>libtool -release</p>
<ul><li>the -release argument tells libtool the release number</li><li>the release number could be the major version number, the complete version number, or the SVN revision number</li><li>libtool believes that any two releases are NOT compatible - for example, if an executable expects release number 5, and the library has release number 4 or 6, the executable will refuse to run</li></ul>
<p>libtool -version-info current:revision:age</p>
<ul><li>Allows binary compatibility between versions</li><li>The number at the end of the filename is the interface version number</li><li>Interface version number is NOT THE SAME as the product version number</li><li>Interface version number should increment each time the `interface' changes (new function prototypes, new function arguments, change in wire protocol, etc)</li><li>The `age' number is used to indicate backwards compatibility - if age=1, then this interface is backwards compatible with the previous version only, if age=2, then this interface is backwards compatible with the 2 previous versions</li></ul>
<p>Debian package name</p>
<ul><li>The package name includes the following from libtool: release number and interface number</li><li>for example, if interface version = 4, then the package name = libactivemq-cpp4</li><li>The product version number is not part of the Debian package name - it is used elsewhere in Debian's control files</li></ul>
</div>