summaryrefslogtreecommitdiff
path: root/Makefile
blob: 57efeab9e143a2f40f55439b96ae341fb6c8a9a8 (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Where are we?
dl-cache = ../download-cache
www = $(dl-cache)/www
bin = $(dl-cache)/bin

# 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

# What files do we make?
branding-images = \
	sitestatic/favicon.ico sitestatic/silhouette.png \
	sitestatic/archnavbar/archlogo.png \
	sitestatic/logos/apple-touch-icon-114x114.png \
	sitestatic/logos/apple-touch-icon-144x144.png \
	sitestatic/logos/apple-touch-icon-57x57.png \
	sitestatic/logos/apple-touch-icon-72x72.png \
	sitestatic/logos/icon-transparent-64x64.png
targets = \
	$(branding-images) \
	sitestatic/.gitignore visualize/.gitignore \
	sitestatic/rss.png \
	sitestatic/rss@2x.png \
	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

js-basenames = $(sort $(patsubst %.min,%,$(patsubst %.js,%,$(filter %.js,$(targets)))))
generated = $(sort $(targets) $(foreach f,$(js-basenames),$f.js $f.min.js))

generated := $(generated)
targets := $(generated)


# The base rules

all: $(targets)
.PHONY: all

clean:
	rm -f -- $(generated)
.PHONY: clean

%/.gitignore: $(MAKEFILE_LIST)
	printf -- '%s\n' $(patsubst $*%,%,$(filter $*/%,$(generated))) | LC_COLLATE=C sort > $@

# Make directories
$(dl-cache) $(dl-cache)/unzip $(bin):
	mkdir -p '$@'

# 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:

.PHONY: FORCE


# How to download files

  mangle = $(subst %,^25,$(subst :,^3A,$(subst =,^3D,$(subst ^,^5E,$1))))
unmangle = $(subst ^5E,^,$(subst ^3D,=,$(subst ^3A,:,$(subst ^25,%,$1))))

$(www)/http/%:
	mkdir -p '$(@D)'
	wget 'http://$(call unmangle,$*)' -O '$@'
	test -f '$@' && touch '$@'

$(www)/https/%:
	mkdir -p '$(@D)'
	wget 'https://$(call unmangle,$*)' -O '$@'
	test -f '$@' && touch '$@'

$(www)/git/%: FORCE
	mkdir -p '$(@D)'
	gitget checkout 'git://$(call unmangle,$*)' '$@' || { rm -rf -- '$@'; false; }
	test -d '$@' || { rm -rf -- '$@'; false; }


# Downloaded images

$(dl-cache)/unzip/Feedicons_v.2/%: $(www)/https/web.archive.org/web/20120514074507/http^3A//www.zeusboxstudio.com/file_download/1/Feedicons_v.2.zip
	mkdir -p '$(@D)'
	bsdtar xfO $< 'Feedicons v.2/$*' > '$@'
sitestatic/rss.png: $(dl-cache)/unzip/Feedicons_v.2/RSS_16.png
	cp $< $@
sitestatic/rss@2x.png: $(dl-cache)/unzip/Feedicons_v.2/RSS_32.png
	pngcrush $< $@

$(dl-cache)/unzip/parabola-artwork: $(www)/git/projects.parabola.nu/artwork.git\#branch=official/2013 | $(dl-cache)/unzip
	cp -rT '$<' '$@'
	make -C '$@'
$(dl-cache)/unzip/parabola-artwork/%: $(dl-cache)/unzip/parabola-artwork
	test -e $@ && touch $@
$(foreach i,$(branding-images),$(eval $i: $$(dl-cache)/unzip/parabola-artwork/$(notdir $i); install -Dm644 $$< $$@))

# 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
	{ \
		echo '/* bootstrap-typeahead.min.js: */' && \
		cat sitestatic/bootstrap-typeahead.min.js && \
		echo && \
		echo '/* konami.min.js: */' && \
		sed -e 's,^\s*,,' -e 's,^return.*,&;,' sitestatic/konami.min.js && \
		echo && \
		echo '/* Main homepage.js content: */' && \
		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 minimization processes

JSMIN = { sed -n '1,/\*\//p' $1; uglifyjs --mangle --compress < $1; } > $2

%.min.js: %.js
	$(call JSMIN,$<,$@)