[GiNaC-devel] Making new releases: libtool

Richard B. Kreckel kreckel at ginac.de
Sun Sep 20 22:28:25 CEST 2009


Hi Ralf!

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 

dnl libcln.so.$(CL_CURRENT)-$(CL_AGE) 


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.

Regards
    -richy.
-- 
Richard B. Kreckel
<http://www.ginac.de/~kreckel/>


More information about the GiNaC-devel mailing list