X-Git-Url: https://git.yukkurigames.com/?p=string-lerp.git;a=blobdiff_plain;f=Makefile;h=c20843c966eee1ec2955cc009ee76773d5b88c38;hp=5dfff0271ddbc49b61fe842ff057bd49c43ddb48;hb=c94dec1af72801e7e46c2e8fed3f09667f41d8e1;hpb=a2ba0c21bc1e59f8269051458266896cb928f905 diff --git a/Makefile b/Makefile index 5dfff02..c20843c 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,53 @@ #!/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 +PKGNAME := string-lerp + +fallback = $(firstword $(shell command -v $(1)) $(2)) + +GIT ?= git +git_ls-tree = $(shell $(GIT) ls-tree -r --name-only $(1)) +git_tag = $(shell $(GIT) name-rev --tags --name-only $(shell $(GIT) rev-parse $(1))) + +NPM ?= npm +NPMBINDIR := ./node_modules/.bin +JSTEST ?= $(NPMBINDIR)/jstest +JSHINT ?= $(call fallback,jshint,$(NPMBINDIR)/jshint) +UGLIFY ?= $(call fallback,uglifyjs,$(NPMBINDIR)/uglifyjs) +SOURCES := string-lerp.js +UGLIFIED = $(SOURCES:.js=.min.js) + +TESTS = $(wildcard tests/*.js) +LINT_TARGETS = $(patsubst %.js,build/stamp/%.lint,$(SOURCES)) +TEST_TARGETS = $(patsubst %.js,build/stamp/%.test,$(SOURCES)) \ + $(patsubst tests/%.js,build/stamp/%.test,$(TESTS)) + +.PHONY: all check lint test ugly dist clean distclean install + +all: + @echo "Interesting targets:" + @echo " lint - validate source (with jshint)" + @echo " test - run tests (with jstest)" + @echo " ugly - generate minified/mangled source files" + @echo " dist - generate redistributables (if git tagged)" + @echo + @echo "(Running these may download packages from npm.)" + @echo + +%.min.js: %.js | $(UGLIFY) + $(UGLIFY) --comments -m < $< > $@ + +build/stamp/%.lint: %.js | $(JSHINT) @mkdir -p $(@D) $(JSHINT) $< @touch $@ -build/stamp/%.test: tests/% % build +build/stamp/%.test: tests/%.js %.js | $(JSTEST) + @mkdir -p $(@D) + @echo $(JSTEST) $< + @$(JSTEST) $< > $@ || (cat $@ && rm -f $@ && exit 1) + @touch $@ + +build/stamp/%.test: tests/%.js $(SOURCES) | $(JSTEST) @mkdir -p $(@D) @echo $(JSTEST) $< @$(JSTEST) $< > $@ || (cat $@ && rm -f $@ && exit 1) @@ -33,22 +55,42 @@ build/stamp/%.test: tests/% % build check: lint test -lint: $(JSHINT) $(LINT_TARGETS) +lint: $(LINT_TARGETS) + +test: $(TEST_TARGETS) + +ugly: $(UGLIFIED) -test: $(JSTEST) $(TEST_TARGETS) +build/dist/$(PKGNAME)-undefined.zip build/dist/$(PKGNAME)-undefined.tar.gz: + $(error Distributables must be tagged or explicitly versioned) + +.SECONDEXPANSION: +build/dist/$(PKGNAME)-%.zip: $$(call git_ls-tree,$$*) + @mkdir -p $(@D) + $(GIT) archive --prefix=$(PKGNAME)-$*/ --output=$@ $* || ($(RM) $@ && exit 1) + +.SECONDEXPANSION: +build/dist/$(PKGNAME)-%.tar.gz: $$(call git_ls-tree,$$*) + @mkdir -p $(@D) + $(GIT) archive --prefix=$(PKGNAME)-$*/ --output=$@ $* || ($(RM) $@ && exit 1) + +dist: check $(addprefix build/dist/$(PKGNAME)-$(call git_tag,HEAD),.zip .tar.gz) clean: - rm -rf build - rm -f $(MINIFIED) + $(RM) -r build + $(RM) $(UGLIFIED) distclean: clean - rm -rf node_modules + $(RM) -r node_modules + +install: check + $(NPM) install -g . $(JSTEST): - npm install jstest + $(NPM) install jstest $(JSHINT): - npm install jshint + $(NPM) install jshint $(UGLIFY): - npm install uglify-js + $(NPM) install uglify-js