I'm sure that there are a lot of things that we do wrong in the configure scripts, but so far I can't find anyone who really know what the right thing to do with the autotools is. It would be nice if there was a "Best Practices" document for the autotools that we could refer to.

I personally have no time to really investigate this right now, probably won't till sometime next year.
What I would do if you'd like to get something changed is:

1. Write a Jira issue documenting that there is a problem.
2. Investigate the problem and the correct solution
3. Describe in simple terms (not autoconf language) what the problem is and how to fix it. Keep in mind that people how work on this project do so in their spare time and have extremely limited resources to read large bodies of documentation.
4. If applicable. Submit a patch that corrects the problem.

If the solution involves steps that the maintainer needs to follow when making a release then I'd recommend editing the Wiki for Creating Distributions: http://activemq.apache.org/cms/creating-distributions.html This will ensure that when a release is made the maintainer has something to help them get it done correctly.

Regards
Tim.

Daniel Pocock wrote:
I've just been looking at the way libtool is used by ActiveMQ-CPP,
in anticipation of creating some Debian packages.

The parameters to -version-info are defined like this:
 current = 2 = current interface version
 revision = 1 = the revision of the library (binary compatibility is
preserved across revisions)
 age = 2 = the difference between the newest and oldest interface that
this library implements

The numbers above (2:1:2) are the values used when building ActiveMQ-CPP. It appears
that this is just the ActiveMQ-CPP version number - the libtool
version-info has a
completely different meaning.

The second and third parameters may not be correct.  Why?
- Is 2.0 and 2.1 binary compatible?  If no, then `current' must be
incremented, just
  changing revision is not sufficient.
- Setting `age = 2' implies that 2.x, 1.x and 0.x are all binary
compatible.  In other
  words, we are asserting that no function prototypes or struct
definitions have changed
  between between the current version and version (current - age = 2 - 2 =
0 = 0.x).
- For instance, if 1.x and 2.x are NOT binary compatible, age must be set
to 0.

http://www.gnu.org/software/libtool/manual.html#Versioning

It also appears that both -version-info and -release are used.  This may not
be necessary.  Having a unique `release' for each release that breaks
binary compatibility is a good idea.  However, does 2.x.2 break
binary compatibility with 2.x.1?  If not, then release should just
be 2.x instead of 2.x.2.

It would be useful if you could have a look at the Debian Library
Packaging Guide, particularly the section about choosing the
package name and numbering conventions:

http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html#id250154

Here is the libtool command issued on my system when using make:

/bin/sh ../../libtool --tag=CXX   --mode=link g++ -ansi -pedantic -W -Wall
-fPIC
 -fstrict-aliasing -Wstrict-aliasing=2 -Wno-long-long -g -O2 -version-info
2:1:2
-release 2.1.2 -o libactivemq-cpp.la -rpath /usr/lib activemq/core/libactivem
q_cpp_la-ActiveMQConsumer.lo ...........



Reply via email to