# This is free and unencumbered software released into the public # domain. To the extent possible under law, the author of this file # waives all copyright and related or neighboring rights to it. $(call include-once.,programs.mk) NPM ?= npm NPMROOT ?= $(CURDIR) npmbindir = $(NPMROOT)/node_modules/.bin .PRECIOUS: $(npmbindir)/% npmbin = $(call command-v,$1 $(npmbindir)/$1) JSTEST ?= $(npmbindir)/jstest JSHINT ?= $(call npmbin,jshint) uglifyjs_npm_package := uglify-js UGLIFY ?= $(call npmbin,uglifyjs) UGLIFYFLAGS ?= --comments \ --compress $(UGLIFYCOMPRESSFLAGS) \ --mangle $(UGLIFYMANGLEFLAGS) jsstampprefix ?= $(stampprefix) jsuglyprefix ?= 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,$(jsstampprefix)%.js.lint,$1) jstest-stampify = $(patsubst %.js,$(jsstampprefix)%.js.test,$1) uglify-stampify = $(patsubst %.js,$(jsuglyprefix)%.min.js,$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) $(jsuglyprefix)/%.min.js: %.js | $(UGLIFY) $(MKDIR) $(@D) $(UGLIFY.js) < $< > $@ $(jsstampprefix)%.js.lint: %.js | $(JSHINT) $(MKDIR) $(@D) $(LINT.js) $< touch $@ $(jsstampprefix)%.js.test: %.js | $(JSTEST) $(MKDIR) $(@D) $(call quiet,$(TEST.js) $<,$@) $(npmbindir)/%: $(NPM) install $(firstword $(value $(@F)_npm_package) $(@F))