# 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. .DELETE_ON_ERROR: javascript>fallback = $(firstword $(shell command -v $1) $2 $1) NPM ?= npm NPMROOT ?= $(CURDIR) npmbindir = $(NPMROOT)/node_modules/.bin .PRECIOUS: $(npmbindir)/% npmbin = $(call javascript>fallback,$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) BUILDDIR ?= build/ JSSTAMPDIR ?= $(BUILDDIR)/stamp JSHINTDIR ?= $(JSSTAMPDIR) JSTESTDIR ?= $(JSSTAMPDIR) JSUGLYDIR ?= $(CURDIR) JSHINTFLAGS += $(if $(JSHINTCONFIG),--config $(JSHINTCONFIG)) JSTESTFLAGS += $(if $(JSTESTFORMAT),--format $(JSTESTFORMAT)) 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) javascript>capture-to-target = @echo "$1" && $1 > $@ || (cat $@ && exit 1) UGLIFY.js = $(UGLIFY) $(UGLIFYFLAGS) LINT.js = $(JSHINT) $(JSHINTFLAGS) TEST.js = $(JSTESTENV) $(JSTEST) $(JSTESTFLAGS) $(JSUGLYDIR)/%.min.js: %.js | $(UGLIFY) mkdir -p $(@D) $(UGLIFY.js) < $< > $@ $(JSHINTDIR)/%.js.lint: %.js | $(JSHINT) mkdir -p $(@D) $(LINT.js) $< touch $@ $(JSTESTDIR)/%.js.test: %.js | $(JSTEST) mkdir -p $(@D) $(call javascript>capture-to-target,$(TEST.js) $<) $(npmbindir)/%: $(NPM) install $(firstword $(value $(@F)_npm_package) $(@F))