event_machine: factor out async.callback handling
[rainbows.git] / GNUmakefile
blob6b392e22d4e7ad9ec3785617da74dd96b60d5f8d
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 := rainbows
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)
47 ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
48 wrongdoc prepare
50 manifest: ChangeLog GIT-VERSION-FILE
51 $(RM) -f .manifest
52 $(MAKE) .manifest
54 .manifest:
55 (git ls-files && for i in $@ $(pkg_extra) ; do echo $$i; done) | \
56 LC_ALL=C sort > $@+
57 cmp $@+ $@ || mv $@+ $@
58 $(RM) $@+
60 doc: .document man html .wrongdoc.yml
61 $(MAKE) -C Documentation comparison.html
62 for i in $(man1_rdoc); do echo > $$i; done
63 find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
64 $(RM) -r doc
65 wrongdoc all
66 install -m644 COPYING doc/COPYING
67 install -m644 $(shell grep '^[A-Z]' .document) doc/
68 install -m644 $(man1_paths) doc/
69 cat Documentation/comparison.css >> doc/rdoc.css
70 $(RM) $(man1_rdoc)
72 publish_doc:
73 -git set-file-times
74 $(MAKE) doc
75 -find doc/images -type f | \
76 TZ=UTC xargs touch -d '1970-01-01 00:00:02' doc/rdoc.css
77 chmod 644 $$(find doc -type f)
78 $(RSYNC) -av doc/ rubyforge.org:/var/www/gforge-projects/rainbows/
79 git ls-files | xargs touch
81 ifneq ($(VERSION),)
82 rfproject := rainbows
83 rfpackage := rainbows
84 pkggem := pkg/$(rfpackage)-$(VERSION).gem
85 pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
86 release_notes := release_notes-$(VERSION)
87 release_changes := release_changes-$(VERSION)
89 release-notes: $(release_notes)
90 release-changes: $(release_changes)
91 $(release_changes):
92 wrongdoc release_changes > $@+
93 $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
94 $(release_notes):
95 wrongdoc release_notes > $@+
96 $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
98 # ensures we're actually on the tagged $(VERSION), only used for release
99 verify:
100 test x"$(shell umask)" = x0022
101 git rev-parse --verify refs/tags/v$(VERSION)^{}
102 git diff-index --quiet HEAD^0
103 test `git rev-parse --verify HEAD^0` = \
104 `git rev-parse --verify refs/tags/v$(VERSION)^{}`
106 fix-perms:
107 -git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
108 -git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
110 gem: $(pkggem)
112 install-gem: $(pkggem)
113 gem install $(CURDIR)/$<
115 $(pkggem): manifest fix-perms
116 gem build $(rfpackage).gemspec
117 mkdir -p pkg
118 mv $(@F) $@
120 $(pkgtgz): distdir = $(basename $@)
121 $(pkgtgz): HEAD = v$(VERSION)
122 $(pkgtgz): manifest fix-perms
123 @test -n "$(distdir)"
124 $(RM) -r $(distdir)
125 mkdir -p $(distdir)
126 tar cf - $$(cat .manifest) | (cd $(distdir) && tar xf -)
127 cd pkg && tar cf - $(basename $(@F)) | gzip -9 > $(@F)+
128 mv $@+ $@
130 package: $(pkgtgz) $(pkggem)
132 release: verify package $(release_notes) $(release_changes)
133 # make tgz release on RubyForge
134 rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
135 $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
136 # push gem to RubyGems.org
137 gem push $(pkggem)
138 # in case of gem downloads from RubyForge releases page
139 -rubyforge add_file \
140 $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
141 $(RAKE) raa_update VERSION=$(VERSION)
142 $(RAKE) fm_update VERSION=$(VERSION)
143 $(RAKE) publish_news VERSION=$(VERSION)
144 else
145 gem install-gem: GIT-VERSION-FILE
146 $(MAKE) $@ VERSION=$(GIT_VERSION)
147 endif
149 all:: test
150 test:
151 $(MAKE) -C t
153 .PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test html