summaryrefslogtreecommitdiff
path: root/Makefile
blob: 6b6331588d1d32aecbbca259a078e98310773da3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 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...

# 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

# 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

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


# 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) $< > $@