diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2015-04-15 00:51:40 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2015-04-15 00:51:40 -0400 |
commit | 0e7d8abd052418a9dbf79aac43ad388d2d16b043 (patch) | |
tree | a883bd585046ba5be7561b3f315c8a57dcbbd15f /Makefile | |
parent | 67b87ed4c0abd593e2833b3aa6b969c2e2451b60 (diff) | |
parent | 98e3d3126710a827c1ea1296f38e3e29adf37857 (diff) |
Merge branch 'mkjs' into archweb-generic
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 101 |
1 files changed, 95 insertions, 6 deletions
@@ -1,11 +1,100 @@ -subdirs = sitestatic visualize/static +# The idea here is to be able to re-generate the exact Javascript +# files as they exist in git. This means munging whitespace in weird +# ways, using specific versions of various JS minimizers... -define newline = +# Where are we? +topdir := $(dir $(lastword $(MAKEFILE_LIST))) +www = $(topdir)/../web-cache/www +# Where are the Javascript minimizers? +# Any of the 1.3.x or 2.2.x will produce the same output for these +uglifyjs-1.3 = ~/Downloads/UglifyJS/bin/uglifyjs --no-copyright --ascii --max-line-len 0 +uglifyjs-2.2 = ~/Downloads/UglifyJS2/bin/uglifyjs --mangle --compress -- +closure-compiler = java -jar ~/Downloads/compiler-20121212/compiler.jar -endef +# What versions of 3rd party libraries are we using? +jquery-ver=1.8.3 +bootstrap-ver=2.1.1 +tablesorter-ver=2.7 +d3-ver=3.0.6 +konami-ver=c0f686e647765860ff4d2fcb7b48122785432b75 -default: all ; +targets = \ + sitestatic/bootstrap-typeahead.js \ + sitestatic/homepage.js \ + sitestatic/jquery-$(jquery-ver).min.js \ + sitestatic/jquery.tablesorter-$(tablesorter-ver).js \ + sitestatic/jquery.tablesorter-$(tablesorter-ver).min.js \ + sitestatic/konami.min.js \ + visualize/static/d3-$(d3-ver).js \ + visualize/static/d3-$(d3-ver).min.js -%: - $(foreach subdir,$(subdirs),$(MAKE) -C $(subdir) $@$(newline)) + +# The base rules + +all: $(targets) +.PHONY: all + +basenames = $(sort $(patsubst %.min,%,$(patsubst %.js,%,$(targets)))) +generated = $(addsuffix .js,$(basenames)) $(addsuffix .min.js,$(basenames)) +clean: + rm -f -- $(generated) +.PHONY: clean + +# Don't have non-minimized .js stick around unless we asked for them. +.INTERMEDIATE: $(filter-out $(targets),$(generated)) + +# Turn on sane error handling +.DELETE_ON_ERROR: + + +# How to download files + +$(www)/http/%: + mkdir -p '$(@D)' + wget 'http://$*' -O '$@' + touch '$@' + +$(www)/https/%: + mkdir -p '$(@D)' + wget 'https://$*' -O '$@' + touch '$@' + + +# Non-minimized .js files +sitestatic/bootstrap-typeahead.js: sitestatic/%: $(www)/https/raw.github.com/twitter/bootstrap/v$(bootstrap-ver)/js/% Makefile.d/%.patch + cp $< $@ + patch -i Makefile.d/$*.patch $@ +sitestatic/jquery-$(jquery-ver).js: sitestatic/%: $(www)/http/code.jquery.com/% + cp $< $@ +sitestatic/jquery.tablesorter-$(tablesorter-ver).js: $(www)/https/raw.github.com/Mottie/tablesorter/v$(tablesorter-ver)/js/jquery.tablesorter.js + cp $< $@ +sitestatic/konami.js: sitestatic/%: $(www)/https/raw.github.com/snaptortoise/konami-js/$(konami-ver)/% Makefile.d/%.patch + cp $< $@ + patch -i Makefile.d/$*.patch $@ +sitestatic/homepage.js: sitestatic/bootstrap-typeahead.min.js sitestatic/konami.min.js Makefile.d/homepage.js.in + { \ + cat sitestatic/bootstrap-typeahead.min.js && \ + echo && \ + sed -e 's,^\s*,,' -e 's,^return.*,&;,' sitestatic/konami.min.js && \ + echo && \ + cat Makefile.d/homepage.js.in ; \ + } > $@ +visualize/static/d3-$(d3-ver).js: %: $(www)/https/raw.github.com/mbostock/d3/v$(d3-ver)/d3.js + cp $< $@ + + +# The crazy minimization processes + +sitestatic/bootstrap-typeahead.min.js: %.min.js: %.js + $(uglifyjs-1.3) $< > $@ +sitestatic/jquery-$(jquery-ver).min.js: sitestatic/%.min.js: sitestatic/%.js Makefile.d/%.min.js.preamble + { cat Makefile.d/$*.min.js.preamble && echo && $(uglifyjs-1.3) $<; } > $@ +sitestatic/jquery.tablesorter-$(tablesorter-ver).min.js: sitestatic/%.min.js: sitestatic/%.js Makefile.d/%.min.js.preamble + @# The tr/sed is to turn all of the newlines except for the last one into spaces + { cat Makefile.d/$*.min.js.preamble && echo && $(closure-compiler) $< | tr '\n' ' ' | sed 's, $$,\n,'; } > $@ +sitestatic/konami.min.js: %.min.js: %.js + @# The sed is to insert newlines and whitespace at the correct places; presumably to match Dan copy/pasting into an editor. + $(uglifyjs-2.2) $< | sed -r -e 's:e\.iphone\.stop_x|s=this\.tap===:\n\t&:g' -e 's,return"string",\n&,' | sed -e 's,;$$,,' -e '$$s,$$,\n,' > $@ +visualize/static/d3-$(d3-ver).min.js: %.min.js: %.js + $(uglifyjs-2.2) $< > $@ |