Hi, I was starting to prepare the next release and would like to propose a little change in the version system. Currently groff's version is set in 'VERSION' and 'REVISION' files in the top source directory. When a new release was planned, the VERSION and/or REVISION files were first upgraded, then an initial tag was created (for example tag 1.22.3), and after some testing and fixes the final tag was created with a 'real' suffix (last tag was: '1.22.3.real').
In order to track more finely the version used when people report an issue, I propose to use gnulib's script 'git-version-gen' to generate a unique version. The other advantage is that installation bugs could be more easily detected: groff install some data in /usr/share/groff/<version>, so currently if a commit breaks the installation of a file this can be unnoticed if the user did not uninstall its previous version of groff. 'git-version-gen' relies on the command 'git describe' and works roughly like this: - From a git repository: . if the current commit corresponds to a tag, then the version is simply the tag name. . Otherwise the version has the following format: <tag>-<nb_commits>-<commit> With: -- tag: the most recent tag reachable from the current commit -- nb_commits: number of commits between the most recent tag and the current commit. -- current commit sha1, abbreviated. For example: 1.22.3.real.434-5aafd If there are some local diff the script will also add a 'dirty' suffix. The version is stored in a file '.version'. - From a tarball, the version is taken from a file '.tarball-version', which is generated by the build system. I've made the necessary changes on a branch 'unique-version'; to test it: git clone https://git.savannah.gnu.org/git/groff.git cd groff git checkout --track origin/unique-version ./bootstrap mkdir build cd build ../configure make -j and to generate the tarball: make dist Note: the full version is propagated in the various executables generated by the build system (for example 'groff --verrsion' will give something like "GNU troff (groff) version 1.22.3.real.434-5aafd"). However there is a register '\n[.Y]' that correspond to the revision of groff; as I can't pass non alphanumeric characters to it (in the above example the revision would be equal to '3.real.434-5aafd') this register will be defined as the first alphanumeric digits of the revision. If no one object to this change then I'll merge it on master. Regards, Bertrand Garrigues