blob: dc733dbdb26508a926faf22a81ffb98a2c18bee7 [file] [log] [blame]
<div class="wiki-content maincontent"><h1 id="ActiveMQ-CPP,libtoolandpackagingnotes-ActiveMQ-CPP,libtoolandpackagingnotes">ActiveMQ-CPP, libtool and packaging notes</h1>
<h3 id="ActiveMQ-CPP,libtoolandpackagingnotes-Introduction">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 id="ActiveMQ-CPP,libtoolandpackagingnotes-Concepts">Concepts</h3>
<p>Product version numbers</p>
<ul><li>Please see the notes on <a shape="rect" href="activemq-cpp-product-version-number.xml">ActiveMQ-CPP product version number</a></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>