about summary refs log tree commit homepage
path: root/GNUmakefile
diff options
context:
space:
mode:
Diffstat (limited to 'GNUmakefile')
-rw-r--r--GNUmakefile143
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