/
Makefile
155 lines (126 loc) · 4.58 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
.SUFFIXES: .js .peggy .css .html .smcat .svg .png .jpg
PEGGY=node_modules/peggy/bin/peggy.js
ESBUILD=node_modules/.bin/esbuild
HANDLEBARS=node_modules/.bin/handlebars
GRAMMKIT=node_modules/.bin/grammkit
GENERATED_BASE_SOURCES=src/parse/smcat/smcat-parser.mjs \
src/parse/smcat-ast.schema.mts \
src/render/dot/dot.states.template.js \
src/render/dot/dot.template.js \
src/render/smcat/smcat.template.js \
src/render/scxml/scxml.states.template.js \
src/render/scxml/scxml.template.js \
src/version.mts
EXTRA_GENERATED_CLI_SOURCES=src/cli/attributes-parser.mjs
GENERATED_CLI_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_CLI_SOURCES)
GENERATED_GRAMMAR_DOC=docs/grammar.html
EXTRA_GENERATED_PROD_SOURCES=docs/index.html \
docs/smcat-online-interpreter.min.js \
docs/inpage.html \
docs/state-machine-cat-inpage.min.js
GENERATED_PROD_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_PROD_SOURCES) $(GENERATED_GRAMMAR_DOC)
GENERATED_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_CLI_SOURCES) $(EXTRA_GENERATED_PROD_SOURCES)
# production rules
%smcat-parser.mjs: %peg/smcat-parser.peggy
$(PEGGY) --extra-options-file config/peggy-config-smcat-parser.json -o $@ $<
%attributes-parser.mjs: %peg/attributes-parser.peggy
$(PEGGY) --extra-options-file config/peggy-config-attributes-parser.json -o $@ $<
src/render/%.template.js: src/render/%.template.hbs
$(HANDLEBARS) --min --commonjs handlebars/dist/handlebars.runtime -f $@ $<
src/version.mts: package.json
npx tsx tools/get-version.mts > $@
src/parse/smcat-ast.schema.mts: tools/smcat-ast.schema.json
npx tsx tools/js-json.mts < $< > $@
docs/index.html: docs/index.hbs docs/smcat-online-interpreter.min.js docs/config/prod.json tools/template-to-html.mts
npx tsx tools/template-to-html.mts docs/config/prod.json < $< > $@
docs/inpage.html: docs/inpage.hbs docs/state-machine-cat-inpage.min.js docs/config/inpage-prod.json tools/template-to-html.mts
npx tsx tools/template-to-html.mts docs/config/inpage-prod.json < $< > $@
docs/state-machine-cat-inpage.min.js: docs/state-machine-cat-inpage.js
$(ESBUILD) $< \
--platform=browser \
--bundle \
--format=esm \
--minify \
--sourcemap \
--outfile=$@
docs/smcat-online-interpreter.min.js: $(ONLINE_INTERPRETER_SOURCES)
$(ESBUILD) docs/smcat-online-interpreter.js \
--platform=browser \
--bundle \
--format=esm \
--minify \
--sourcemap \
--outfile=$@
docs/grammar.html: src/parse/smcat/peg/smcat-parser.peggy
$(GRAMMKIT) --output-format html --output $@ $<
docs: $(GENERATED_SOURCES)
templates-dist:
cp src/render/dot/*.template.js dist/render/dot/.
cp src/render/scxml/*.template.js dist/render/scxml/.
cp src/render/smcat/*.template.js dist/render/smcat/.
dist:
mkdir -p $@
public:
mkdir -p $@
public/samples:
mkdir -p $@
public/%: docs/%
cp $< $@
%.gz: %
gzip --best --stdout $< > $@
# executable targets
clean:
rm -rf $(GENERATED_SOURCES)
rm -rf coverage
rm -rf public
rm -rf dist
rm -f docs/grammar.html
cli-build: $(GENERATED_CLI_SOURCES)
distro: $(GENERATED_CLI_SOURCES) $(GENERATED_PROD_SOURCES)
pages: distro \
public \
public/index.html \
public/index.html.gz \
public/inpage.html \
public/inpage.html.gz \
public/smcat-online-interpreter.min.js \
public/smcat-online-interpreter.min.js.gz \
public/state-machine-cat-inpage.min.js \
public/state-machine-cat-inpage.min.js.gz \
public/samples \
public/samples/on-off.smcat \
public/samples/on-off.smcat.gz \
public/samples/cat.smcat \
public/samples/cat.smcat.gz \
public/samples/desugarable.smcat \
public/samples/desugarable.smcat.gz \
public/samples/sprint-states.smcat \
public/samples/sprint-states.smcat.gz \
public/samples/sprint-states.scxml \
public/samples/sprint-states.scxml.gz \
public/samples/vscode-issues-triaging.smcat \
public/samples/vscode-issues-triaging.smcat.gz \
public/samples/tcp.smcat \
public/samples/tcp.smcat.gz \
public/samples/mediaplayer.smcat \
public/samples/mediaplayer.smcat.gz \
public/samples/phone.smcat \
public/samples/phone.smcat.gz \
public/samples/karl.smcat \
public/samples/karl.smcat.gz \
public/samples/parallel.smcat \
public/samples/parallel.smcat.gz \
public/samples/bitbitggeranonymized.smcat \
public/samples/bitbitggeranonymized.smcat.gz \
public/samples/empty.smcat \
public/samples/empty.smcat.gz \
public/samples/cheatsheet.smcat \
public/samples/cheatsheet.smcat.gz \
public/samples/cassetteplayer.smcat \
public/samples/cassetteplayer.smcat.gz \
public/samples/DHCP.smcat \
public/samples/DHCP.smcat.gz \
public/samples/PDSA.smcat \
public/samples/PDSA.smcat.gz \
public/samples/kitchensink.smcat \
public/samples/kitchensink.smcat.gz