rev: split out Rainbows::Rev::Server
[rainbows.git] / GNUmakefile
blob01c5906e708700bd4a7b6cec56da5f04d2848edc
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 ($(DLEXT),) # "so" for Linux
13 DLEXT := $(shell $(RUBY) -rrbconfig -e 'puts Config::CONFIG["DLEXT"]')
14 endif
15 ifeq ($(RUBY_VERSION),)
16 RUBY_VERSION := $(shell $(RUBY) -e 'puts RUBY_VERSION')
17 endif
18 RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
20 base_bins := rainbows
21 bins := $(addprefix bin/, $(base_bins))
22 man1_rdoc := $(addsuffix _1, $(base_bins))
23 man1_bins := $(addsuffix .1, $(base_bins))
24 man1_paths := $(addprefix man/man1/, $(man1_bins))
26 install: $(bins)
27 $(prep_setup_rb)
28 $(RM) -r .install-tmp
29 mkdir .install-tmp
30 cp -p bin/* .install-tmp
31 $(RUBY) setup.rb all
32 $(RM) $^
33 mv .install-tmp/* bin/
34 $(RM) -r .install-tmp
35 $(prep_setup_rb)
37 setup_rb_files := .config InstalledFiles
38 prep_setup_rb := @-$(RM) $(setup_rb_files);$(MAKE) -C $(ext) clean
40 clean:
41 -$(MAKE) -C $(ext) clean
42 -$(MAKE) -C Documentation clean
43 $(RM) $(setup_rb_files) $(t_log)
45 man html:
46 $(MAKE) -C Documentation install-$@
48 ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
49 wrongdoc prepare
51 .manifest:
52 (git ls-files && for i in $@ $(pkg_extra) ; do echo $$i; done) | \
53 LC_ALL=C sort > $@+
54 cmp $@+ $@ || mv $@+ $@
55 $(RM) $@+
58 doc: .document man html .wrongdoc.yml
59 $(MAKE) -C Documentation comparison.html
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 cat Documentation/comparison.css >> doc/rdoc.css
68 $(RM) $(man1_rdoc)
70 publish_doc:
71 -git set-file-times
72 $(MAKE) doc
73 -find doc/images -type f | \
74 TZ=UTC xargs touch -d '1970-01-01 00:00:02' doc/rdoc.css
75 chmod 644 $$(find doc -type f)
76 $(RSYNC) -av doc/ rubyforge.org:/var/www/gforge-projects/rainbows/
77 git ls-files | xargs touch
79 ifneq ($(VERSION),)
80 rfproject := rainbows
81 rfpackage := rainbows
82 pkggem := pkg/$(rfpackage)-$(VERSION).gem
83 pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
84 release_notes := release_notes-$(VERSION)
85 release_changes := release_changes-$(VERSION)
87 release-notes: $(release_notes)
88 release-changes: $(release_changes)
89 $(release_changes):
90 wrongdoc release_changes > $@+
91 $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
92 $(release_notes):
93 wrongdoc release_notes > $@+
94 $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
96 # ensures we're actually on the tagged $(VERSION), only used for release
97 verify:
98 test x"$(shell umask)" = x0022
99 git rev-parse --verify refs/tags/v$(VERSION)^{}
100 git diff-index --quiet HEAD^0
101 test `git rev-parse --verify HEAD^0` = \
102 `git rev-parse --verify refs/tags/v$(VERSION)^{}`
104 fix-perms:
105 -git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
106 -git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
108 gem: $(pkggem)
110 install-gem: $(pkggem)
111 gem install $(CURDIR)/$<
113 $(pkggem): manifest fix-perms
114 gem build $(rfpackage).gemspec
115 mkdir -p pkg
116 mv $(@F) $@
118 $(pkgtgz): distdir = $(basename $@)
119 $(pkgtgz): HEAD = v$(VERSION)
120 $(pkgtgz): manifest fix-perms
121 @test -n "$(distdir)"
122 $(RM) -r $(distdir)
123 mkdir -p $(distdir)
124 tar cf - $$(cat .manifest) | (cd $(distdir) && tar xf -)
125 cd pkg && tar cf - $(basename $(@F)) | gzip -9 > $(@F)+
126 mv $@+ $@
128 package: $(pkgtgz) $(pkggem)
130 release: verify package $(release_notes) $(release_changes)
131 # make tgz release on RubyForge
132 rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
133 $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
134 # push gem to RubyGems.org
135 gem push $(pkggem)
136 # in case of gem downloads from RubyForge releases page
137 -rubyforge add_file \
138 $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
139 $(RAKE) raa_update VERSION=$(VERSION)
140 $(RAKE) fm_update VERSION=$(VERSION)
141 $(RAKE) publish_news VERSION=$(VERSION)
142 else
143 gem install-gem: GIT-VERSION-FILE
144 $(MAKE) $@ VERSION=$(GIT_VERSION)
145 endif
147 all:: test
148 test:
149 $(MAKE) -C t
151 .PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test html