Makefile: Add an explicit version file to the repository.
authorCarl Worth <>
Fri, 16 Apr 2010 17:37:32 +0000 (10:37 -0700)
committerCarl Worth <>
Fri, 16 Apr 2010 18:34:48 +0000 (11:34 -0700)
We do this so that "git archive" produces a usable tar file without us
having to post-modify it, (since tools like git-buildpackage might not
give us an easy way to hook into the tar-file-creation step).

To support this we also have to change our preference to prefer the
git-described-based version (if available) and only if not available
do we fallback to using what's in the "version" file. Finally, we also
ovverride this preference when releasing, (where what's in the
"version" file wins).

Note that using our Makefile's rule to create a tar file still will
insert the git-based version into the tar file. This is useful for
creating snapshots which will correctly report the git version from
which they were created.

version [new file with mode: 0644]

index 53a4a94bd9e8b83ddc1f54f919012dee051e5bb8..24612c1d09681c0cbf606244112b0f8df86c1a5b 100644 (file)
@@ -9,7 +9,13 @@
 # Between releases, (such as when compiling notmuch from the git
 # repository), we let git append identification of the actual commit.
-VERSION:=$(shell if [ -f version ]; then cat version; else git describe --match '[0-9.]*'; fi)
+VERSION:=$(shell cat version)
+ifneq ($(MAKECMDGOALS),release)
+ifneq ($(MAKECMDGOALS),release-message)
+VERSION:=$(shell if git describe > /dev/null 2>&1; then git describe --match '[0-9.]*'; else cat version; fi)
@@ -50,9 +56,9 @@ test: all
        git archive --format=tar --prefix=$(PACKAGE)-$(VERSION)/ HEAD > $(TAR_FILE).tmp
-       echo $(VERSION) > version
-       tar --append -f $(TAR_FILE).tmp --transform s_^_$(PACKAGE)-$(VERSION)/_ version
-       rm version
+       echo $(VERSION) > version.tmp
+       tar --append -f $(TAR_FILE).tmp --transform s_^_$(PACKAGE)-$(VERSION)/_  --transform 's_.tmp$$__' version.tmp
+       rm version.tmp
        gzip < $(TAR_FILE).tmp > $(TAR_FILE)
        @echo "Source is ready for release in $(TAR_FILE)"
@@ -68,18 +74,23 @@ dist: $(TAR_FILE)
 # We invoke make recursively only to force ordering of our phony
 # targets in the case of parallel invocation of make (-j).
+# We carefully ensure that our VERSION variable is passed down to any
+# sub-ordinate make invocations (which won't otherwhise know that they
+# are part of the release and need to take the version from the
+# version file).
 .PHONY: release
 release: verify-no-dirty-code
-       $(MAKE) test
-       $(MAKE) $(GPG_FILE)
-       $(MAKE) verify-newer
+       $(MAKE) VERSION=$(VERSION) test
+       $(MAKE) VERSION=$(VERSION) verify-newer
        mkdir -p releases
        mv $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) releases
        git tag -s -m "$(PACKAGE) $(VERSION) release" $(VERSION)
        git push origin $(VERSION)
-       $(MAKE) release-message > $(PACKAGE)-$(VERSION).announce
+       $(MAKE) VERSION=$(VERSION) release-message > $(PACKAGE)-$(VERSION).announce
        @echo "Please send a release announcement using $(PACKAGE)-$(VERSION).announce as a template."
 .PHONY: release-message
diff --git a/version b/version
new file mode 100644 (file)
index 0000000..49d5957
--- /dev/null
+++ b/version
@@ -0,0 +1 @@