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