The version string of libcamera is presently appended with a date/time argument in the case of a dirty tree to show further detail of when it was built. This string is generated with the iso-8601 parameter to 'date' and produces a date string in the form: "2024-06-17T22:15:30+01:00" Strict posix shells or implementations of 'date' which may be optimised for size such as the one provided by busybox or Alpine Linux may not support the '--iso-8601' flag. To support builds on those platforms, use a direct POSIX-compliant date-format string instead matching as closely as possible to the iso-8601 definition. An exact match is not possible with those restrictions so 'date %Y-%m-%dT%H:%M:%S%Z' is used which produces 2024-06-17T22:15:30BST. The use of the human readable timezone identifier provides a friendlier output for the string than a timezone offset at the expense of being less sortable in the exceptionally low risk and unlikely event of two custom builds being compared at the same time of different timezones. Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Zach DeCook <zachdecook@librem.one> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
58 lines
1.7 KiB
Bash
Executable file
58 lines
1.7 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Generate a version string using git describe
|
|
|
|
build_dir="$1"
|
|
src_dir="$2"
|
|
project_version="$3"
|
|
|
|
# If .tarball-version exists, output the version string from the file and exit.
|
|
# This file is auto-generated on a 'meson dist' command from the run-dist.sh
|
|
# script.
|
|
if [ -n "$src_dir" ] && [ -f "$src_dir"/.tarball-version ]
|
|
then
|
|
cat "$src_dir"/.tarball-version
|
|
exit 0
|
|
fi
|
|
|
|
# Bail out if the directory isn't under git control
|
|
git_dir=$(git rev-parse --git-dir 2>&1) || exit 1
|
|
|
|
# Derive the source directory from the git directory if not specified.
|
|
if [ -z "$src_dir" ]
|
|
then
|
|
src_dir=$(readlink -f "$git_dir/..")
|
|
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.0-$commits-g$sha"
|
|
fi
|
|
|
|
# Append a '-dirty' suffix if the working tree is dirty. Prevent false
|
|
# positives due to changed timestamps by running git update-index.
|
|
if [ -z "$build_dir" ] || (echo "$build_dir" | grep -q "$src_dir")
|
|
then
|
|
git update-index --refresh > /dev/null 2>&1
|
|
fi
|
|
git diff-index --quiet HEAD || version="$version-dirty ($(date +%Y-%m-%dT%H:%M:%S%Z))"
|
|
|
|
# If a project version is provided, use it to replace the version number.
|
|
if [ -n "$project_version" ]
|
|
then
|
|
version=$(echo "$version" | sed -e 's/^[^-]*-//')
|
|
version="v$project_version-$version"
|
|
fi
|
|
|
|
# Replace first '-' with a '+' to denote build metadata, strip the 'g' in from
|
|
# of the git SHA1 and remove the initial 'v'.
|
|
version=$(echo "$version" | sed -e 's/-/+/' | sed -e 's/-g/-/' | cut -c 2-)
|
|
|
|
echo "$version"
|