mirror of
https://github.com/rsms/inter.git
synced 2024-12-26 09:04:06 +03:00
342 lines
11 KiB
Makefile
342 lines
11 KiB
Makefile
# 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
|