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


Reply via email to