Makefile: Add an explicit version file to the repository.

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.
This commit is contained in:
Carl Worth 2010-04-16 10:37:32 -07:00
parent 4b52b918d3
commit b7dc24298d
2 changed files with 20 additions and 8 deletions

View 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.
PACKAGE=notmuch
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)
endif
endif
RELEASE_HOST=notmuchmail.org
RELEASE_DIR=/srv/notmuchmail.org/www/releases
@ -50,9 +56,9 @@ test: all
$(TAR_FILE):
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) $(GPG_FILE)
$(MAKE) VERSION=$(VERSION) verify-newer
scp $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) $(RELEASE_HOST):$(RELEASE_DIR)
ssh $(RELEASE_HOST) "rm -f $(RELEASE_DIR)/LATEST-$(PACKAGE)-[0-9]* && ln -s $(TAR_FILE) $(RELEASE_DIR)/LATEST-$(PACKAGE)-$(VERSION)"
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

1
version Normal file
View file

@ -0,0 +1 @@
0.1