Add loadable modules.
[mes.git] / make / install.make
1 .PHONY: tree-clean-p
2
3 READMES:=\
4  ANNOUNCE\
5  ANNOUNCE-2\
6  AUTHORS\
7  COPYING\
8  HACKING\
9  NEWS\
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),)
22 GIT_ARCHIVE_HEAD:=tar -cf-
23 GIT_LS_FILES:=find
24 endif
25
26 .tarball-version: tree-clean-p
27         echo $(COMMIT) > $@
28
29 dist: $(TARBALL)
30
31 tree-clean-p:
32         test ! -d .git || git diff --exit-code > /dev/null
33         test ! -d .git || git diff --cached --exit-code > /dev/null
34         @echo commit:$(COMMIT)
35
36 $(TARBALL): tree-clean-p .tarball-version ChangeLog
37         mkdir -p $(OUT)
38         ($(GIT_LS_FILES) --exclude=$(OUT);\
39                 echo $^ | tr ' ' '\n' | grep -Ev 'tree-clean-p')\
40                 | tar --transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@
41
42 ChangeLog:
43         build-aux/gitlog-to-changelog > $@
44
45 install: all ChangeLog
46         mkdir -p $(DESTDIR)$(PREFIX)/bin
47         install mes $(DESTDIR)$(PREFIX)/bin/mes
48         install scripts/elf.mes $(DESTDIR)$(PREFIX)/bin/elf.mes
49         install scripts/include.mes $(DESTDIR)$(PREFIX)/bin/include.mes
50         install scripts/mescc.mes $(DESTDIR)$(PREFIX)/bin/mescc.mes
51         install scripts/repl.mes $(DESTDIR)$(PREFIX)/bin/repl.mes
52         install scripts/paren.mes $(DESTDIR)$(PREFIX)/bin/paren.mes
53         mkdir -p $(DESTDIR)$(PREFIX)/share/mes
54         $(GIT_ARCHIVE_HEAD) module\
55                 | tar -C $(DESTDIR)$(PREFIX)/share/mes -xf-
56         cp module/mes/read-0.mo $(DESTDIR)$(PREFIX)/share/mes/module/mes
57         sed -i -e 's@module/@$(PREFIX)/share/mes/module/@' \
58                 $(DESTDIR)$(PREFIX)/share/mes/module/mes/base-0.mes \
59                 $(DESTDIR)$(PREFIX)/bin/elf.mes \
60                 $(DESTDIR)$(PREFIX)/bin/mescc.mes \
61                 $(DESTDIR)$(PREFIX)/bin/repl.mes \
62                 $(DESTDIR)$(PREFIX)/bin/paren.mes
63         mkdir -p $(DESTDIR)$(PREFIX)/share/doc/mes
64         $(GIT_ARCHIVE_HEAD) $(READMES) \
65                 | tar -C $(DESTDIR)$(PREFIX)/share/doc/mes -xf-
66         $(GIT_ARCHIVE_HEAD) doc \
67                 | tar -C $(DESTDIR)$(PREFIX)/share/doc/mes --strip=1 -xf-
68         cp ChangeLog $(DESTDIR)$(PREFIX)/share/doc/mes
69
70 release: tree-clean-p check dist
71         git tag v$(VERSION)
72         git push --tags origin master
73         git push origin master
74
75 $(GUIX-HASH): tree-clean-p
76         rm -rf out/mes && mkdir -p out && git clone . out/mes && guix hash -rx out/mes > $@
77
78 update-hash: $(GUIX-HASH) .tarball-version
79         @echo -n hash:
80         cat $^
81         sed -i \
82                 -e 's,(base32 "[^"]*"),(base32 "$(shell cat $<)"),'\
83                 -e 's,(commit "[^"]*"),(commit "$(shell cat .tarball-version)"),'\
84                 -e 's,(version "[^"]*"),(version "$(VERSION).$(shell cut -b1-8 .tarball-version)"),'\
85                 guix.scm
86         ! git diff --exit-code
87         git commit -m 'guix hash: $(shell cat $<)' guix.scm
88