5 fallback
= $(firstword $(shell command
-v
$(1)) $(2))
8 git_ls-tree
= $(shell $(GIT
) ls-tree
-r
--name-only
$(1))
9 git_tag
= $(shell $(GIT
) name-rev
--tags --name-only
$(shell $(GIT
) rev-parse
$(1)))
12 NPMBINDIR
:= .
/node_modules
/.bin
13 JSTEST ?
= $(NPMBINDIR
)/jstest
14 JSHINT ?
= $(call fallback
,jshint
,$(NPMBINDIR
)/jshint
)
15 UGLIFY ?
= $(call fallback
,uglifyjs
,$(NPMBINDIR
)/uglifyjs
)
16 SOURCES
:= string-lerp.js
17 UGLIFIED
= $(SOURCES
:.js
=.min.js
)
19 JSHINTFLAGS
+= --config tests
/jshint.config
21 TESTS
= $(wildcard tests
/*.js
)
22 LINT_TARGETS
= $(patsubst %.js
,build
/stamp
/%.lint
,$(SOURCES
))
23 TEST_TARGETS
= $(patsubst %.js
,build
/stamp
/%.
test,$(SOURCES
)) \
24 $(patsubst tests
/%.js
,build
/stamp
/%.
test,$(TESTS
))
26 .PHONY
: all check lint
test ugly
dist clean distclean install
29 @echo
"Interesting targets:"
30 @echo
" lint - validate source (with jshint)"
31 @echo
" test - run tests (with jstest)"
32 @echo
" ugly - generate minified/mangled source files"
33 @echo
" dist - generate redistributables (if git tagged)"
35 @echo
"(Running these may download packages from npm.)"
38 %.min.js
: %.js |
$(UGLIFY
)
39 $(UGLIFY
) --comments
-m
< $< > $@
41 build
/stamp
/%.lint
: %.js |
$(JSHINT
)
43 $(JSHINT
) $(JSHINTFLAGS
) $<
46 build
/stamp
/%.
test: tests
/%.js
%.js |
$(JSTEST
)
49 @
$(JSTEST
) $< > $@ ||
(cat
$@
&& rm -f
$@
&& exit
1)
52 build
/stamp
/%.
test: tests
/%.js
$(SOURCES
) |
$(JSTEST
)
55 @
$(JSTEST
) $< > $@ ||
(cat
$@
&& rm -f
$@
&& exit
1)
66 build
/dist/$(PKGNAME
)-undefined.zip build
/dist/$(PKGNAME
)-undefined.
tar.gz
:
67 $(error Distributables must be tagged or explicitly versioned
)
70 build
/dist/$(PKGNAME
)-%.zip
: $$(call git_ls-tree
,$$*)
72 $(GIT
) archive
--prefix=$(PKGNAME
)-$*/ --output
=$@
$* ||
($(RM
) $@
&& exit
1)
75 build
/dist/$(PKGNAME
)-%.
tar.gz
: $$(call git_ls-tree
,$$*)
77 $(GIT
) archive
--prefix=$(PKGNAME
)-$*/ --output
=$@
$* ||
($(RM
) $@
&& exit
1)
79 dist: check $(addprefix build
/dist/$(PKGNAME
)-$(call git_tag
,HEAD
),.zip .
tar.gz
)
98 $(NPM
) install uglify-js