meson: Generate version for reproducibility

Right now we call date directly from meson.build leading to
non-reproducible builds.

This commit makes it only call date when building from git,
otherwise it extracts the version from the tarball name.

script borrowed from accountsservice.

Closes https://gitlab.freedesktop.org/plymouth/plymouth/-/issues/188
This commit is contained in:
Ray Strode 2022-11-29 14:26:43 -05:00
parent e285c91fc4
commit 36cf20c6fa
2 changed files with 27 additions and 10 deletions

View file

@ -1,15 +1,6 @@
project('plymouth', 'c',
meson_version: '>= 0.61',
version: run_command(
'date', '+%y.%V.' + run_command(
'git', 'rev-list',
run_command('git', 'describe', '--abbrev=0', check: true).stdout().strip() + '..HEAD',
'--count',
check: true,
).stdout().strip(),
'-d', '@' + run_command('git', 'log', '-1', '--pretty=format:%ct', check: true).stdout().strip(),
check: true,
).stdout().strip(),
version: run_command(['scripts/generate-version.sh'], check: true).stdout().strip(),
)
# Modules

26
scripts/generate-version.sh Executable file
View file

@ -0,0 +1,26 @@
#!/bin/sh
exec 3>&2 2> /dev/null
SRCDIR=$(dirname "$0")
cd "$SRCDIR"
CWD=$(realpath "$PWD")
TOPLEVEL_WORKING_DIR=$(realpath "$(git rev-parse --show-toplevel)")
SCRIPTDIR=${SRCDIR#"${TOPLEVEL_WORKING_DIR}/"}
exec 2>&3
# If it's not from a git checkout, assume it's from a tarball
if [ "${TOPLEVEL_WORKING_DIR}/${SCRIPTDIR}" != "$CWD" ]; then
VERSION_FROM_DIR_NAME=$(basename "$CWD" | sed -n 's/^plymouth-\([^-]*\)$/\1/p')
if [ -n "$VERSION_FROM_DIR_NAME" ]; then
echo "$VERSION_FROM_DIR_NAME"
exit 0
fi
echo "Source doesn't appear to come from an plymouth git clone or tarball. Version unknown."
exit 1
fi
# If it is from a git checkout, derive the version from the date of the last commit, and the number
# of commits since the last release.
COMMITS_SINCE_LAST_RELEASE=$(git rev-list $(git describe --abbrev=0)..HEAD --count)
date +%y.%V.${COMMITS_SINCE_LAST_RELEASE} -d "@$(git log -1 --pretty=format:%ct)"