1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-28 02:50:16 +03:00

meson: Decouple the version tag from the vcs tag

Let's split off a new vcs-tag option from version-tag that configures whether
the current commit should be appended to the version tag. Doing this saves
us from having to fiddle around with generating git versions in packaging
specs and instead let's meson do it for us, even if we pass in a custom
version tag.

With this approach there's no more need for tools/meson-vcs-tag.sh so
we remove it.
This commit is contained in:
Daan De Meyer 2024-02-16 16:58:58 +01:00
parent 88d4b97a24
commit 3f6ce3d4f0
5 changed files with 26 additions and 51 deletions

View File

@ -1853,13 +1853,27 @@ xml_helper_py = find_program('tools/xml_helper.py')
#####################################################################
version_tag = get_option('version-tag')
version_h = vcs_tag(
input : 'src/version/version.h.in',
output : 'version.h',
command: [project_source_root / 'tools/meson-vcs-tag.sh',
project_source_root,
version_tag,
])
if version_tag == ''
version_tag = meson.project_version()
endif
conf.set_quoted('VERSION_TAG', version_tag)
vcs_tag = get_option('vcs-tag')
if vcs_tag and fs.is_dir(project_source_root / '.git')
version_h = vcs_tag(
input : 'src/version/version.h.in',
output : 'version.h',
fallback : '',
command : ['sh', '-c', 'echo "-g$(git -C . describe --abbrev=7 --match="" --always --dirty=^)"'],
)
else
version_h = configure_file(
input : 'src/version/version.h.in',
output : 'version.h',
configuration : configuration_data({'VCS_TAG' : ''}),
)
endif
shared_lib_tag = get_option('shared-lib-tag')
if shared_lib_tag == ''

View File

@ -2,9 +2,11 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
option('version-tag', type : 'string',
description : 'override the git version string')
description : 'set the extended version string (defaults to project version)')
option('shared-lib-tag', type : 'string',
description : 'override the private shared library version tag (defaults to project version)')
option('vcs-tag', type : 'boolean', value : true,
description : 'append current git commit to version output when git information is available')
option('mode', type : 'combo', choices : ['developer', 'release'],
description : 'autoenable features suitable for systemd development/release builds')

View File

@ -68,6 +68,7 @@ if meson.is_cross_build() and get_option('sbat-distro') == 'auto'
elif get_option('sbat-distro') != ''
efi_conf.set_quoted('SBAT_PROJECT', meson.project_name())
efi_conf.set_quoted('PROJECT_VERSION', meson.project_version().split('~')[0])
efi_conf.set_quoted('VERSION_TAG', version_tag)
efi_conf.set('PROJECT_URL', conf.get('PROJECT_URL'))
if get_option('sbat-distro-generation') < 1
error('SBAT Distro Generation must be a positive integer')

View File

@ -7,4 +7,4 @@
* - where a simplified machine-parsable form is more useful, for example
* pkgconfig files and version information written to binary files.
*/
#define GIT_VERSION "@VCS_TAG@"
#define GIT_VERSION VERSION_TAG "@VCS_TAG@"

View File

@ -1,42 +0,0 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -u
set -o pipefail
dir="${1:-.}"
version_tag="${2:-}"
if [ -n "${version_tag}" ]; then
# If -Dversion_tag= was used, just use that without further changes.
echo "${version_tag}"
else
read -r project_version <"${dir}/meson.version"
# 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.
c=''
if [ -e "${dir}/.git" ]; then
c="$(git -C "$dir" describe --abbrev=7 --dirty=^ 2>/dev/null)"
if [ -n "$c" ]; then
# git describe uses the most recent tag. However, for development versions (e.g. v256~devel), the
# most recent tag will be v255 as there is no tag for development versions. To deal with this, we
# replace the tag with the project version instead.
c="${project_version}-${c#*-}"
else
# This call might still fail with permission issues
suffix="$(git -C "$dir" describe --always --abbrev=7 --dirty=^ 2>/dev/null)"
[ -n "$suffix" ] && c="${project_version}-${suffix}"
fi
fi
[ -z "$c" ] && c="${project_version}"
# Replace any hyphens with carets which are allowed in versions by pacman whereas hyphens are not. Git
# versions with carets will also sort higher than their non-git version counterpart both in pacman
# versioning and in version format specification versioning.
echo "$c" | sed 's/^v//; s/-/^/g'
fi