make gittagで、自動的にVERSIONファイルのパッチ番号をアップする機能を追加
[YACASL2.git] / Makefile
1 .PHONY: all build gtags \
2         check \
3         doc alldoc doc_inner \
4         install uninstall \
5         version gittag \
6         clean src-clean gtags-clean \
7         test-clean doc-clean doc_inner-clean
8
9 CMD := casl2 comet2 dumpword
10
11 CAT := cat
12 CP := cp
13 ECHO := /bin/echo
14 GIT := git
15 GREP := grep
16 GTAGS := gtags
17 INSTALL := install
18 SED := sed
19 WHICH := which
20 EXPR := expr
21 XARGS := xargs
22
23 prefix ?= ~
24 bindir ?= $(prefix)/bin
25
26 VERSION := $(shell $(CAT) VERSION)
27 VER := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^v\([0-9.]*\)p\([0-9]*\)/\1/')
28 PATCH := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^v[0-9.]*p\([0-9]*\)/\1/')
29
30 VERSIONFILES = include/package.h \
31         test/system/casl2/opt_v/0.txt \
32         test/system/comet2/opt_v/0.txt \
33         test/system/dumpword/opt_v/0.txt
34
35 all: build doc gtags
36
37 build:
38         $(MAKE) -C src all
39         $(CP) $(addprefix src/,$(CMD)) ./
40
41 gtags:
42         $(if $(strip $(shell $(WHICH) $(GTAGS))),$(GTAGS),@$(ECHO) '$(GTAGS): not found')
43
44 doc:
45         $(MAKE) -C doc base
46         $(MAKE) INSTALL
47
48 INSTALL: doc/install.txt
49         $(CP) $< $@
50
51 alldoc:
52         $(MAKE) -C doc all
53
54 doc_inner:
55         $(MAKE) -C doc_inner all
56
57 check:
58         $(MAKE) -sC test/system
59
60 install: casl2 comet2 dumpword install-info install-casl2lib
61         $(INSTALL) -d $(bindir)
62         $(INSTALL) $(CMD) $(bindir)/
63
64 uninstall: uninstall-info uninstall-casl2lib
65         $(RM) $(prefix $(bindir)/,$(CMD))
66
67 version: $(VERSIONFILES)
68         @$(ECHO) "YACASL2 Version: $(VERSION)"
69
70 $(VERSIONFILES): VERSION
71         @$(SED) -e "s/@@VERSION@@/$(VERSION)/g" $@.version >$@
72
73 gittag:
74         patch=$(PATCH); while ($(GIT) tag | $(GREP) v$(VER)p$${patch}); do patch=`$(EXPR) $${patch} + 1`; done; $(ECHO) v$(VER)p$${patch} >VERSION
75         if ($(GIT) status -s | $(GREP) VERSION); then $(GIT) add VERSION; $(GIT) commit --amend --no-edit; fi
76         $(CAT) VERSION | $(XARGS) $(GIT) tag
77
78 distclean: cmd-clean src-distclean gtags-clean version-clean clean
79
80 clean: src-clean doc-clean doc_inner-clean
81
82 cmd-clean:
83         $(RM) $(CMD)
84
85 src-clean:
86         $(MAKE) -sC src clean
87
88 src-distclean:
89         $(MAKE) -sC src distclean
90
91 gtags-clean:
92         $(RM) GPATH GRTAGS GSYMS GTAGS
93
94 doc-clean:
95         $(MAKE) -sC doc clean
96
97 doc_inner-clean:
98         $(MAKE) -sC doc_inner clean
99
100 version-clean:
101         $(RM) $(VERSIONFILES)
102
103 test-clean:
104         $(MAKE) -sC test clean