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 TESTS
= $(wildcard tests
/*.js
)
20 LINT_TARGETS
= $(patsubst %.js
,build
/stamp
/%.lint
,$(SOURCES
))
21 TEST_TARGETS
= $(patsubst %.js
,build
/stamp
/%.
test,$(SOURCES
)) \
22 $(patsubst tests
/%.js
,build
/stamp
/%.
test,$(TESTS
))
24 .PHONY
: all check lint
test ugly
dist clean distclean install
27 @echo
"Interesting targets:"
28 @echo
" lint - validate source (with jshint)"
29 @echo
" test - run tests (with jstest)"
30 @echo
" ugly - generate minified/mangled source files"
31 @echo
" dist - generate redistributables (if git tagged)"
33 @echo
"(Running these may download packages from npm.)"
36 %.min.js
: %.js |
$(UGLIFY
)
37 $(UGLIFY
) --comments
-m
< $< > $@
39 build
/stamp
/%.lint
: %.js |
$(JSHINT
)
44 build
/stamp
/%.
test: tests
/%.js
%.js |
$(JSTEST
)
47 @
$(JSTEST
) $< > $@ ||
(cat
$@
&& rm -f
$@
&& exit
1)
50 build
/stamp
/%.
test: tests
/%.js
$(SOURCES
) |
$(JSTEST
)
53 @
$(JSTEST
) $< > $@ ||
(cat
$@
&& rm -f
$@
&& exit
1)
64 build
/dist/$(PKGNAME
)-undefined.zip build
/dist/$(PKGNAME
)-undefined.
tar.gz
:
65 $(error Distributables must be tagged or explicitly versioned
)
68 build
/dist/$(PKGNAME
)-%.zip
: $$(call git_ls-tree
,$$*)
70 $(GIT
) archive
--prefix=$(PKGNAME
)-$*/ --output
=$@
$* ||
($(RM
) $@
&& exit
1)
73 build
/dist/$(PKGNAME
)-%.
tar.gz
: $$(call git_ls-tree
,$$*)
75 $(GIT
) archive
--prefix=$(PKGNAME
)-$*/ --output
=$@
$* ||
($(RM
) $@
&& exit
1)
77 dist: check $(addprefix build
/dist/$(PKGNAME
)-$(call git_tag
,HEAD
),.zip .
tar.gz
)
96 $(NPM
) install uglify-js