]> xenbits.xensource.com Git - xen.git/commitdiff
make: Make "src-tarball" target actually make a source tarball
authorGeorge Dunlap <george.dunlap@eu.citrix.com>
Mon, 15 Sep 2014 16:25:04 +0000 (17:25 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Tue, 23 Sep 2014 17:41:27 +0000 (18:41 +0100)
At the moment, making a release tarball is an annoyingly manual
process that involves running "git archive" into a temporary directory.

Script this process up and make a target, so that the release manager
can simply type "make src-tarball-release" and have everything show up
nice and neat in dist/xen-$version.tar.gz.  "make src-tarball" will
make a version number based on git describe, which will typically have
the most recent tag, number of commits since that tag, and the git
commit id of the current HEAD.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Makefile
tools/misc/mktarball [new file with mode: 0755]

index 23890574d4ac0a5c59949408c3a74f1b0d28ac4a..3b9bf7ac40f287cbe7139015df1f1c4141962221 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -143,6 +143,23 @@ subtree-force-update:
 subtree-force-update-all:
        $(MAKE) -C tools subtree-force-update-all
 
+# Make a source tarball, including qemu sub-trees.
+#
+# src-tarball will use "git describe" for the version number.  This
+# will have the most recent tag, number of commits since that tag, and
+# git commit id of the head.  This is suitable for a "snapshot"
+# tarball of an unreleased tree.
+#
+# src-tarball-release will use "make xenversion" as the version
+# number.  This is suitable for release tarballs.
+.PHONY: src-tarball-release
+src-tarball-release: subtree-force-update-all
+       bash ./tools/misc/mktarball $(XEN_ROOT) $$($(MAKE) -C xen xenversion --no-print-directory)
+
+.PHONY: src-tarball
+src-tarball: subtree-force-update-all
+       bash ./tools/misc/mktarball $(XEN_ROOT) $$(git describe)
+
 .PHONY: clean
 clean::
        $(MAKE) -C xen clean
@@ -171,13 +188,6 @@ endif
 .PHONY: mrproper
 mrproper: distclean
 
-# Prepare for source tarball
-.PHONY: src-tarball
-src-tarball: distclean
-       $(MAKE) -C xen .banner
-       rm -rf xen/tools/figlet .[a-z]*
-       $(MAKE) -C xen distclean
-
 .PHONY: help
 help:
        @echo 'Installation targets:'
@@ -211,6 +221,10 @@ help:
        @echo '  install-tboot         - download, build, and install the tboot module'
        @echo '  clean-tboot           - clean the tboot module if it exists'
        @echo
+       @echo 'Package targets:'
+       @echo '  src-tarball-release   - make a source tarball with xen and qemu tagged with a release'
+       @echo '  src-tarball           - make a source tarball with xen and qemu tagged with git describe'
+       @echo
        @echo 'Environment:'
        @echo '  [ this documentation is sadly not complete ]'
 
diff --git a/tools/misc/mktarball b/tools/misc/mktarball
new file mode 100755 (executable)
index 0000000..aad1096
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# mktarball: Make a release tarball (including xen, qemu, and qemu-traditional)
+#
+# Takes 2 arguments, the path to the dist directory and the version
+set -ex
+
+function git_archive_into {
+    mkdir "$2"
+
+    git --git-dir="$1"/.git \
+       archive --format=tar HEAD | \
+       tar Cxf "$2" -
+}
+
+if [[ -z "$1" || -z "$2" ]] ; then
+  echo "usage: $0 path-to-XEN_ROOT xen-version"
+  exit 1
+fi
+
+xen_root="$1"
+desc="$2"
+
+tdir="$xen_root/dist/tmp.src-tarball"
+
+rm -rf $tdir
+
+mkdir -p $tdir
+
+git_archive_into $xen_root $tdir/xen-$desc
+
+git_archive_into $xen_root/tools/qemu-xen-dir-remote $tdir/xen-$desc/tools/qemu-xen
+
+git_archive_into $xen_root/tools/qemu-xen-traditional-dir-remote $tdir/xen-$desc/tools/qemu-xen-traditional
+
+GZIP=-9v tar cz -f $xen_root/dist/xen-$desc.tar.gz -C $tdir xen-$desc
+
+echo "Source tarball in $xen_root/dist/xen-$desc.tar.gz"