size: 2 KiB

1VERSION=$(shell grep "version = \"" djot.lua | sed -e 's/.*"\([^"]*\).*"/\1/')
2REVISION=1
3ROCKSPEC=djot-$(VERSION)-$(REVISION).rockspec
4MODULES=djot.lua djot/attributes.lua djot/inline.lua djot/block.lua djot/ast.lua djot/html.lua djot/filter.lua
5SOURCES=$(MODULES) bin/main.lua
6TESTSOURCES=test.lua pathological_tests.lua
7BUNDLE=djot
8VIMDIR?=~/.vim
9TIMEOUT=perl -e 'alarm shift; exec @ARGV'
10TEMPFILE := $(shell mktemp)
11
12all: test doc/djot.1 doc/api/index.html
13
14test: $(ROCKSPEC)
15 luarocks test
16.PHONY: test
17
18testall: test pathological fuzz
19.PHONY: testall
20
21ci: testall install
22 make -C clib
23 pandoc --print-default-data-file MANUAL.txt > m.txt
24 pandoc -t djot-writer.lua m.txt -o m.dj
25 pandoc -f djot-reader.lua m.dj -o m.html
26 rm m.dj m.html
27.PHONY: ci
28
29fuzz:
30 LUA_PATH="./?.lua;$$LUA_PATH" $(TIMEOUT) 90 lua fuzz.lua 500000
31.PHONY: fuzz
32
33pathological:
34 LUA_PATH="./?.lua;$$LUA_PATH" \
35 $(TIMEOUT) 10 lua pathological_tests.lua
36.PHONY: pathological
37
38bench: bench-lua bench-luajit
39.PHONY: bench
40
41bench-lua: m.dj
42 du -h m.dj
43 LUA_PATH="./?.lua" hyperfine --warmup 2 "lua bin/main.lua m.dj"
44 LUA_PATH="./?.lua" hyperfine --warmup 2 "lua bin/main.lua -m m.dj"
45 LUA_PATH="./?.lua" hyperfine --warmup 2 "lua bin/main.lua -p m.dj"
46.PHONY: bench-lua
47
48bench-luajit: m.dj
49 du -h m.dj
50 LUA_PATH="./?.lua" hyperfine --warmup 2 "luajit bin/main.lua m.dj"
51 LUA_PATH="./?.lua" hyperfine --warmup 2 "luajit bin/main.lua -m m.dj"
52 LUA_PATH="./?.lua" hyperfine --warmup 2 "luajit bin/main.lua -p m.dj"
53.PHONY: bench-luajit
54
55
56m.dj:
57 pandoc -t djot-writer.lua https://raw.githubusercontent.com/jgm/pandoc/2.18/MANUAL.txt -o m.dj
58
59djot-reader.amalg.lua: djot-reader.lua $(MODULES)
60 LUA_PATH="./?.lua;" amalg.lua djot djot.ast djot.block djot.filter djot.inline djot.attributes djot.html djot.json -s $< -o $@
61
62djot-writer.amalg.lua: djot-writer.lua $(MODULES)
63 LUA_PATH="./?.lua;" amalg.lua djot djot.ast djot.block djot.filter djot.inline djot.attributes djot.html djot.json -s $< -o $@
64
65linecount:
66 wc -l $(SOURCES)
67.PHONY: linecount
68
69check:
70 luacheck $(SOURCES) $(TESTSOURCES)
71.PHONY: check
72
73doc/djot.1: doc/djot.md
74 pandoc \
75 --metadata title="DJOT(1)" \
76 --metadata author="" \
77 --variable footer="djot $(VERSION)" \
78 $< -s -o $@
79
80# luarocks packaging
81
82install: $(ROCKSPEC)
83 luarocks make $(ROCKSPEC)
84.PHONY: install
85
86rock: $(ROCKSPEC)
87 luarocks --local make $(ROCKSPEC)
88.PHONY: rock
89
90doc/api:
91 -mkdir $@
92
93doc/api/index.html: djot.lua djot/ast.lua djot/filter.lua doc/api
94 ldoc .
95
96vim:
97 cp editors/vim/syntax/djot.vim $(VIMDIR)/syntax/
98 cp editors/vim/ftdetect/djot.vim $(VIMDIR)/ftdetect/
99.PHONY: vim
100
101## start up nix env with lua 5.1
102lua51:
103 nix-shell --pure lua51.nix
104 rm ~/.luarocks/default-lua-version.lua
105.PHONY: lua51
106
107## start up nix env with luajiit
108luajit:
109 nix-shell --pure luajit.nix
110 rm ~/.luarocks/default-lua-version.lua
111.PHONY: luajit
112
113$(ROCKSPEC): rockspec.in
114 sed -e "s/_VERSION/$(VERSION)/g; s/_REVISION/$(REVISION)/g" $< > $@
115