Invoking git and creating a .h file does not need a shell script. Embed the logic directly in meson.build.
Signed-off-by: Paolo Bonzini <[email protected]> --- meson.build | 29 ++++++++++++++++++++--------- include/qemu/version.h | 8 ++++++++ scripts/qemu-version.h.in | 1 + scripts/qemu-version.sh | 25 ------------------------- 4 files changed, 29 insertions(+), 34 deletions(-) create mode 100644 scripts/qemu-version.h.in delete mode 100755 scripts/qemu-version.sh diff --git a/meson.build b/meson.build index 7ec3fb90233..d4c8bb2dbef 100644 --- a/meson.build +++ b/meson.build @@ -78,6 +78,7 @@ have_user = have_linux_user or have_bsd_user ############ sh = find_program('sh') +git = find_program('git', required: false) python = import('python').find_installation() cc = meson.get_compiler('c') @@ -3551,15 +3552,25 @@ tracetool_depends = files( 'scripts/tracetool/__init__.py', ) -qemu_version_cmd = [find_program('scripts/qemu-version.sh'), - meson.current_source_dir(), - get_option('pkgversion'), meson.project_version()] -qemu_version = custom_target('qemu-version.h', - output: 'qemu-version.h', - command: qemu_version_cmd, - capture: true, - build_by_default: true, - build_always_stale: true) +qemu_pkgversion = get_option('pkgversion') +git_describe_version = [git, 'describe', '--match', 'v*', '--dirty'] +if qemu_pkgversion == '' and git.found() and fs.exists('.git') and \ + run_command(git_describe_version, check: false).returncode() == 0 + # Refresh the version at build time, so that "make" after a commit updates it. + qemu_version = vcs_tag(input: 'scripts/qemu-version.h.in', + output: 'qemu-version.h', + command: git_describe_version, + fallback: '') +else + # Unlike vcs_tag(), which always defines QEMU_PKGVERSION, leave it out if + # empty. include/qemu/version.h then omits the parentheses from + # QEMU_FULL_VERSION. + qemu_version_data = configuration_data() + if qemu_pkgversion != '' + qemu_version_data.set_quoted('QEMU_PKGVERSION', qemu_pkgversion) + endif + qemu_version = configure_file(output: 'qemu-version.h', configuration: qemu_version_data) +endif genh += qemu_version hxdep = [] diff --git a/include/qemu/version.h b/include/qemu/version.h index 38405495c0e..dd0f937f30c 100644 --- a/include/qemu/version.h +++ b/include/qemu/version.h @@ -7,6 +7,14 @@ #ifndef QEMU_VERSION_H #define QEMU_VERSION_H +/* qemu-version.h defines QEMU_PKGVERSION only if it is not empty. */ #include "qemu-version.h" +#ifdef QEMU_PKGVERSION +#define QEMU_FULL_VERSION QEMU_VERSION " (" QEMU_PKGVERSION ")" +#else +#define QEMU_PKGVERSION "" +#define QEMU_FULL_VERSION QEMU_VERSION +#endif + #endif diff --git a/scripts/qemu-version.h.in b/scripts/qemu-version.h.in new file mode 100644 index 00000000000..b62d4c22652 --- /dev/null +++ b/scripts/qemu-version.h.in @@ -0,0 +1 @@ +#define QEMU_PKGVERSION "@VCS_TAG@" diff --git a/scripts/qemu-version.sh b/scripts/qemu-version.sh deleted file mode 100755 index 3f6e7e6d41d..00000000000 --- a/scripts/qemu-version.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -set -eu - -dir="$1" -pkgversion="$2" -version="$3" - -if [ -z "$pkgversion" ]; then - cd "$dir" - if [ -e .git ]; then - pkgversion=$(git describe --match 'v*' --dirty) || : - fi -fi - -if [ -n "$pkgversion" ]; then - fullversion="$version ($pkgversion)" -else - fullversion="$version" -fi - -cat <<EOF -#define QEMU_PKGVERSION "$pkgversion" -#define QEMU_FULL_VERSION "$fullversion" -EOF -- 2.56.0
