I maintain versioning of this package by a scheme below:
package version = major.minor.micro
so that:
major
: updated when losing backward compatibility.
minor
: updated when any new object or property for gobject are added.
micro
: updated when any changes of code except for the above; e.g. bug fixes.
In libtool fashion, versioning of library interface is decided by this scheme. Practically, this guideline is suggested. The version is described with three parts:
iface version = current:revision:age
so that:
current
: The most recent interface number that this library implements.
revision
: The implementation number of the current interface.
age
: The difference between the newest and oldest interfaces that this library implements.
Then, at present, I maintain versioning of library interface for libtool by a scheme below:
iface version = (minor * 10 + micro):(major):(minor * 10 + micro)
The relationship between versions of package/iface/binary is described in this fugure:
version |
iface |
.so.x.x.x |
0.3.0 |
30:0:30 |
0.30.0 |
0.4.0 |
41:0:41 |
0.41.0 |
0.5.0 |
52:0:52 |
0.52.0 |
0.6.0 |
63:0:63 |
0.63.0 |
0.7.0 |
74:0:74 |
0.74.0 |
0.8.0 |
85:0:85 |
0.85.0 |
0.8.1 |
81:0:81 |
0.81.0 |
0.8.2 |
82:0:82 |
0.82.0 |
For our information, suffix of binary file might be decided by libtool according to this formula:
.so.x.y.z = .so.(current - age).(age).(revision)
Well, at present, I have a plan to add changes with loss of backward compatibility and I'm working for updating major version to 1. Then, according to my formula, the relationship is described in this fugure:
version |
iface |
.so.x.x.x |
1.0.0 |
0:1:0 |
0.0.1 |
The current field of iface version declines to zero. This loses convention of library interface because the value of current field should be increased monotonically. I need to fix it.