Message ID | 1465234520-11160-8-git-send-email-pbonzini@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 6 June 2016 at 18:35, Paolo Bonzini <pbonzini@redhat.com> wrote: > From: Fam Zheng <famz@redhat.com> > > Currently, if not specified in "./configure", QEMU_PKGVERSION will be > empty. Write a rule in Makefile to generate a value from "git describe" > combined with a possible git tree cleanness suffix, and write into a new > header. > > $ cat qemu-version.h > #define QEMU_PKGVERSION "-v2.6.0-557-gd6550e9-dirty" > > Include the header in .c files where the macro is referenced. It's not > necessary to include it in all files, otherwise each time the content of > the file changes, all sources have to be recompiled. > > +qemu-version.h: FORCE > + $(call quiet-command, \ > + (cd $(SRC_PATH); \ > + printf '#define QEMU_PKGVERSION '; \ > + if test -n "$(PKGVERSION)"; then \ > + printf '"$(PKGVERSION)"\n'; \ > + else \ > + if test -d .git; then \ > + printf '" ('; \ > + git describe --match 'v*' 2>/dev/null | tr -d '\n'; \ > + if ! git diff-index --quiet HEAD &>/dev/null; then \ > + printf -- '-dirty'; \ > + fi; \ > + printf ')"\n'; \ > + else \ > + printf '""\n'; \ > + fi; \ > + fi) > $@.tmp) > + $(call quiet-command, cmp --quiet $@ $@.tmp || mv $@.tmp $@) I've just discovered that this rune incorrectly always adds "-dirty" to the version string if /bin/sh is dash. This is because "&>/dev/null" is not POSIX shell syntax, it is a bash extension, and if you run this with dash then the command always fails. I'm not sure why we are redirecting anything here, since we are using git diff-index's --quiet option which suppresses all output. The simplest fix would seem to be to just delete the redirect option entirely. The fix for this should probably be cc:stable since it's annoying that you can't out of the box build QEMU and have the version number say '2.7.0' rather than '2.7.0-dirty'... thanks -- PMM
diff --git a/Makefile b/Makefile index 59af636..fa85628 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ endif include $(SRC_PATH)/rules.mak -GENERATED_HEADERS = config-host.h qemu-options.def +GENERATED_HEADERS = qemu-version.h config-host.h qemu-options.def GENERATED_HEADERS += qmp-commands.h qapi-types.h qapi-visit.h qapi-event.h GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c qapi-event.c GENERATED_HEADERS += qmp-introspect.h @@ -167,6 +167,26 @@ endif all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all modules +qemu-version.h: FORCE + $(call quiet-command, \ + (cd $(SRC_PATH); \ + printf '#define QEMU_PKGVERSION '; \ + if test -n "$(PKGVERSION)"; then \ + printf '"$(PKGVERSION)"\n'; \ + else \ + if test -d .git; then \ + printf '" ('; \ + git describe --match 'v*' 2>/dev/null | tr -d '\n'; \ + if ! git diff-index --quiet HEAD &>/dev/null; then \ + printf -- '-dirty'; \ + fi; \ + printf ')"\n'; \ + else \ + printf '""\n'; \ + fi; \ + fi) > $@.tmp) + $(call quiet-command, cmp --quiet $@ $@.tmp || mv $@.tmp $@) + config-host.h: config-host.h-timestamp config-host.h-timestamp: config-host.mak qemu-options.def: $(SRC_PATH)/qemu-options.hx diff --git a/linux-user/main.c b/linux-user/main.c index b2bc6ab..8a11d02 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -17,6 +17,7 @@ * along with this program; if not, see <http://www.gnu.org/licenses/>. */ #include "qemu/osdep.h" +#include "qemu-version.h" #include <sys/mman.h> #include <sys/syscall.h> #include <sys/resource.h> diff --git a/qemu-img.c b/qemu-img.c index 4b56ad3..32e307c 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu-version.h" #include "qapi/error.h" #include "qapi-visit.h" #include "qapi/qmp-output-visitor.h" diff --git a/qmp.c b/qmp.c index 3165f87..7df6543 100644 --- a/qmp.c +++ b/qmp.c @@ -14,6 +14,7 @@ */ #include "qemu/osdep.h" +#include "qemu-version.h" #include "qemu/cutils.h" #include "monitor/monitor.h" #include "sysemu/sysemu.h" diff --git a/scripts/create_config b/scripts/create_config index b2d2ebb..d47057b 100755 --- a/scripts/create_config +++ b/scripts/create_config @@ -9,10 +9,6 @@ case $line in version=${line#*=} echo "#define QEMU_VERSION \"$version\"" ;; - PKGVERSION=*) # configuration - pkgversion=${line#*=} - echo "#define QEMU_PKGVERSION \"$pkgversion\"" - ;; qemu_*dir=*) # qemu-specific directory configuration name=${line%=*} value=${line#*=} diff --git a/vl.c b/vl.c index 2f74fe8..9539f92 100644 --- a/vl.c +++ b/vl.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu-version.h" #include "qemu/cutils.h" #include "qemu/help_option.h"