This repository was archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathMakefile
More file actions
112 lines (80 loc) · 2.87 KB
/
Makefile
File metadata and controls
112 lines (80 loc) · 2.87 KB
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
# zero-out variable to be appended
SRCS_TS :=
SRCS_JS :=
SRCS_TEST_TS :=
SRCS_TEST_JS :=
SRCS_TSLINT_RULES_TS :=
SRCS_TSLINT_RULES_JS :=
SRCS_SHELL :=
# known directories within the project
TEST_DIR := test
TSLINT_RULES_DIR := tslint-rules
SCRIPTS_DIR = scripts
# glob all source TypeScript files
SRCS_TS += index.ts
SRCS_TS += $(shell find lib -type f -name '*.ts')
SRCS_TEST_TS += $(shell find $(TEST_DIR) -type f -name '*.ts')
SRCS_TSLINT_RULES_TS += $(wildcard $(TSLINT_RULES_DIR)/*.ts)
# translate .ts => .js for targets
SRCS_JS += $(patsubst %.ts,%.js,$(SRCS_TS))
SRCS_TEST_JS += $(patsubst %.ts,%.js,$(SRCS_TEST_TS))
SRCS_TSLINT_RULES_JS += $(patsubst %.ts,%.js,$(SRCS_TSLINT_RULES_TS))
# glob scripts
SRCS_SHELL += $(shell find $(SCRIPTS_DIR) -type f -name '*.sh')
# setup variables for program execution
BIN_PREFIX := $(shell npm bin)
ROOT_PREFIX := $(shell npm root)
TSC_BIN := $(addprefix $(BIN_PREFIX)/,tsc)
TSC_FLAGS := --module commonjs --target ES5 --noImplicitAny --noEmitOnError
TSC := $(TSC_BIN) $(TSC_FLAGS)
TSLINT := $(addprefix $(BIN_PREFIX)/,tslint)
TSLINT_CONFIG := tslint.json
TSLINT_TARGET := .tslint.d
TSLINT_D := $(ROOT_PREFIX)/tslint/lib/tslint.d.ts
TSLINT_TEST_TARGET := $(addprefix $(TEST_DIR)/,.tslint.d)
SHELLCHECK := shellcheck
SHELLCHECK_FAKE_TARGET := $(addprefix $(SCRIPTS_DIR)/,.shellcheck.d)
MOCHA_BIN := $(addprefix $(BIN_PREFIX)/,mocha)
MOCHA_FLAGS := --reporter spec
MOCHA := $(MOCHA_BIN) $(MOCHA_FLAGS)
RM ?= rm -f
TOUCH ?= touch
# top-level targets
.PHONY: all build check dependencies shellcheck tslint test test-mocha clean
all: dependencies build tslint
check: all lint test
dependencies:
@npm install
lint: tslint tslint-test shellcheck
test: test-mocha
build: $(SRCS_JS)
build-test: $(SRCS_TEST_JS)
tslint: $(TSLINT_TARGET)
tslint-test: $(TSLINT_TEST_TARGET)
shellcheck: $(SHELLCHECK_FAKE_TARGET)
test-mocha: build build-test tslint-test
@$(MOCHA)
# rules
clean:
@$(RM) $(SRCS_JS) $(patsubst %.js,%.js.map,$(SRCS_JS))
@$(RM) $(SRCS_TEST_JS) $(patsubst %.js,%.js.map,$(SRCS_TEST_JS))
@$(RM) $(TSC_TARGET) $(TSLINT_TARGET) $(TSLINT_TEST_TARGET)
@$(RM) $(SRCS_TSLINT_RULES_JS)
$(SHELLCHECK_FAKE_TARGET): $(SRCS_SHELL)
@$(RM) $(SHELLCHECK_FAKE_TARGET)
@$(SHELLCHECK) $(SRCS_SHELL)
@$(TOUCH) $(SHELLCHECK_FAKE_TARGET)
$(TSLINT_TARGET): $(SRCS_TS) $(TSLINT_CONFIG) $(SRCS_TSLINT_RULES_JS)
@$(RM) $(TSLINT_TARGET)
@$(TSLINT) -r $(TSLINT_RULES_DIR) $(foreach file,$(SRCS_TS),-f $(file))
@$(TOUCH) $(TSLINT_TARGET)
$(TSLINT_TEST_TARGET): $(SRCS_TEST_TS) $(TSLINT_CONFIG) $(SRCS_TSLINT_RULES_JS)
@$(RM) $(TSLINT_TEST_TARGET)
@$(TSLINT) -r $(TSLINT_RULES_DIR) $(foreach file,$(SRCS_TEST_TS),-f $(file))
@$(TOUCH) $(TSLINT_TEST_TARGET)
$(SRCS_TSLINT_RULES_JS): $(SRCS_TSLINT_RULES_TS)
@$(TSC) $(TSLINT_D) $(SRCS_TSLINT_RULES_TS)
$(SRCS_TEST_JS): $(SRCS_TEST_TS)
@$(TSC) --sourceMap $(SRCS_TEST_TS)
$(SRCS_JS): $(SRCS_TS)
@$(TSC) --sourceMap $(SRCS_TS)