qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output
@ 2016-06-01  4:41 Fam Zheng
  2016-06-01  4:41 ` [Qemu-devel] [PATCH v2 1/2] Makefile: Add a "FORCE" target Fam Zheng
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Fam Zheng @ 2016-06-01  4:41 UTC (permalink / raw)
  To: qemu-devel
  Cc: Paolo Bonzini, qemu-block, peter.maydell, eblake, berrange,
	lersek

v2: Address Eric's comments:
    "echo -n" -> "printf".
    "-unclean" -> "-dirty".

Makefile happened to be in my working set because of the docker test work, so I
went ahead to try this nice feature last evening before going to bed. My
apologies if we have duplicated work.

Please review, especially please comment on the redundant version string:

$ qemu-img --version
qemu-img version 2.6.50-v2.6.0-603-g684a494, Copyright (c) 2004-2008 Fabrice Bellard


Fam Zheng (2):
  Makefile: Add a "FORCE" target
  Makefile: Derive "PKGVERSION" from "git describe" by default

 Makefile              | 24 ++++++++++++++++++++++--
 linux-user/main.c     |  1 +
 qemu-img.c            |  1 +
 qmp.c                 |  1 +
 scripts/create_config |  4 ----
 vl.c                  |  1 +
 6 files changed, 26 insertions(+), 6 deletions(-)

-- 
2.8.2

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH v2 1/2] Makefile: Add a "FORCE" target
  2016-06-01  4:41 [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Fam Zheng
@ 2016-06-01  4:41 ` Fam Zheng
  2016-06-01  4:41 ` [Qemu-devel] [PATCH v2 2/2] Makefile: Derive "PKGVERSION" from "git describe" by default Fam Zheng
  2016-06-01  8:49 ` [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Laszlo Ersek
  2 siblings, 0 replies; 5+ messages in thread
From: Fam Zheng @ 2016-06-01  4:41 UTC (permalink / raw)
  To: qemu-devel
  Cc: Paolo Bonzini, qemu-block, peter.maydell, eblake, berrange,
	lersek

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 3a3c5dc..1e2d6f9 100644
--- a/Makefile
+++ b/Makefile
@@ -81,7 +81,7 @@ Makefile: ;
 configure: ;
 
 .PHONY: all clean cscope distclean dvi html info install install-doc \
-	pdf recurse-all speed test dist msi
+	pdf recurse-all speed test dist msi FORCE
 
 $(call set-vpath, $(SRC_PATH))
 
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH v2 2/2] Makefile: Derive "PKGVERSION" from "git describe" by default
  2016-06-01  4:41 [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Fam Zheng
  2016-06-01  4:41 ` [Qemu-devel] [PATCH v2 1/2] Makefile: Add a "FORCE" target Fam Zheng
@ 2016-06-01  4:41 ` Fam Zheng
  2016-06-01  8:49 ` [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Laszlo Ersek
  2 siblings, 0 replies; 5+ messages in thread
From: Fam Zheng @ 2016-06-01  4:41 UTC (permalink / raw)
  To: qemu-devel
  Cc: Paolo Bonzini, qemu-block, peter.maydell, eblake, berrange,
	lersek

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.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 Makefile              | 22 +++++++++++++++++++++-
 linux-user/main.c     |  1 +
 qemu-img.c            |  1 +
 qmp.c                 |  1 +
 scripts/create_config |  4 ----
 vl.c                  |  1 +
 6 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/Makefile b/Makefile
index 1e2d6f9..6abb0cd 100644
--- a/Makefile
+++ b/Makefile
@@ -49,7 +49,7 @@ ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fa
 endif
 endif
 
-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
@@ -166,6 +166,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 \
+			printf '"-'; \
+			if ! git status &>/dev/null; then \
+				printf "no-git"; \
+			else \
+				git describe 2>/dev/null | tr -d '\n'; \
+				if ! git diff-index --quiet HEAD &>/dev/null; then \
+					printf '-dirty'; \
+				fi \
+			fi; \
+			printf '"\n'; \
+		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 18d1423..97cad71 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"
 
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output
  2016-06-01  4:41 [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Fam Zheng
  2016-06-01  4:41 ` [Qemu-devel] [PATCH v2 1/2] Makefile: Add a "FORCE" target Fam Zheng
  2016-06-01  4:41 ` [Qemu-devel] [PATCH v2 2/2] Makefile: Derive "PKGVERSION" from "git describe" by default Fam Zheng
@ 2016-06-01  8:49 ` Laszlo Ersek
  2016-06-01  9:12   ` Fam Zheng
  2 siblings, 1 reply; 5+ messages in thread
From: Laszlo Ersek @ 2016-06-01  8:49 UTC (permalink / raw)
  To: Fam Zheng, qemu-devel
  Cc: Paolo Bonzini, qemu-block, peter.maydell, eblake, berrange

On 06/01/16 06:41, Fam Zheng wrote:
> v2: Address Eric's comments:
>     "echo -n" -> "printf".
>     "-unclean" -> "-dirty".
> 
> Makefile happened to be in my working set because of the docker test work, so I
> went ahead to try this nice feature last evening before going to bed. My
> apologies if we have duplicated work.
> 
> Please review, especially please comment on the redundant version string:
> 
> $ qemu-img --version
> qemu-img version 2.6.50-v2.6.0-603-g684a494, Copyright (c) 2004-2008 Fabrice Bellard
> 
> 
> Fam Zheng (2):
>   Makefile: Add a "FORCE" target
>   Makefile: Derive "PKGVERSION" from "git describe" by default
> 
>  Makefile              | 24 ++++++++++++++++++++++--
>  linux-user/main.c     |  1 +
>  qemu-img.c            |  1 +
>  qmp.c                 |  1 +
>  scripts/create_config |  4 ----
>  vl.c                  |  1 +
>  6 files changed, 26 insertions(+), 6 deletions(-)
> 

I only skimmed the git commands in patch #2:

git status --> this verifies if we have git at all, and refreshes the
               index if we do, in the same step, so that's good
git describe --> okay
git diff-index --quiet HEAD --> okay

Another advantage of this approach seems to be that it sets the version
at "make", not at "configure", time.

Some comments / questions on the version string:
- What happens if "--with-pkgversion=blah" was passed to ./configure?
  Do I see it right that in that case there's no change in behavior?

- I think the following format would look better (stolen from
  --with-pkgversion):

  2.6.50 (v2.6.0-603-g684a494)

Thanks
Laszlo

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output
  2016-06-01  8:49 ` [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Laszlo Ersek
@ 2016-06-01  9:12   ` Fam Zheng
  0 siblings, 0 replies; 5+ messages in thread
From: Fam Zheng @ 2016-06-01  9:12 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: qemu-devel, Paolo Bonzini, qemu-block, peter.maydell, eblake,
	berrange

On Wed, 06/01 10:49, Laszlo Ersek wrote:
> Some comments / questions on the version string:
> - What happens if "--with-pkgversion=blah" was passed to ./configure?
>   Do I see it right that in that case there's no change in behavior?

Yes, Makefile only generates it when ./configure says it's empty.

> 
> - I think the following format would look better (stolen from
>   --with-pkgversion):
> 
>   2.6.50 (v2.6.0-603-g684a494)

Great idea!

Fam

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-06-01  9:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-01  4:41 [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Fam Zheng
2016-06-01  4:41 ` [Qemu-devel] [PATCH v2 1/2] Makefile: Add a "FORCE" target Fam Zheng
2016-06-01  4:41 ` [Qemu-devel] [PATCH v2 2/2] Makefile: Derive "PKGVERSION" from "git describe" by default Fam Zheng
2016-06-01  8:49 ` [Qemu-devel] [PATCH v2 0/2] Let PKGVERSION include the "git describe" output Laszlo Ersek
2016-06-01  9:12   ` Fam Zheng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).