[GiNaC-devel] Making new releases: libtool
Richard B. Kreckel
kreckel at ginac.de
Sun Sep 20 22:28:25 CEST 2009
I just figured I would like to make a new release of CLN. I then
realized that setting version numbers has always been confusing me.
Until now, I've never cared as much about this as I should, but this
should some day get clarified.
The configure.ac file in CLN says:
dnl * increment CL_REVISION,
dnl * if any functions/classes have been added, removed or changed,
dnl increment CL_CURRENT and set CL_REVISION to 0,
dnl * if any functions/classes have been added, increment CL_AGE,
dnl * if backwards compatibility has been broken, set CL_AGE to 0.
dnl $(CL_CURRENT):$(CL_REVISION):$(CL_AGE) results in
Okay, let's see. I've fixed a function that used to segfault and I've
added support for a platform that was not supported before. I increment
CL_REVISION. Have I added, removed ro changed a function or class? I'm
not sure. Interface-wise not. But I've changed functionality (it doesn't
crash any more). So I increment CL_CURRENT to 7 and set CL_REVISION to
0. I haven't added functions/classes, so I don't touch CL_AGE. And I
haven't broken backwards compatibility, so I leave CL_AGE at 0. This
results in libcln.so.7.0.0, which is clearly bogus, since the new
version is a drop-in replacement for the old one!
So, back to the second item: Maybe I shoudn't have incremented
CL_CURRENT. Then, CL_REVISION is still 0. I haven't added
functions/classes, so CL_AGE remains at 0, and I haven't broken
backwards compatibility. Oops, then all version numbers remain the same.
This is bogus, too!
The confugure.ac file in GiNaC is slightly less ambiguous:
dnl When making releases, do
dnl 1. Increment ginac_lt_revision
dnl 2. If any interfaces have been added, removed, or changed since the
dnl last release, increment ginac_lt_current and set
dnl ginac_lt_revision to 0.
dnl 3. If any interfaces have been removed since the last release, set
dnl ginac_lt_age to 0.
Let's see what happens when I apply this to the new CLN release. This is
more clear, since it refers to "interfaces" as opposed to
"functions/classes". So I end up with REVISION=1, CURRENT=6 (as before),
and AGE=0. This looks better and results in libcln.so.6.0.1. But is this
correct? AGE is never incremented!
Can you suggest better texts for configure.ac, so making new releases
becomes painless? I shamefully have to admit that reading the libtool
documentation did not really enlighten me.
Richard B. Kreckel
More information about the GiNaC-devel