Skip to content

Commit

Permalink
tooling: simplify makefile by updating PATH (which is broken in macOS…
Browse files Browse the repository at this point in the history
… "make", so require GNU make on macOS)
  • Loading branch information
rsms committed Nov 19, 2024
1 parent 41ce65b commit 9bdd60c
Showing 1 changed file with 49 additions and 46 deletions.
95 changes: 49 additions & 46 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
# List all targets with 'make list'
ifeq ($(findstring Darwin./Applications/,$(shell uname -s).$(MAKE)),Darwin./Applications/)
$(error Use "gmake" (not "make") on macos. Install with "brew install make")
endif

SRCDIR := $(abspath $(lastword $(MAKEFILE_LIST))/..)
FONTDIR := build/fonts
UFODIR := build/ufo
BIN := $(SRCDIR)/build/venv/bin
VENV := build/venv/bin/activate
VENVDIR := $(SRCDIR)/build/venv
VERSION := $(shell cat version.txt)
MAKEFILE := $(lastword $(MAKEFILE_LIST))

export PATH := $(BIN):$(PATH)
export PATH := $(VENVDIR)/bin:$(PATH)
export VIRTUAL_ENV := $(VENVDIR)

default: all

Expand All @@ -21,7 +24,7 @@ endif
# intermediate sources

$(UFODIR)/%.glyphs: src/%.glyphspackage | $(UFODIR) venv
. $(VENV) ; build/venv/bin/glyphspkg -o $(dir $@) $^
glyphspkg -o $(dir $@) $^

# features
build/features_data: $(UFODIR)/features $(wildcard src/features/*)
Expand All @@ -33,31 +36,31 @@ $(UFODIR)/features:

# designspace & master UFOs
$(UFODIR)/%.var.designspace: $(UFODIR)/%.designspace misc/tools/gen-var-designspace.py | venv
. $(VENV) ; python misc/tools/gen-var-designspace.py $< $@
python misc/tools/gen-var-designspace.py $< $@

$(UFODIR)/%.designspace: $(UFODIR)/%.glyphs $(UFODIR)/features misc/tools/postprocess-designspace.py | venv
. $(VENV) ; fontmake $(FM_ARGS) -o ufo -g $< --designspace-path $@ \
fontmake $(FM_ARGS) -o ufo -g $< --designspace-path $@ \
--master-dir $(UFODIR) --instance-dir $(UFODIR)
. $(VENV) ; python misc/tools/postprocess-designspace.py $@
python misc/tools/postprocess-designspace.py $@

# instance UFOs from designspace
$(UFODIR)/Inter%Italic.ufo: $(UFODIR)/Inter-Italic.designspace misc/tools/gen-instance-ufo.sh | venv
. $(VENV) ; bash misc/tools/gen-instance-ufo.sh $< $@
bash misc/tools/gen-instance-ufo.sh $< $@
$(UFODIR)/Inter%.ufo: $(UFODIR)/Inter-Roman.designspace misc/tools/gen-instance-ufo.sh | venv
. $(VENV) ; bash misc/tools/gen-instance-ufo.sh $< $@
bash misc/tools/gen-instance-ufo.sh $< $@

# designspace & master UFOs (for editing)
build/ufo-editable/%.designspace: $(UFODIR)/%.glyphs $(UFODIR)/features misc/tools/postprocess-designspace.py | venv
@mkdir -p $(dir $@)
. $(VENV) ; fontmake $(FM_ARGS) -o ufo -g $< --designspace-path $@ \
fontmake $(FM_ARGS) -o ufo -g $< --designspace-path $@ \
--master-dir $(dir $@) --instance-dir $(dir $@)
. $(VENV) ; python misc/tools/postprocess-designspace.py --editable $@
python misc/tools/postprocess-designspace.py --editable $@

# instance UFOs from designspace (for editing)
build/ufo-editable/Inter%Italic.ufo: build/ufo-editable/Inter-Italic.designspace misc/tools/gen-instance-ufo.sh | venv
. $(VENV) ; bash misc/tools/gen-instance-ufo.sh $< $@
bash misc/tools/gen-instance-ufo.sh $< $@
build/ufo-editable/Inter%.ufo: build/ufo-editable/Inter-Roman.designspace misc/tools/gen-instance-ufo.sh | venv
. $(VENV) ; bash misc/tools/gen-instance-ufo.sh $< $@
bash misc/tools/gen-instance-ufo.sh $< $@

editable-ufos: build/ufo-editable/.ok
@echo "Editable designspace & UFOs can be found here:"
Expand Down Expand Up @@ -162,61 +165,61 @@ endif


$(FONTDIR)/static/%.otf: $(UFODIR)/%.ufo build/features_data | $(FONTDIR)/static venv
. $(VENV) ; fontmake -u $< -o otf --output-path $@.tmp.otf $(FM_ARGS_2)
. $(VENV) ; psautohint -o $@ $@.tmp.otf
fontmake -u $< -o otf --output-path $@.tmp.otf $(FM_ARGS_2)
psautohint -o $@ $@.tmp.otf
@rm $@.tmp.otf

$(FONTDIR)/static/%.ttf: $(UFODIR)/%.ufo build/features_data | $(FONTDIR)/static venv
. $(VENV) ; fontmake -u $< -o ttf --output-path $@ $(FM_ARGS_2)
fontmake -u $< -o ttf --output-path $@ $(FM_ARGS_2)


AUTOHINT_ARGS := --stem-width-mode=qqq --no-info

$(FONTDIR)/static-hinted/Inter-Regular.ttf: $(FONTDIR)/static/Inter-Regular.ttf | $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"
python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"

$(FONTDIR)/static-hinted/InterDisplay-Regular.ttf: $(FONTDIR)/static/InterDisplay-Regular.ttf | $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"
python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"

$(FONTDIR)/static-hinted/Inter-Italic.ttf: $(FONTDIR)/static/Inter-Italic.ttf | $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"
python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"

$(FONTDIR)/static-hinted/InterDisplay-Italic.ttf: $(FONTDIR)/static/InterDisplay-Italic.ttf | $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"
python -m ttfautohint $(AUTOHINT_ARGS) "$<" "$@"

$(FONTDIR)/static-hinted/InterDisplay-%Italic.ttf: $(FONTDIR)/static/InterDisplay-%Italic.ttf | $(FONTDIR)/static-hinted/InterDisplay-Italic.ttf $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) \
python -m ttfautohint $(AUTOHINT_ARGS) \
--reference $(FONTDIR)/static-hinted/InterDisplay-Italic.ttf "$<" "$@"

$(FONTDIR)/static-hinted/InterDisplay-%.ttf: $(FONTDIR)/static/InterDisplay-%.ttf | $(FONTDIR)/static-hinted/InterDisplay-Regular.ttf $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) \
python -m ttfautohint $(AUTOHINT_ARGS) \
--reference $(FONTDIR)/static-hinted/InterDisplay-Regular.ttf "$<" "$@"

$(FONTDIR)/static-hinted/Inter-%Italic.ttf: $(FONTDIR)/static/Inter-%Italic.ttf | $(FONTDIR)/static-hinted/Inter-Italic.ttf $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) \
python -m ttfautohint $(AUTOHINT_ARGS) \
--reference $(FONTDIR)/static-hinted/Inter-Italic.ttf "$<" "$@"

$(FONTDIR)/static-hinted/Inter-%.ttf: $(FONTDIR)/static/Inter-%.ttf | $(FONTDIR)/static-hinted/Inter-Regular.ttf $(FONTDIR)/static-hinted venv
. $(VENV) ; python -m ttfautohint $(AUTOHINT_ARGS) \
python -m ttfautohint $(AUTOHINT_ARGS) \
--reference $(FONTDIR)/static-hinted/Inter-Regular.ttf "$<" "$@"


$(FONTDIR)/var/.%.var.ttf: $(UFODIR)/%.var.designspace build/features_data | $(FONTDIR)/var venv
. $(VENV) ; fontmake -o variable -m $< --output-path $@ $(FM_ARGS_2)
fontmake -o variable -m $< --output-path $@ $(FM_ARGS_2)

$(FONTDIR)/var/.%.var.otf: $(UFODIR)/%.var.designspace build/features_data | $(FONTDIR)/var venv
. $(VENV) ; fontmake -o variable-cff2 -m $< --output-path $@ $(FM_ARGS_2)
fontmake -o variable-cff2 -m $< --output-path $@ $(FM_ARGS_2)


%.woff2: %.ttf | venv
. $(VENV) ; misc/tools/woff2 compress -o "$@" "$<"
misc/tools/woff2 compress -o "$@" "$<"


$(FONTDIR)/var/InterVariable.ttf: $(FONTDIR)/var/.Inter-Roman.var.ttf misc/tools/bake-vf.py
. $(VENV) ; python misc/tools/bake-vf.py $< -o $@
python misc/tools/bake-vf.py $< -o $@

$(FONTDIR)/var/InterVariable-Italic.ttf: $(FONTDIR)/var/.Inter-Italic.var.ttf misc/tools/bake-vf.py
. $(VENV) ; python misc/tools/bake-vf.py $< -o $@
python misc/tools/bake-vf.py $< -o $@


$(FONTDIR)/static:
Expand All @@ -234,12 +237,12 @@ var: \
$(FONTDIR)/var/InterVariable-Italic.ttf

googlefonts: var
. $(VENV) ; gftools fix-family $(FONTDIR)/var/*.ttf \
gftools fix-family $(FONTDIR)/var/*.ttf \
--rename-family "Inter" \
--include-source-fixes \
-o $(FONTDIR)/googlefonts;
. $(VENV) ; gftools fontsetter $(FONTDIR)/googlefonts/Inter[opsz,wght].ttf src/googlefonts-fixes.yaml -o $(FONTDIR)/googlefonts/Inter[opsz,wght].ttf;
. $(VENV) ; gftools fontsetter $(FONTDIR)/googlefonts/Inter-Italic[opsz,wght].ttf src/googlefonts-fixes.yaml -o $(FONTDIR)/googlefonts/Inter-Italic[opsz,wght].ttf;
gftools fontsetter $(FONTDIR)/googlefonts/Inter[opsz,wght].ttf src/googlefonts-fixes.yaml -o $(FONTDIR)/googlefonts/Inter[opsz,wght].ttf;
gftools fontsetter $(FONTDIR)/googlefonts/Inter-Italic[opsz,wght].ttf src/googlefonts-fixes.yaml -o $(FONTDIR)/googlefonts/Inter-Italic[opsz,wght].ttf;

var_web: \
$(FONTDIR)/var/InterVariable.woff2 \
Expand Down Expand Up @@ -297,10 +300,10 @@ STATIC_FONTS_WEB := $(patsubst %,$(FONTDIR)/static/%.woff2,$(STATIC_FONTS))
STATIC_FONTS_WEB_HINTED := $(patsubst %,$(FONTDIR)/static-hinted/%.woff2,$(STATIC_FONTS))

$(FONTDIR)/static/Inter.otc: $(STATIC_FONTS_OTF)
. $(VENV) ; python -m fontTools.ttLib.__main__ -o $@ $^
python -m fontTools.ttLib.__main__ -o $@ $^

$(FONTDIR)/static-hinted/Inter.ttc: $(STATIC_FONTS_TTF)
. $(VENV) ; python -m fontTools.ttLib.__main__ -o $@ $^
python -m fontTools.ttLib.__main__ -o $@ $^

static_otf: $(STATIC_FONTS_OTF)
static_ttf: $(STATIC_FONTS_TTF)
Expand Down Expand Up @@ -381,21 +384,21 @@ STATIC_DISPLAY_FONTS_TTF = $(patsubst %,$(FONTDIR)/static-hinted/%.ttf,$(STATIC_

build/fontbakery-report-var.txt: $(FONTDIR)/var/InterVariable.ttf $(FONTDIR)/var/InterVariable-Italic.ttf | venv
@echo "fontbakery InterVariable -> $(@) ..."
@. $(VENV) ; fontbakery $(FBAKE_ARGS) $^ > $@ \
@fontbakery $(FBAKE_ARGS) $^ > $@ \
|| (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1)
@echo "fontbakery InterVariable: PASS"
@grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g'

build/fontbakery-report-text.txt: $(STATIC_TEXT_FONTS_TTF) | venv
@echo "fontbakery Inter -> $@ ..."
@. $(VENV) ; fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \
@fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \
|| (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1)
@echo "fontbakery Inter: PASS"
@grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g'

build/fontbakery-report-display.txt: $(STATIC_DISPLAY_FONTS_TTF) | venv
@echo "fontbakery InterDisplay -> $@ ..."
@. $(VENV) ; fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \
@fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \
|| (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1)
@echo "fontbakery InterDisplay: PASS"
@grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g'
Expand Down Expand Up @@ -589,20 +592,20 @@ list:
# ---------------------------------------------------------------------------------
# initialize toolchain

venv: build/venv/config2.stamp
venv: $(VENVDIR)/config2.stamp

build/venv/config2.stamp: Pipfile.lock Pipfile
$(VENVDIR)/config2.stamp: Pipfile.lock Pipfile
@mkdir -p build
[ ! -f build/venv/config.stamp ] || rm -rf build/venv
[ -d build/venv ] || python3 -m venv build/venv
. $(VENV) ; pip install pipenv==2023.8.28
. $(VENV) ; pipenv install
[ ! -f "$(VENVDIR)/config.stamp" ] || rm -rf "$(VENVDIR)"
[ -d "$(VENVDIR)" ] || python3 -m venv "$(VENVDIR)"
pip install pipenv==2023.8.28
pipenv install
touch $@

venv-update:
. $(VENV) ; pipenv update
pipenv update

reset: clean
rm -rf build/venv
rm -rf "$(VENVDIR)"

.PHONY: venv venv-update reset

0 comments on commit 9bdd60c

Please sign in to comment.