summaryrefslogtreecommitdiff
path: root/Makefile
blob: bfbff5354b5d43e876a8e0ddf4733a14a8a3cb4a (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
NAME = simplyread
UPNAME = SimplyRead
VERSION = 0.8
KEYFILE = private.pem

WEBSITE = https://njw.name/$(NAME)
REPOURL = https://git.njw.name/$(NAME).git
AUTHORFOAF = https://njw.name/card#i
AUTHORNAME = Nick White
AUTHORHOME = https://njw.name
GECKOID = simplyread@njw.name

all: xpi crx

web: web/index.html web/gecko-updates.rdf web/chromium-updates.xml

$(KEYFILE):
	openssl genrsa 1024 > $@

sign:
	if test -f $(NAME)-$(VERSION).tar.bz2; then \
		gpg -b < $(NAME)-$(VERSION).tar.bz2 > $(NAME)-$(VERSION).tar.bz2.sig; \
		echo $(NAME)-$(VERSION).tar.bz2.sig; fi
	if test -f $(NAME)-$(VERSION).xpi; then \
		gpg -b < $(NAME)-$(VERSION).xpi > $(NAME)-$(VERSION).xpi.sig; \
		echo $(NAME)-$(VERSION).tar.xpi.sig; fi
	if test -f $(NAME)-$(VERSION).crx; then \
		gpg -b < $(NAME)-$(VERSION).crx > $(NAME)-$(VERSION).crx.sig; \
		echo $(NAME)-$(VERSION).tar.crx.sig; fi

# TODO: test makefile dependency is portable (and correct)
# requires uhura
web/gecko-updates.rdf: $(NAME)-$(VERSION).xpi $(KEYFILE)
	uhura -o $@ -k $(KEYFILE) $(NAME)-$(VERSION).xpi $(WEBSITE)/$(NAME)-$(VERSION).xpi

# gensig not working yet
#web/gecko-updates.rdf: gecko/updates.ttl
#	sed -e "s/VERSION/$(VERSION)/g" \
#		-e "s|WEBSITE|$(WEBSITE)|g" \
#		-e "s|GECKOID|$(GECKOID)|g" \
#		-e "s/HASH/`sha1sum $(NAME)-$(VERSION).xpi|awk '{print $$1}'`/g" \
#		-e "s/SIG/`sh gecko/gensig.sh gecko/updates.ttl $(KEYFILE)`/g" \
#		< $< | rapper -i turtle -o rdfxml /dev/stdin 2>/dev/null > $@

web/chromium-updates.xml: chromium/updates.xml
	sed -e "s/VERSION/$(VERSION)/g" -e "s|WEBSITE|$(WEBSITE)|g" < $< > $@

web/doap.ttl: web/doap-src.ttl
	sed -e "s|FOAF|$(AUTHORFOAF)|g" -e "s|AUTHORNAME|$(AUTHORNAME)|g" \
	    -e "s|AUTHORHOME|$(AUTHORHOME)|g" -e "s|WEBSITE|$(WEBSITE)|g" \
	    -e "s|REPOURL|$(REPOURL)|g" < $< > $@

# requires librdf
web/index.html: web/doap.ttl README
	echo making webpage
	echo "<!DOCTYPE html><html><head><title>$(UPNAME)</title>" > $@
	echo '<link rel="alternate" type="text/turtle" title="rdf" href="doap.ttl" />' >> $@
	echo '<style type="text/css">' >> $@
	echo "body {font-family:sans-serif; width:38em; margin:auto; max-width:94%;}" >> $@
	echo "h1 {font-size:1.6em; text-align:center;}" >> $@
	echo "a {text-decoration:none; border-bottom-width:thin; border-bottom-style:dotted;}" >> $@
	echo "</style></head><body>" >> $@
	smu < README >> $@
	echo "[$(UPNAME) $(VERSION) source]($(NAME)-$(VERSION).tar.bz2) ([sig]($(NAME)-$(VERSION).tar.bz2.sig))" | smu >> $@

	echo "[$(UPNAME) $(VERSION) for Firefox]($(NAME)-$(VERSION).xpi) ([sig]($(NAME)-$(VERSION).xpi.sig))" | smu >> $@

	echo "[$(UPNAME) $(VERSION) for Chromium]($(NAME)-$(VERSION).crx) ([sig]($(NAME)-$(VERSION).crx.sig))" | smu >> $@

	echo '<hr />' >> $@
	sh web/websummary.sh web/doap.ttl | smu >> $@
	echo '</body></html>' >> $@

dist:
	mkdir -p $(NAME)-$(VERSION)
	cp simplyread.js viable.js keybind.js icon.svg COPYING INSTALL README Makefile $(NAME)-$(VERSION)
	cp -R gecko chromium $(NAME)-$(VERSION)
	tar -c $(NAME)-$(VERSION) | bzip2 -c > $(NAME)-$(VERSION).tar.bz2
	rm -rf $(NAME)-$(VERSION)
	echo $(NAME)-$(VERSION).tar.bz2

# requires rsvg
xpi: $(KEYFILE)
	rm -rf $(NAME)-$(VERSION).xpi gecko-build
	mkdir -p gecko-build/chrome/content gecko-build/defaults/preferences
	sed 2q < COPYING > gecko-build/COPYING
	cp gecko/chrome.manifest gecko/options.xul gecko-build/
	cp gecko/chrome/content/simplyread.xul gecko-build/chrome/content/
	cp gecko/defaults/preferences/prefs.js gecko-build/defaults/preferences/
	patch < gecko/js.patch > /dev/null
	cp simplyread.js gecko-build/chrome/content/
	cat viable.js gecko/viablehook.js > gecko-build/chrome/content/viable.js
	rsvg -w 22 -h 22 icon.svg gecko-build/chrome/content/icon.png
	rsvg -w 64 -h 64 icon.svg gecko-build/icon.png
	sed -e "s/VERSION/$(VERSION)/g" -e "s|WEBSITE|$(WEBSITE)|g" -e "s|GECKOID|$(GECKOID)|g" -e "s/PUBKEY/`sh gecko/genpub.sh $(KEYFILE)`/g" \
		< gecko/install.rdf > gecko-build/install.rdf
	cd gecko-build; zip -r ../$(NAME)-$(VERSION).xpi . 1>/dev/null
	rm -rf gecko-build
	patch -R < gecko/js.patch > /dev/null
	echo $(NAME)-$(VERSION).xpi

# requires rsvg
crx: $(KEYFILE)
	rm -rf chromium-build
	mkdir chromium-build
	sed 2q < COPYING > chromium-build/COPYING
	cp simplyread.js keybind.js chromium-build/
	cp chromium/background.html chromium/options.html chromium-build/
	cat viable.js chromium/viablehook.js > chromium-build/viable.js
	rsvg -w 19 -h 19 icon.svg chromium-build/icon.png
	rsvg -w 48 -h 48 icon.svg chromium-build/icon48.png
	rsvg -w 128 -h 128 icon.svg chromium-build/icon128.png
	sed -e "s/VERSION/$(VERSION)/g" -e "s|WEBSITE|$(WEBSITE)|g" < chromium/manifest.json > chromium-build/manifest.json
	sh chromium/makecrx.sh chromium-build $(KEYFILE) > $(NAME)-$(VERSION).crx
	rm -r chromium-build
	echo $(NAME)-$(VERSION).crx

# note that tests require a patched surf browser; see tests/runtest.sh
test:
	for i in tests/html/*.html; do \
		sh tests/webkittest.sh $$i $$i.simple 1>$$i.diff 2>/dev/null; \
		test $$? -eq 0 && echo "$$i passed (webkit)" \
			|| echo "$$i failed (webkit) (see $$i.diff)"; \
		test ! -s $$i.diff && rm $$i.diff; \
	done

.PHONY: all dist xpi crx test web sign
.SUFFIXES: ttl html png svg
.SILENT: