X-Git-Url: https://git.yukkurigames.com/?p=pwl6.git;a=blobdiff_plain;f=rules%2Fjavascript.mk;h=a7bac8764772c4eef47c1b6e3681ae9dbf31867c;hp=15fb8a5abbf7c8882e07fd83ba76126111fd8c19;hb=ac47d3137a6a3dc618afe9bf1a6ca860e117942a;hpb=2854030a3f699188676f19ba16a5400c4976f23c diff --git a/rules/javascript.mk b/rules/javascript.mk index 15fb8a5..a7bac87 100644 --- a/rules/javascript.mk +++ b/rules/javascript.mk @@ -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))