5f391a4a913b666a0fac36bf30a71a4fbe3faf0e
[mes.git] / make / install.make
1 .PHONY: tree-clean-p
2
3 READMES:=\
4  AUTHORS\
5  COPYING\
6  HACKING\
7  INSTALL\
8  NEWS\
9  README\
10 #
11
12 COMMIT:=$(shell test -d .git && (git show 2>/dev/null | head -1 | cut -d' ' -f 2) || cat .tarball-version)
13 GUIX-HASH:=out/guix-hash
14 TARBALL_DIR:=$(PACKAGE)-$(VERSION)
15 TARBALL:=$(OUT)/$(TARBALL_DIR).tar.gz
16
17 OPT_CLEAN:=$(OPT_CLEAN) $(TARBALL) .tarball-version
18
19 GIT_ARCHIVE_HEAD:=git archive HEAD --
20 GIT_LS_FILES:=git ls-files
21 ifeq ($(wildcard .git/HEAD),)
22 GIT_ARCHIVE_HEAD:=tar -cf-
23 GIT_LS_FILES:=find
24 endif
25
26 ifeq ($(GUIX),)
27 DATADIR:=$(PREFIX)/share/mes
28 DOCDIR:=$(DATADIR)/doc/mes
29 else
30 DATADIR:=$(PREFIX)/share
31 DOCDIR:=$(DATADIR)/doc
32 endif
33 LIBDIR:=$(PREFIX)/lib
34
35 GODIR:=$(LIBDIR)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
36 GUILEDIR:=$(PREFIX)/share/guile/site/$(GUILE_EFFECTIVE_VERSION)
37 MODULEDIR:=$(DATADIR)/module
38
39 .tarball-version: tree-clean-p
40         echo $(COMMIT) > $@
41
42 dist: $(TARBALL)
43
44 tree-clean-p:
45         test ! -d .git || git diff --exit-code > /dev/null
46         test ! -d .git || git diff --cached --exit-code > /dev/null
47         @echo commit:$(COMMIT)
48
49 $(TARBALL): tree-clean-p .tarball-version ChangeLog
50         mkdir -p $(OUT)
51         ($(GIT_LS_FILES) --exclude=$(OUT);\
52                 echo $^ | tr ' ' '\n' | grep -Ev 'tree-clean-p')\
53                 | tar --transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@
54
55 ChangeLog:
56         build-aux/gitlog-to-changelog > $@
57
58
59 #FIXME: INSTALL like CLEAN
60 INSTALL_SCM_FILES:=
61 INSTALL_GO_FILES:=
62 install: $(CLEAN) ChangeLog
63         mkdir -p $(DESTDIR)$(PREFIX)/bin
64         install $(OUT)/mes $(DESTDIR)$(PREFIX)/bin/mes
65         install mes.mes $(DESTDIR)$(PREFIX)/bin/mes.mes
66         install scripts/mescc.mes $(DESTDIR)$(PREFIX)/bin/mescc.mes
67         install scripts/repl.mes $(DESTDIR)$(PREFIX)/bin/repl.mes
68         install guile/mescc.scm $(DESTDIR)$(PREFIX)/bin/mescc.scm
69         mkdir -p $(DESTDIR)$(DATADIR)
70         $(GIT_ARCHIVE_HEAD) module\
71                 | tar -C $(DESTDIR)$(DATADIR) -xf-
72         $(GIT_ARCHIVE_HEAD) guile\
73                 | tar -C $(DESTDIR)$(DATADIR) -xf-
74         sed -i \
75             -e 's,module/,$(DATADIR)/module/,' \
76             -e 's,@DATADIR@,$(DATADIR)/,g' \
77             -e 's,@DOCDIR@,$(DOCDIR)/,g' \
78             -e 's,@GODIR@,$(GODIR)/,g' \
79             -e 's,@GUILEDIR@,$(GUILEDIR)/,g' \
80             -e 's,@MODULEDIR@,$(MODULEDIR)/,g' \
81             -e 's,@PREFIX@,$(PREFIX)/,g' \
82             -e 's,@VERSION@,$(VERSION),g' \
83                 $(DESTDIR)$(DATADIR)/module/mes/base-0.mes \
84                 $(DESTDIR)$(DATADIR)/module/language/c99/compiler.mes \
85                 $(DESTDIR)$(PREFIX)/bin/mescc.mes \
86                 $(DESTDIR)$(PREFIX)/bin/mescc.scm \
87                 $(DESTDIR)$(PREFIX)/bin/repl.mes
88         cp module/mes/read-0.mo $(DESTDIR)$(DATADIR)/module/mes
89         cp module/mes/read-0-32.mo $(DESTDIR)$(DATADIR)/module/mes
90         mkdir -p $(DESTDIR)$(DOCDIR)
91         $(GIT_ARCHIVE_HEAD) $(READMES) \
92                 | tar -C $(DESTDIR)$(DOCDIR) -xf-
93         $(GIT_ARCHIVE_HEAD) doc \
94                 | tar -C $(DESTDIR)$(DOCDIR) --strip=1 -xf-
95         cp ChangeLog $(DESTDIR)$(DOCDIR)
96         mkdir -p $(DESTDIR)$(GUILEDIR)
97         tar -cf- -C module $(INSTALL_SCM_FILES:module/%=%)\
98                 | tar -C $(DESTDIR)$(GUILEDIR) -xf-
99         mkdir -p $(DESTDIR)$(GODIR)
100         tar -cf- -C module $(INSTALL_GO_FILES:module/%=%)\
101                 | tar -C $(DESTDIR)$(GODIR) -xf-
102
103 release: tree-clean-p check dist
104         git tag v$(VERSION)
105         git push --tags origin master
106         git push origin master
107
108 $(GUIX-HASH): tree-clean-p
109         rm -rf out/mes && mkdir -p out && git clone . out/mes && guix hash -rx out/mes > $@
110
111 update-hash: $(GUIX-HASH) .tarball-version
112         @echo -n hash:
113         cat $^
114         sed -i \
115                 -e 's,(base32 "[^"]*"),(base32 "$(shell cat $<)"),'\
116                 -e 's,(commit "[^"]*"),(commit "$(shell cat .tarball-version)"),'\
117                 -e 's,(version "[^g][^"]*"),(version "$(VERSION).$(shell cut -b1-8 .tarball-version)"),'\
118                 guix.scm
119         ! git diff --exit-code
120         git commit -m 'guix hash: $(shell cat $<)' guix.scm
121