mirror of
https://github.com/systemd/systemd
synced 2024-10-01 13:55:20 +00:00
meson: restore tools/meson-vcs-tag.sh
This conceptually reverts e95acdfe1d
,
but the actual contents of the script are taken from the command invocation
in meson with all the updates that happened in the meantime.
One small change is that I replaced () by {}: this avoids one subprocess spawn.
People were worried about the cost of vcs_tag(), and this microoptimization may
help a bit. I measured the speed on machine, and noop rebuilds are still about
100–120 ms.
The logic is entirely moved to the script. This makes the meson config simpler
and also makes it easier to use it externally.
The script is needed for in-place rpm builds, see README.build-in-place.md [1],
where it is invoked from the spec file to determine the project version.
[1] https://src.fedoraproject.org/rpms/systemd/blob/rawhide/f/README.build-in-place.md
This commit is contained in:
parent
ba4d7e8029
commit
1a71ac07ad
19
meson.build
19
meson.build
|
@ -1808,26 +1808,13 @@ xml_helper_py = find_program('tools/xml_helper.py')
|
|||
############################################################
|
||||
|
||||
version_tag = get_option('version-tag')
|
||||
# Check that we have either .git/ (a normal clone) or a .git file (a work-tree) and that we don't
|
||||
# get confused if a tarball is extracted in a higher-level git repository.
|
||||
if version_tag == '' and git.found() and fs.exists(project_source_root / '.git')
|
||||
# If the working tree has no tags (CI builds), the first git-describe will fail
|
||||
# and we fall back to project_version-commitid instead.
|
||||
version_cmd = '''(git -C "$1" describe --abbrev=7 --dirty=^ 2>/dev/null ||
|
||||
echo "$2-$(git -C "$1" describe --always --abbrev=7)") |
|
||||
sed 's/^v//; s/-rc/~rc/' '''
|
||||
else
|
||||
version_cmd = '''echo "$2" '''
|
||||
endif
|
||||
|
||||
version_h = vcs_tag(
|
||||
input : 'src/version/version.h.in',
|
||||
output : 'version.h',
|
||||
# TODO: Use 'sh' variable with meson >= 0.63.0
|
||||
command: ['sh', '-euc', version_cmd,
|
||||
'_',
|
||||
command: [project_source_root / 'tools/meson-vcs-tag.sh',
|
||||
project_source_root,
|
||||
version_tag == '' ? meson.project_version() : version_tag,
|
||||
meson.project_version(),
|
||||
version_tag,
|
||||
])
|
||||
|
||||
shared_lib_tag = get_option('shared-lib-tag')
|
||||
|
|
28
tools/meson-vcs-tag.sh
Executable file
28
tools/meson-vcs-tag.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
set -eu
|
||||
set -o pipefail
|
||||
|
||||
dir="${1:?}"
|
||||
fallback="${2:?}"
|
||||
version_tag="$3"
|
||||
|
||||
if [ -n "${version_tag}" ]; then
|
||||
# If -Dversion_tag= was used, just use that without further changes.
|
||||
echo "${version_tag}"
|
||||
else
|
||||
# Check that we have either .git/ (a normal clone) or a .git file (a work-tree)
|
||||
# and that we don't get confused if a tarball is extracted in a higher-level
|
||||
# git repository.
|
||||
#
|
||||
# If the working tree has no tags (CI builds), the first git-describe will fail
|
||||
# and we fall back to project_version-commitid instead.
|
||||
if [ -e "${dir}/.git" ]; then
|
||||
c="$(git -C "$dir" describe --abbrev=7 --dirty=^ 2>/dev/null ||
|
||||
echo "${fallback}-$(git -C "$dir" describe --always --abbrev=7)")"
|
||||
else
|
||||
c="${fallback}"
|
||||
fi
|
||||
echo "$c" | sed 's/^v//; s/-rc/~rc/'
|
||||
fi
|
Loading…
Reference in a new issue