# Targets: # all Build everything # test Build and test everyything (implies all_check) # install Build and install all OTF files. (currently Mac-only) # zip Build a complete release-grade ZIP archive of all fonts. # dist Create a new release distribution. Does everything. # # all_const Build all non-variable files # all_const_hinted Build all non-variable files with hints # all_var Build all variable files # all_var_hinted Build all variable files with hints (disabled) # # all_otf Build all OTF files into FONTDIR/const # all_ttf Build all TTF files into FONTDIR/const # all_ttf_hinted Build all TTF files with hints into FONTDIR/const-hinted # all_web, web Build all WOFF files into FONTDIR/const # all_web_hinted Build all WOFF files with hints into FONTDIR/const-hinted # all_var Build all variable font files into FONTDIR/var # all_var_hinted Build all variable font files with hints into # FONTDIR/var-hinted # # designspace Build src/Inter.designspace from src/Inter.glyphs # # Style-specific targets: # STYLE_otf Build OTF file for STYLE into FONTDIR/const # STYLE_ttf Build TTF file for STYLE into FONTDIR/const # STYLE_ttf_hinted Build TTF file for STYLE with hints into # FONTDIR/const-hinted # STYLE_web Build WOFF files for STYLE into FONTDIR/const # STYLE_web_hinted Build WOFF files for STYLE with hints into # FONTDIR/const-hinted # STYLE_check Build & check OTF and TTF files for STYLE # # "build" directory output structure: # fonts # const # const-hinted # var # var-hinted (disabled) # FONTDIR = build/fonts all: all_const all_const_hinted all_var web: all_web all_const: all_otf all_ttf all_web all_const_hinted: all_ttf_hinted all_web_hinted var: \ $(FONTDIR)/var/Inter.var.woff2 \ $(FONTDIR)/var/Inter.var.ttf all_var: \ $(FONTDIR)/var/Inter.var.woff2 \ $(FONTDIR)/var/Inter.var.ttf \ $(FONTDIR)/var/Inter-upright.var.woff2 \ $(FONTDIR)/var/Inter-italic.var.woff2 \ $(FONTDIR)/var/Inter-upright.var.ttf \ $(FONTDIR)/var/Inter-italic.var.ttf all_ufo_masters = $(Thin_ufo_d) \ $(ThinItalic_ufo_d) \ $(Regular_ufo_d) \ $(Italic_ufo_d) \ $(Black_ufo_d) \ $(BlackItalic_ufo_d) # Hinted variable font disabled. See https://github.com/rsms/inter/issues/75 # all_var_hinted: $(FONTDIR)/var-hinted/Inter.var.ttf $(FONTDIR)/var-hinted/Inter.var.woff2 # .PHONY: all_var_hinted .PHONY: all_const all_const_hinted var all_var export PATH := $(PWD)/build/venv/bin:$(PATH) # generated.make is automatically generated by init.sh and defines depenencies for # all styles and alias targets include build/etc/generated.make # TTF -> WOFF2 build/%.woff2: build/%.ttf woff2_compress "$<" # TTF -> WOFF build/%.woff: build/%.ttf ttf2woff -O -t woff "$<" "$@" # make sure intermediate TTFs are not gc'd by make .PRECIOUS: build/%.ttf # Master UFOs -> variable TTF $(FONTDIR)/var/%.var.ttf: src/%.designspace $(all_ufo_masters) misc/fontbuild compile-var -o $@ $< # Instance UFO -> OTF, TTF (note: masters' rules in generated.make) $(FONTDIR)/const/Inter-%.otf: build/ufo/Inter-%.ufo misc/fontbuild compile -o $@ $< $(FONTDIR)/const/Inter-%.ttf: build/ufo/Inter-%.ufo misc/fontbuild compile -o $@ $< # designspace <- glyphs file src/Inter-*.designspace: src/Inter.designspace src/Inter.designspace: src/Inter.glyphs misc/fontbuild glyphsync $< # make sure intermediate files are not gc'd by make .PRECIOUS: src/Inter-*.designspace designspace: src/Inter.designspace .PHONY: designspace # short-circuit Make for performance src/Inter.glyphs: @true # instance UFOs <- master UFOs build/ufo/Inter-%.ufo: src/Inter.designspace $(all_ufo_masters) misc/fontbuild instancegen src/Inter.designspace $* # make sure intermediate UFOs are not gc'd by make .PRECIOUS: build/ufo/Inter-%.ufo # Note: The seemingly convoluted dependency graph above is required to # make sure that glyphsync and instancegen are not run in parallel. # hinted TTF files via autohint $(FONTDIR)/const-hinted/%.ttf: $(FONTDIR)/const/%.ttf mkdir -p "$(dir $@)" ttfautohint --fallback-stem-width=256 --no-info "$<" "$@" # python -m ttfautohint --fallback-stem-width=256 --no-info "$<" "$@" # $(FONTDIR)/var-hinted/%.ttf: $(FONTDIR)/var/%.ttf # mkdir -p "$(dir $@)" # ttfautohint --fallback-stem-width=256 --no-info "$<" "$@" # make sure intermediate TTFs are not gc'd by make .PRECIOUS: $(FONTDIR)/const/%.ttf $(FONTDIR)/const-hinted/%.ttf $(FONTDIR)/var/%.var.ttf # check var test_var: all_var misc/fontbuild checkfont $(FONTDIR)/var/*.ttf $(FONTDIR)/var/*.woff2 # test runs all tests # Note: all_check_const is generated by init.sh and runs "fontbuild checkfont" # on all otf and ttf files. test: all_check_const test_var @echo "test: all ok" # check does the same thing as test, but without any dependency checks, meaning # it will check whatever font files are already built. check: misc/fontbuild checkfont \ $(FONTDIR)/const/*.ttf \ $(FONTDIR)/const/*.otf \ $(FONTDIR)/const/*.woff2 \ $(FONTDIR)/var/*.ttf \ $(FONTDIR)/var/*.woff2 @echo "check: all ok" .PHONY: test check # samples renders PDF and PNG samples samples: $(FONTDIR)/samples all_samples_pdf all_samples_png $(FONTDIR)/samples/%.pdf: $(FONTDIR)/const/%.otf misc/tools/fontsample/fontsample -o "$@" "$<" $(FONTDIR)/samples/%.png: $(FONTDIR)/const/%.otf misc/tools/fontsample/fontsample -o "$@" "$<" $(FONTDIR)/samples: mkdir -p $@ ZD = build/tmp/zip # intermediate zip target that creates a zip file at build/tmp/a.zip build/tmp/a.zip: @rm -rf "$(ZD)" @rm -f build/tmp/a.zip @mkdir -p \ "$(ZD)/Inter (web)" \ "$(ZD)/Inter (web hinted)" \ "$(ZD)/Inter (TTF)" \ "$(ZD)/Inter (TTF hinted)" \ "$(ZD)/Inter (TTF variable)" \ "$(ZD)/Inter (OTF)" @# @# copy font files cp -a $(FONTDIR)/const/*.woff \ $(FONTDIR)/const/*.woff2 \ $(FONTDIR)/var/*.woff2 "$(ZD)/Inter (web)/" cp -a $(FONTDIR)/const-hinted/*.woff \ $(FONTDIR)/const-hinted/*.woff2 \ "$(ZD)/Inter (web hinted)/" cp -a $(FONTDIR)/const/*.ttf "$(ZD)/Inter (TTF)/" cp -a $(FONTDIR)/const-hinted/*.ttf "$(ZD)/Inter (TTF hinted)/" cp -a $(FONTDIR)/var/*.ttf "$(ZD)/Inter (TTF variable)/" cp -a $(FONTDIR)/const/*.otf "$(ZD)/Inter (OTF)/" @# @# copy misc stuff cp -a misc/dist/inter.css "$(ZD)/Inter (web)/" cp -a misc/dist/inter.css "$(ZD)/Inter (web hinted)/" cp -a misc/dist/*.txt "$(ZD)/" cp -a LICENSE.txt "$(ZD)/" @# @# Fix VF metadata misc/tools/fix-vf-meta.py \ "$(ZD)/Inter (web)/Inter-upright.var.woff2" \ "$(ZD)/Inter (web)/Inter-italic.var.woff2" misc/tools/fix-vf-meta.py \ "$(ZD)/Inter (TTF variable)/Inter-upright.var.ttf" \ "$(ZD)/Inter (TTF variable)/Inter-italic.var.ttf" @# @# Add "beta" to Light and Thin filenames. @# Requires "rename" tool in PATH (`brew install rename` on macOS) rename 's/(Light.*|Thin.*)\./$$1-BETA./' "$(ZD)/Inter"*/*.* @# @# zip cd "$(ZD)" && zip -q -X -r "../../../$@" * && cd ../.. @rm -rf "$(ZD)" # load version, used by zip and dist VERSION := $(shell cat version.txt) # distribution zip files ZIP_FILE_DIST := build/release/Inter-${VERSION}.zip # zip build/release/Inter-%.zip: build/tmp/a.zip @mkdir -p "$(shell dirname "$@")" @mv -f "$<" "$@" @echo write "$@" @sh -c "if [ -f /usr/bin/open ]; then /usr/bin/open --reveal '$@'; fi" zip: all $(MAKE) check $(MAKE) build/release/Inter-${VERSION}-$(shell git rev-parse --short=10 HEAD).zip zip_dist: pre_dist $(MAKE) check $(MAKE) ${ZIP_FILE_DIST} .PHONY: zip zip_dist # distribution pre_dist: all @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 dist: zip_dist $(MAKE) -j docs misc/tools/versionize.py @echo "——————————————————————————————————————————————————————————————————" @echo "" @echo "Next steps:" @echo "" @echo "1) Commit & push changes" @echo "" @echo "2) Create new release with ${ZIP_FILE_DIST} at" @echo " https://github.com/rsms/inter/releases/new?tag=v${VERSION}" @echo "" @echo "3) Bump version in version.txt (to the next future version)" @echo "" @echo "——————————————————————————————————————————————————————————————————" docs: docs_fonts $(MAKE) -j docs_info docs_info: docs/_data/fontinfo.json \ docs/_data/glyphinfo.json \ docs/lab/glyphinfo.json \ docs/glyphs/metrics.json docs_fonts: rm -rf docs/font-files mkdir docs/font-files cp -a $(FONTDIR)/const/*.woff \ $(FONTDIR)/const/*.woff2 \ $(FONTDIR)/const/*.otf \ $(FONTDIR)/var/*.* \ docs/font-files/ .PHONY: docs docs_info docs_fonts docs/_data/fontinfo.json: docs/font-files/Inter-Regular.otf misc/tools/fontinfo.py misc/tools/fontinfo.py -pretty $< > docs/_data/fontinfo.json docs/_data/glyphinfo.json: docs/lab/glyphinfo.json cp -a $< $@ docs/lab/glyphinfo.json: build/UnicodeData.txt misc/tools/gen-glyphinfo.py $(Regular_ufo_d) misc/tools/gen-glyphinfo.py -ucd $< src/Inter-Regular.ufo > $@ docs/glyphs/metrics.json: $(Regular_ufo_d) misc/tools/gen-metrics-and-svgs.py misc/tools/gen-metrics-and-svgs.py src/Inter-Regular.ufo # Download latest Unicode data build/UnicodeData.txt: @echo fetch http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt @curl '-#' -o "$@" http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt # install targets install_ttf: all_ttf_const @echo "Installing TTF files locally at ~/Library/Fonts/Inter" rm -rf ~/'Library/Fonts/Inter' mkdir -p ~/'Library/Fonts/Inter' cp -va $(FONTDIR)/const/*.ttf ~/'Library/Fonts/Inter' install_ttf_hinted: all_ttf_hinted @echo "Installing autohinted TTF files locally at ~/Library/Fonts/Inter" rm -rf ~/'Library/Fonts/Inter' mkdir -p ~/'Library/Fonts/Inter' cp -va $(FONTDIR)/const-hinted/*.ttf ~/'Library/Fonts/Inter' install_otf: all_otf @echo "Installing OTF files locally at ~/Library/Fonts/Inter" rm -rf ~/'Library/Fonts/Inter' mkdir -p ~/'Library/Fonts/Inter' cp -va $(FONTDIR)/const/*.otf ~/'Library/Fonts/Inter' install: install_otf # clean removes generated and built fonts in the build directory clean: rm -rvf build/tmp build/fonts .PHONY: all web clean install install_otf install_ttf deploy pre_dist dist geninfo glyphsync