summaryrefslogtreecommitdiff
path: root/Makefile
blob: d0948c6430e9ce0c30580530add49ea7ef8b6bef (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
# Targets:
#    all        Build all styles in all formats (default)
#    all_ttf    Build all styles as TrueType
#    STYLE      Build STYLE in all formats (e.g. MediumItalic)
#    STYLE_ttf  Build STYLE as TrueType (e.g. MediumItalic_ttf)
#    zip        Build all styles as TrueType and package into a zip archive
#
all: all_web all_otf

VERSION := $(shell misc/version.py)

# generated.make is automatically generated by init.sh and defines depenencies for
# all styles and alias targets
include build/etc/generated.make

res_files := src/fontbuild.cfg src/diacritics.txt src/glyphlist.txt src/glyphorder.txt

# UFO -> TTF & OTF (note that UFO deps are defined by generated.make)
build/tmp/InterfaceTTF/Interface-%.ttf: $(res_files)
	misc/ufocompile --otf $*

build/tmp/InterfaceOTF/Interface-%.otf: build/tmp/InterfaceTTF/Interface-%.ttf $(res_files)
	@true

# build/tmp/ttf -> build (generated.make handles build/tmp/InterfaceTTF/Interface-%.ttf)
build/dist-unhinted/Interface-%.ttf: build/tmp/InterfaceTTF/Interface-%.ttf
	@mkdir -p build/dist-unhinted
	cp -a "$<" "$@"

# OTF
build/dist-unhinted/Interface-%.otf: build/tmp/InterfaceOTF/Interface-%.otf
	cp -a "$<" "$@"

build/dist:
	@mkdir -p build/dist

# autohint
build/dist/Interface-%.ttf: build/dist-unhinted/Interface-%.ttf build/dist
	ttfautohint \
	  --hinting-limit=256 \
	  --hinting-range-min=8 \
	  --hinting-range-max=64 \
	  --fallback-stem-width=256 \
	  --strong-stem-width=D \
	  --no-info \
	  --verbose \
	  "$<" "$@"

# TTF -> WOFF2
build/%.woff2: build/%.ttf
	woff2_compress "$<"

# TTF -> WOFF
build/%.woff: build/%.ttf
	ttf2woff -O -t woff "$<" "$@"

# TTF -> EOT (disabled)
# build/%.eot: build/%.ttf
# 	ttf2eot "$<" > "$@"

ZIP_FILE_DIST := build/release/Interface-${VERSION}.zip
ZIP_FILE_DEV  := build/release/Interface-${VERSION}-$(shell git rev-parse --short=10 HEAD).zip

# zip intermediate
build/.zip.zip: all
	@rm -rf build/.zip
	@rm -f build/.zip.zip
	@mkdir -p \
		"build/.zip/Interface (web)" \
		"build/.zip/Interface (hinted TTF)" \
		"build/.zip/Interface (TTF)" \
		"build/.zip/Interface (OTF)"
	@cp -a build/dist/*.woff build/dist/*.woff2  "build/.zip/Interface (web)/"
	@cp -a build/dist/*.ttf                      "build/.zip/Interface (hinted TTF)/"
	@cp -a build/dist-unhinted/*.ttf             "build/.zip/Interface (TTF)/"
	@cp -a build/dist-unhinted/*.otf             "build/.zip/Interface (OTF)/"
	@cp -a misc/doc/install-*.txt                "build/.zip/"
	cd build/.zip && zip -v -X -r "../../build/.zip.zip" * >/dev/null && cd ../..
	@rm -rf build/.zip

# zip
build/release/Interface-%.zip: build/.zip.zip
	@mkdir -p "$(shell dirname "$@")"
	@mv -f "$<" "$@"
	@echo write "$@"

zip: ${ZIP_FILE_DEV}
zip_dist: ${ZIP_FILE_DIST}

dist:
	@echo "Creating distribution for version ${VERSION}"
	@if [ -f "${ZIP_FILE_DIST}" ]; \
		then echo "${ZIP_FILE_DIST} already exists. Bump version or remove the zip file to continue." >&2; \
		exit 1; \
  fi
	@$(MAKE) zip_dist
	rm -rf docs/font-files
	mkdir docs/font-files
	cp -a build/dist/*.woff build/dist/*.woff2 docs/font-files/
	@echo "——————————————————————————————————————————————————————————————————"
	@echo ""
	@echo "Next step:"
	@echo "  Create new release with ${ZIP_FILE_DIST} at"
	@echo ""
	@echo "  https://github.com/rsms/interface/releases/new?tag=v${VERSION}"
	@echo ""
	@echo "——————————————————————————————————————————————————————————————————"

install_ttf: all_ttf
	@echo "Installing TTF files locally at ~/Library/Fonts/Interface"
	rm -rf ~/Library/Fonts/Interface
	mkdir -p ~/Library/Fonts/Interface
	cp -va build/dist/*.ttf ~/Library/Fonts/Interface

install_otf: all_otf
	@echo "Installing OTF files locally at ~/Library/Fonts/Interface"
	rm -rf ~/Library/Fonts/Interface
	mkdir -p ~/Library/Fonts/Interface
	cp -va build/dist-unhinted/*.otf ~/Library/Fonts/Interface

install: all install_otf

glyphinfo: _local/UnicodeData.txt
	misc/gen-glyphinfo.py -ucd _local/UnicodeData.txt \
	  src/Interface-*.ufo > misc/preview/glyphinfo.json

# Download latest Unicode data
_local/UnicodeData.txt:
	@mkdir -p _local
	curl -s '-#' -o "$@" \
	  http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt

clean:
	rm -vrf build/tmp/* build/dist/Interface-*.*

.PHONY: all web clean install install_otf install_ttf deploy zip zip_dist dist glyphinfo