# domain. To the extent possible under law, the author of this file
# waives all copyright and related or neighboring rights to it.
-.DELETE_ON_ERROR:
-
-javascript>fallback = $(firstword $(shell command -v $1) $2 $1)
+$(call include-once.,programs.mk)
NPM ?= npm
NPMROOT ?= $(CURDIR)
npmbindir = $(NPMROOT)/node_modules/.bin
.PRECIOUS: $(npmbindir)/%
-npmbin = $(call javascript>fallback,$1,$(npmbindir)/$1)
+npmbin = $(call command-v,$1 $(npmbindir)/$1)
JSTEST ?= $(npmbindir)/jstest
JSHINT ?= $(call npmbin,jshint)
--compress $(UGLIFYCOMPRESSFLAGS) \
--mangle $(UGLIFYMANGLEFLAGS)
-BUILDDIR ?= build/
-JSSTAMPDIR ?= $(BUILDDIR)/stamp
-JSHINTDIR ?= $(JSSTAMPDIR)
-JSTESTDIR ?= $(JSSTAMPDIR)
-JSUGLYDIR ?= $(CURDIR)
+jsstampprefix ?= $(stampprefix)
+jsuglyprefix ?=
-JSHINTFLAGS += $(if $(JSHINTCONFIG),--config $(JSHINTCONFIG))
JSTESTFLAGS += $(if $(JSTESTFORMAT),--format $(JSTESTFORMAT))
+JSTEST_NODE_PATH ?= $(VPATH)
JSTESTENV += $(if $(JSTEST_NODE_PATH),NODE_PATH=$(JSTEST_NODE_PATH))
JSTESTFORMAT ?= spec
-jshint-stampify = $(patsubst %.js,$(JSHINTDIR)/%.js.lint,$1)
-jstest-stampify = $(patsubst %.js,$(JSTESTDIR)/%.js.test,$1)
-uglify-stampify = $(patsubst %.js,$(JSUGLYDIR)/%.min.js,$1)
+jshint-stampify = $(patsubst %.js,$(jsstampprefix)%.js.lint,$1)
+jstest-stampify = $(patsubst %.js,$(jsstampprefix)%.js.test,$1)
+uglify-stampify = $(patsubst %.js,$(jsuglyprefix)%.min.js,$1)
-javascript>capture-to-target = @echo "$1" && $1 > $@ || (cat $@ && exit 1)
+find-js = $(shell find $1 $(if $2,$2 -o) -type f -name '*.js' -print)
UGLIFY.js = $(UGLIFY) $(UGLIFYFLAGS)
LINT.js = $(JSHINT) $(JSHINTFLAGS)
TEST.js = $(JSTESTENV) $(JSTEST) $(JSTESTFLAGS)
-$(JSUGLYDIR)/%.min.js: %.js | $(UGLIFY)
- mkdir -p $(@D)
+$(jsuglyprefix)/%.min.js: %.js | $(UGLIFY)
+ $(MKDIR) $(@D)
$(UGLIFY.js) < $< > $@
-$(JSHINTDIR)/%.js.lint: %.js | $(JSHINT)
- mkdir -p $(@D)
+$(jsstampprefix)%.js.lint: %.js | $(JSHINT)
+ $(MKDIR) $(@D)
$(LINT.js) $<
touch $@
-$(JSTESTDIR)/%.js.test: %.js | $(JSTEST)
- mkdir -p $(@D)
- $(call javascript>capture-to-target,$(TEST.js) $<)
+$(jsstampprefix)%.js.test: %.js | $(JSTEST)
+ $(MKDIR) $(@D)
+ $(call quiet,$(TEST.js) $<,$@)
$(npmbindir)/%:
$(NPM) install $(firstword $(value $(@F)_npm_package) $(@F))