Add tests and build scripts.
[string-lerp.git] / Makefile
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..5dfff02
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,54 @@
+#!/usr/bin/make -f
+
+JSTEST ?= node_modules/.bin/jstest
+JSHINT ?= node_modules/.bin/jshint
+UGLIFY ?= node_modules/.bin/uglifyjs
+SOURCES = string-lerp.js
+MINIFIED = $(SOURCES:.js=.min.js)
+
+TESTS = $(wildcard tests/*.js);
+LINT_TARGETS = $(addprefix build/stamp/,$(addsuffix .lint,$(SOURCES)))
+TEST_TARGETS = $(addprefix build/stamp/,$(addsuffix .test,$(SOURCES)))
+
+.PHONY: all check lint test
+
+all: $(MINIFIED)
+
+%.min.js: %.js $(UGLIFY)
+       $(UGLIFY) -m < $< > $@
+
+build:
+       mkdir -p build/stamp build/dist
+
+build/stamp/%.lint: % build
+       @mkdir -p $(@D)
+       $(JSHINT) $<
+       @touch $@
+
+build/stamp/%.test: tests/% % build
+       @mkdir -p $(@D)
+       @echo $(JSTEST) $<
+       @$(JSTEST) $< > $@ || (cat $@ && rm -f $@ && exit 1)
+       @touch $@
+
+check: lint test
+
+lint: $(JSHINT) $(LINT_TARGETS)
+
+test: $(JSTEST) $(TEST_TARGETS)
+
+clean:
+       rm -rf build
+       rm -f $(MINIFIED)
+
+distclean: clean
+       rm -rf node_modules
+
+$(JSTEST):
+       npm install jstest
+
+$(JSHINT):
+       npm install jshint
+
+$(UGLIFY):
+       npm install uglify-js