packaging updates (wrongdoc!)
[zbatery.git] / GNUmakefile
blob2e396e3a5fbfd0cd9edf079d26bf75f19741990f
1 # use GNU Make to run tests in parallel, and without depending on RubyGems
2 all::
3 MRI = ruby
4 RUBY = ruby
5 RAKE = rake
6 RSYNC = rsync
8 GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
9 @./GIT-VERSION-GEN
10 -include GIT-VERSION-FILE
11 -include local.mk
12 ifeq ($(RUBY_VERSION),)
13 RUBY_VERSION := $(shell $(RUBY) -e 'puts RUBY_VERSION')
14 endif
15 RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
17 base_bins := zbatery
18 bins := $(addprefix bin/, $(base_bins))
19 man1_rdoc := $(addsuffix _1, $(base_bins))
20 man1_bins := $(addsuffix .1, $(base_bins))
21 man1_paths := $(addprefix man/man1/, $(man1_bins))
23 install: $(bins)
24 $(prep_setup_rb)
25 $(RM) -r .install-tmp
26 mkdir .install-tmp
27 cp -p bin/* .install-tmp
28 $(RUBY) setup.rb all
29 $(RM) $^
30 mv .install-tmp/* bin/
31 $(RM) -r .install-tmp
32 $(prep_setup_rb)
34 setup_rb_files := .config InstalledFiles
35 prep_setup_rb := @-$(RM) $(setup_rb_files);$(MAKE) -C $(ext) clean
37 clean:
38 -$(MAKE) -C $(ext) clean
39 -$(MAKE) -C Documentation clean
40 $(RM) $(setup_rb_files) $(t_log)
42 man html:
43 $(MAKE) -C Documentation install-$@
45 pkg_extra := GIT-VERSION-FILE ChangeLog LATEST NEWS $(man1_paths)
46 manifest: $(pkg_extra) man
47 $(RM) .manifest
48 $(MAKE) .manifest
50 .manifest:
51 (git ls-files && for i in $@ $(pkg_extra) $(man1_paths); \
52 do echo $$i; done) | LC_ALL=C sort > $@+
53 cmp $@+ $@ || mv $@+ $@
54 $(RM) $@+
56 ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
57 wrongdoc prepare
59 doc: .document ChangeLog GIT-VERSION-FILE
60 for i in $(man1_rdoc); do echo > $$i; done
61 find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
62 $(RM) -r doc
63 wrongdoc all
64 install -m644 COPYING doc/COPYING
65 install -m644 $(shell grep '^[A-Z]' .document) doc/
66 install -m644 $(man1_paths) doc/
67 $(RM) $(man1_rdoc)
69 # publishes docs to http://zbatery.bogomip.org/
70 publish_doc:
71 -git set-file-times
72 $(RM) -r doc
73 $(MAKE) doc
74 find doc/images -type f | \
75 TZ=UTC xargs touch -d '1970-01-01 00:00:03' doc/rdoc.css
76 $(MAKE) doc_gz
77 chmod 644 $$(find doc -type f)
78 $(RSYNC) -av doc/ zbatery.bogomip.org:/srv/zbatery/
79 git ls-files | xargs touch
81 # Create gzip variants of the same timestamp as the original so nginx
82 # "gzip_static on" can serve the gzipped versions directly.
83 doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
84 doc_gz:
85 for i in $(docs); do \
86 gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
88 ifneq ($(VERSION),)
89 rfproject := rainbows
90 rfpackage := zbatery
91 pkggem := pkg/$(rfpackage)-$(VERSION).gem
92 pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
93 release_notes := release_notes-$(VERSION)
94 release_changes := release_changes-$(VERSION)
96 release-notes: $(release_notes)
97 release-changes: $(release_changes)
98 $(release_changes):
99 wrongdoc release_changes > $@+
100 $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
101 $(release_notes):
102 wrongdoc release_notes > $@+
103 $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
105 # ensures we're actually on the tagged $(VERSION), only used for release
106 verify:
107 test x"$(shell umask)" = x0022
108 git rev-parse --verify refs/tags/v$(VERSION)^{}
109 git diff-index --quiet HEAD^0
110 test `git rev-parse --verify HEAD^0` = \
111 `git rev-parse --verify refs/tags/v$(VERSION)^{}`
113 fix-perms:
114 -git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
115 -git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
117 gem: $(pkggem)
119 install-gem: $(pkggem)
120 gem install $(CURDIR)/$<
122 $(pkggem): manifest fix-perms
123 gem build $(rfpackage).gemspec
124 mkdir -p pkg
125 mv $(@F) $@
127 $(pkgtgz): distdir = $(basename $@)
128 $(pkgtgz): HEAD = v$(VERSION)
129 $(pkgtgz): manifest fix-perms
130 @test -n "$(distdir)"
131 $(RM) -r $(distdir)
132 mkdir -p $(distdir)
133 tar cf - $$(cat .manifest) | (cd $(distdir) && tar xf -)
134 cd pkg && tar cf - $(basename $(@F)) | gzip -9 > $(@F)+
135 mv $@+ $@
137 package: $(pkgtgz) $(pkggem)
139 release: verify package $(release_notes) $(release_changes)
140 # make tgz release on RubyForge
141 rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
142 $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
143 # push gem to RubyGems.org
144 gem push $(pkggem)
145 # in case of gem downloads from RubyForge releases page
146 -rubyforge add_file \
147 $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
148 $(RAKE) raa_update VERSION=$(VERSION)
149 $(RAKE) fm_update VERSION=$(VERSION)
150 else
151 gem install-gem: GIT-VERSION-FILE
152 $(MAKE) $@ VERSION=$(GIT_VERSION)
153 endif
155 all:: test
156 test:
157 $(MAKE) -C t
159 .PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test