Makefile refactoring and cleanup.
[pwl6.git] / rules / javascript.mk
index 15fb8a5..a7bac87 100644 (file)
@@ -2,9 +2,7 @@
 # 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)
@@ -12,7 +10,7 @@ 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)
@@ -24,39 +22,36 @@ UGLIFYFLAGS ?= --comments \
                --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))