libcamera: Auto generate version information

Generate a version string, and provide a global string object which
allows applications to interrogate the current libcamera version
information.

The version header is automatically updated by meson on each build.
The string roughly follows the semver [0] conventions of
major.minor.patch-label as a value.

[0] https://semver.org/

A script (utils/gen-version.sh) is provided which is modelled upon the
processing from autoconf's git-version-gen. The gen-version.sh script
will look for tags in the form vX.Y as starting points for the version
string. While the repository does not have any matching tags, v0.0 will
be assumed, resulting in versions with both major and minor being set to
'0', and the patch count resulting from the number of patches in the
history to that point.

Finally, a uniquely identifying shortened hash is provided from git:

	v0.0.509+0ec0edf7

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Kieran Bingham 2019-01-18 11:59:40 +00:00
parent 63d50ef0c6
commit b817bcec6b
8 changed files with 85 additions and 13 deletions

37
utils/gen-version.sh Executable file
View file

@ -0,0 +1,37 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Generate a version string using git describe
if [ -n "$1" ]
then
cd "$1" 2>/dev/null || exit 1
fi
# Get a short description from the tree.
version=$(git describe --abbrev=8 --match "v[0-9]*" 2>/dev/null)
if [ -z "$version" ]
then
# Handle an un-tagged repository
sha=$(git describe --abbrev=8 --always 2>/dev/null)
commits=$(git log --oneline | wc -l 2>/dev/null)
version=v0.0.$commits.$sha
fi
# Prevent changed timestamps causing -dirty labels
git update-index --refresh > /dev/null 2>&1
dirty=$(git diff-index --name-only HEAD 2>/dev/null) || dirty=
# Strip the 'g', and replace the preceeding '-' with a '+' to denote a label
version=$(echo "$version" | sed -e 's/-g/+/g')
# Fix the '-' (the patch count) to a '.' as a version increment.
version=$(echo "$version" | sed -e 's/-/./g')
if [ -n "$dirty" ]
then
version=$version-dirty
fi
echo "$version"