diff options
Diffstat (limited to 'GNUmakefile')
-rw-r--r-- | GNUmakefile | 143 |
1 files changed, 90 insertions, 53 deletions
diff --git a/GNUmakefile b/GNUmakefile index 17b8b2e..51f1c8f 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,7 +1,11 @@ all:: test ruby = ruby rake = rake +GIT_URL = git://git.bogomips.org/clogger.git +GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE + @./GIT-VERSION-GEN +-include GIT-VERSION-FILE -include local.mk ifeq ($(DLEXT),) # "so" for Linux @@ -26,84 +30,117 @@ test-pure: test: test-ext test-pure -History: - $(rake) -s history > $@+ +pkg_extra := GIT-VERSION-FILE NEWS ChangeLog +manifest: $(pkg_extra) + $(RM) .manifest + $(MAKE) .manifest + +.manifest: + (git ls-files && \ + for i in $@ $(pkg_extra); \ + do echo $$i; done) | LC_ALL=C sort > $@+ + cmp $@+ $@ || mv $@+ $@ + $(RM) $@+ + +NEWS: GIT-VERSION-FILE + $(rake) -s news_rdoc > $@+ mv $@+ $@ -.manifest: History - (git ls-files; for i in $^ $@; do echo $$i; done) | LC_ALL=C sort > $@+ +SINCE = 0.0.7 +ChangeLog: log_range = $(shell test -n "$(SINCE)" && echo v$(SINCE)..) +ChangeLog: GIT-VERSION-FILE + @echo "ChangeLog from $(GIT_URL) ($(SINCE)..$(GIT_VERSION))" > $@+ + @echo >> $@+ + git log $(log_range) | sed -e 's/^/ /' >> $@+ mv $@+ $@ -VERSION := $(shell git describe 2>/dev/null | sed 's/^v//') +news_atom := http://clogger.rubyforge.org/NEWS.atom.xml +cgit_atom := http://git.bogomips.org/cgit/clogger.git/atom/?h=master +atom = <link rel="alternate" title="Atom feed" href="$(1)" \ + type="application/atom+xml"/> + +doc: .document NEWS ChangeLog + rdoc -Na -t "$(shell sed -ne '1s/^= //p' README)" + install -m644 COPYING doc/COPYING + install -m644 $(shell grep '^[A-Z]' .document) doc/ + $(ruby) -i -p -e \ + '$$_.gsub!("</title>",%q{\&$(call atom,$(cgit_atom))})' \ + doc/ChangeLog.html + $(ruby) -i -p -e \ + '$$_.gsub!("</title>",%q{\&$(call atom,$(news_atom))})' \ + doc/NEWS.html doc/README.html + $(rake) -s news_atom > doc/NEWS.atom.xml + cd doc && ln README.html tmp && mv tmp index.html + +# publishes docs to http://clogger.rubyforge.org/ +# this preserves timestamps as best as possible to help HTTP caches out +# git set-file-times is here: http://git-scm.org/gitwiki/ExampleScripts +publish_doc: + git set-file-times + $(RM) -r doc + $(MAKE) doc + rsync -av --delete doc/ rubyforge.org:/var/www/gforge-projects/clogger/ + git ls-files | xargs touch ifneq ($(VERSION),) -v := /^v$(VERSION)$$/ -vPREV := $(shell git tag -l 2>/dev/null | sed -n -e '$(v)!h' -e '$(v){x;p;q}') +rfproject := clogger +rfpackage := clogger +pkggem := pkg/$(rfpackage)-$(VERSION).gem +pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz release_notes := release_notes-$(VERSION) release_changes := release_changes-$(VERSION) + release-notes: $(release_notes) release-changes: $(release_changes) -$(release_changes): verify - git diff --stat $(vPREV) v$(VERSION) > $@+ - echo >> $@+ - git log $(vPREV)..v$(VERSION) >> $@+ +$(release_changes): + $(rake) -s release_changes > $@+ $(VISUAL) $@+ && test -s $@+ && mv $@+ $@ -$(release_notes): pkggem = pkg/clogger-$(VERSION).gem -$(release_notes): verify package - gem spec $(pkggem) description | sed -ne '/\w/p' > $@+ - echo >> $@+ - gem spec $(pkggem) homepage | sed -ne 's/^--- /* /p' >> $@+ - gem spec $(pkggem) email | sed -ne 's/^--- /* /p' >> $@+ - echo '* git://git.bogomips.org/clogger.git' >> $@+ - echo >> $@+ - echo Changes: >> $@+ - echo >> $@+ - git cat-file tag v$(VERSION) | awk 'p>1{print $$0}/^$$/{++p}' >> $@+ +$(release_notes): + GIT_URL=$(GIT_URL) $(rake) -s release_notes > $@+ $(VISUAL) $@+ && test -s $@+ && mv $@+ $@ + +# ensures we're actually on the tagged $(VERSION), only used for release verify: - @test -n "$(VERSION)" || { echo >&2 VERSION= not defined; exit 1; } + test x"$(shell umask)" = x0022 git rev-parse --verify refs/tags/v$(VERSION)^{} - @test -n "$(VISUAL)" || { echo >&2 VISUAL= not defined; exit 1; } git diff-index --quiet HEAD^0 test `git rev-parse --verify HEAD^0` = \ `git rev-parse --verify refs/tags/v$(VERSION)^{}` -pkg/clogger-$(VERSION).gem: .manifest History clogger.gemspec - gem build clogger.gemspec +fix-perms: + -git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644 + -git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755 + +gem: $(pkggem) + +install-gem: $(pkggem) + gem install $(CURDIR)/$< + +$(pkggem): manifest fix-perms + gem build $(rfpackage).gemspec mkdir -p pkg mv $(@F) $@ -pkg/clogger-$(VERSION).tgz: HEAD = v$(VERSION) -pkg/clogger-$(VERSION).tgz: .manifest History - $(RM) -r $(basename $@) - git archive --format=tar --prefix=$(basename $@)/ $(HEAD) | tar xv - install -m644 $^ $(basename $@) - cd pkg && tar cv $(basename $(@F)) | gzip -9 > $(@F)+ +$(pkgtgz): distdir = $(basename $@) +$(pkgtgz): HEAD = v$(VERSION) +$(pkgtgz): manifest fix-perms + @test -n "$(distdir)" + $(RM) -r $(distdir) + mkdir -p $(distdir) + tar c `cat .manifest` | (cd $(distdir) && tar x) + cd pkg && tar c $(basename $(@F)) | gzip -9 > $(@F)+ mv $@+ $@ -package: pkg/clogger-$(VERSION).gem pkg/clogger-$(VERSION).tgz +package: $(pkgtgz) $(pkggem) -# not using Hoe's release system since we release 2 gems but only one tgz -release: package $(release_notes) $(release_changes) +release: verify package $(release_notes) $(release_changes) rubyforge add_release -f -n $(release_notes) -a $(release_changes) \ - clogger clogger $(VERSION) pkg/clogger-$(VERSION).gem + $(rfproject) $(rfpackage) $(VERSION) $(pkggem) rubyforge add_file \ - clogger clogger $(VERSION) pkg/clogger-$(VERSION).tgz + $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz) +else +gem install-gem: GIT-VERSION-FILE + $(MAKE) $@ VERSION=$(GIT_VERSION) endif -doc: .document History - rdoc -Na -t "$(shell sed -ne '1s/^= //p' README)" - install -m644 COPYING doc/COPYING - cd doc && ln README.html tmp.html && mv tmp.html index.html - -# publishes docs to http://clogger.rubyforge.org/ -# this preserves timestamps as best as possible to help HTTP caches out -# git set-file-times is here: http://git-scm.org/gitwiki/ExampleScripts -publish_doc: - git set-file-times - $(RM) -r doc - $(MAKE) doc - rsync -av --delete doc/ rubyforge.org:/var/www/gforge-projects/clogger/ - git ls-files | xargs touch - -.PHONY: test doc .manifest release History +.PHONY: .FORCE-GIT-VERSION-FILE test doc manifest |