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:
parent
88d4b97a24
commit
3f6ce3d4f0
28
meson.build
28
meson.build
@ -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 == ''
|
||||
|
@ -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')
|
||||
|
@ -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')
|
||||
|
@ -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@"
|
||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user