forked from HackerExperience/HEBorn
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
127 lines (103 loc) · 3.8 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
# Does not work with BSD Make :(
.PHONY: default setup prepare build build-css release
default: dev
UNAME := $(shell uname)
nodebin := node_modules/.bin
main := src/Main.elm
port := 8000
server := $(nodebin)/webpack-dev-server --hot --inline --port $(port)
################################################################################
# Setup
################################################################################
setup:
ifeq ($(UNAME),FreeBSD)
rm -rf node_modules/elm-webpack-loader
endif
git submodule init
git submodule update
npm install
elm-package install -y
# FreeBSD compat hack
# Clone elm-webpack-loader, remove `elm` from deps and then `npm install` it.
ifeq ($(UNAME),FreeBSD)
mkdir node_modules/elm-webpack-loader
cp -r /usr/local/elm/elm-webpack-loader/* node_modules/elm-webpack-loader
endif
# ??? not sure why some bins aren't installed as executable
# this seems to be only on the FreeBSD build server
chmod +x node_modules/.bin/*
################################################################################
# Compile
################################################################################
compile:
elm-make $(main) && rm -f index.html
compile-loop:
-while :; do $(MAKE) compile; sleep 2; done
################################################################################
# Build
################################################################################
prepare:
rm -rf build/ && mkdir -p build/
build: prepare
cat static/index.html > build/index.html
$(nodebin)/elm-css src/Core/Stylesheets.elm -o static/css
build-css: prepare
awk '/\<\/body/ \
{print \
"\<script type\=\"text\/javascript\" src\=\"vendor\/cssrefresh\.js\"\> \
\<\/script\> \
"}1' \
static/index.html > build/index.html
$(nodebin)/elm-css src/Core/Stylesheets.elm -o static/css
release: build
npm run build
tar -zcf release.tar.gz build/ && mv release.tar.gz build/
################################################################################
# Dev
################################################################################
# For dev, first we compile the whole app, and only then we run npm.
# The rationale is simple: `npm start` will compile with debug and warn
# flags, which makes the whole step much slower. Compiling first without
# them ensures the "bulk" of the job is done quickly, and only then we
# add the debug flags. There is little difference when only a couple
# of changes are made, but it makes everything much faster when the
# whole app, with dependencies, need to be built. This usually happens
# when adding dependencies, changing branches etc.
dev: compile build
npm start
# Add annoying css hot reloader. Useful when editing styles.
dev-css: compile build-css
npm start
################################################################################
# Tools
################################################################################
server:
$(server)
lint:
elm-format --validate src/
################################################################################
# Test
################################################################################
test:
$(nodebin)/elm-test
test-quick:
sed 's/10/1/g' tests/Config.elm > tests/Config.elm.tmp && \
mv tests/Config.elm.tmp tests/Config.elm
$(MAKE) test
git checkout tests/Config.elm
test-long:
sed 's/10/100/g' tests/Config.elm > tests/Config.elm.tmp && \
mv tests/Config.elm.tmp tests/Config.elm
$(MAKE) test
git checkout tests/Config.elm
test-loop:
- while :; do $(MAKE) test; sleep 2; done
################################################################################
# Clean
################################################################################
clean:
rm -rf build/* && \
rm -f *.html && \
rm -f release.tar.gz && \
git clean -id && \
git checkout tests/Config.elm