tooling: simplify makefile by updating PATH (which is broken in macOS "make", so require GNU make on macOS)

This commit is contained in:
Rasmus Andersson 2024-11-18 18:08:02 -08:00
parent 41ce65bf84
commit 9bdd60c3a9

View file

@ -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))/..) SRCDIR := $(abspath $(lastword $(MAKEFILE_LIST))/..)
FONTDIR := build/fonts FONTDIR := build/fonts
UFODIR := build/ufo UFODIR := build/ufo
BIN := $(SRCDIR)/build/venv/bin VENVDIR := $(SRCDIR)/build/venv
VENV := build/venv/bin/activate
VERSION := $(shell cat version.txt) VERSION := $(shell cat version.txt)
MAKEFILE := $(lastword $(MAKEFILE_LIST)) MAKEFILE := $(lastword $(MAKEFILE_LIST))
export PATH := $(BIN):$(PATH) export PATH := $(VENVDIR)/bin:$(PATH)
export VIRTUAL_ENV := $(VENVDIR)
default: all default: all
@ -21,7 +24,7 @@ endif
# intermediate sources # intermediate sources
$(UFODIR)/%.glyphs: src/%.glyphspackage | $(UFODIR) venv $(UFODIR)/%.glyphs: src/%.glyphspackage | $(UFODIR) venv
. $(VENV) ; build/venv/bin/glyphspkg -o $(dir $@) $^ glyphspkg -o $(dir $@) $^
# features # features
build/features_data: $(UFODIR)/features $(wildcard src/features/*) build/features_data: $(UFODIR)/features $(wildcard src/features/*)
@ -33,31 +36,31 @@ $(UFODIR)/features:
# designspace & master UFOs # designspace & master UFOs
$(UFODIR)/%.var.designspace: $(UFODIR)/%.designspace misc/tools/gen-var-designspace.py | venv $(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 $(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) --master-dir $(UFODIR) --instance-dir $(UFODIR)
. $(VENV) ; python misc/tools/postprocess-designspace.py $@ python misc/tools/postprocess-designspace.py $@
# instance UFOs from designspace # instance UFOs from designspace
$(UFODIR)/Inter%Italic.ufo: $(UFODIR)/Inter-Italic.designspace misc/tools/gen-instance-ufo.sh | venv $(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 $(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) # designspace & master UFOs (for editing)
build/ufo-editable/%.designspace: $(UFODIR)/%.glyphs $(UFODIR)/features misc/tools/postprocess-designspace.py | venv build/ufo-editable/%.designspace: $(UFODIR)/%.glyphs $(UFODIR)/features misc/tools/postprocess-designspace.py | venv
@mkdir -p $(dir $@) @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 $@) --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) # 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 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 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 editable-ufos: build/ufo-editable/.ok
@echo "Editable designspace & UFOs can be found here:" @echo "Editable designspace & UFOs can be found here:"
@ -162,61 +165,61 @@ endif
$(FONTDIR)/static/%.otf: $(UFODIR)/%.ufo build/features_data | $(FONTDIR)/static venv $(FONTDIR)/static/%.otf: $(UFODIR)/%.ufo build/features_data | $(FONTDIR)/static venv
. $(VENV) ; fontmake -u $< -o otf --output-path $@.tmp.otf $(FM_ARGS_2) fontmake -u $< -o otf --output-path $@.tmp.otf $(FM_ARGS_2)
. $(VENV) ; psautohint -o $@ $@.tmp.otf psautohint -o $@ $@.tmp.otf
@rm $@.tmp.otf @rm $@.tmp.otf
$(FONTDIR)/static/%.ttf: $(UFODIR)/%.ufo build/features_data | $(FONTDIR)/static venv $(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 AUTOHINT_ARGS := --stem-width-mode=qqq --no-info
$(FONTDIR)/static-hinted/Inter-Regular.ttf: $(FONTDIR)/static/Inter-Regular.ttf | $(FONTDIR)/static-hinted venv $(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 $(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 $(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 $(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 $(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 "$<" "$@" --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 $(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 "$<" "$@" --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 $(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 "$<" "$@" --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 $(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 "$<" "$@" --reference $(FONTDIR)/static-hinted/Inter-Regular.ttf "$<" "$@"
$(FONTDIR)/var/.%.var.ttf: $(UFODIR)/%.var.designspace build/features_data | $(FONTDIR)/var venv $(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 $(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 %.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 $(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 $(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: $(FONTDIR)/static:
@ -234,12 +237,12 @@ var: \
$(FONTDIR)/var/InterVariable-Italic.ttf $(FONTDIR)/var/InterVariable-Italic.ttf
googlefonts: var googlefonts: var
. $(VENV) ; gftools fix-family $(FONTDIR)/var/*.ttf \ gftools fix-family $(FONTDIR)/var/*.ttf \
--rename-family "Inter" \ --rename-family "Inter" \
--include-source-fixes \ --include-source-fixes \
-o $(FONTDIR)/googlefonts; -o $(FONTDIR)/googlefonts;
. $(VENV) ; gftools fontsetter $(FONTDIR)/googlefonts/Inter[opsz,wght].ttf src/googlefonts-fixes.yaml -o $(FONTDIR)/googlefonts/Inter[opsz,wght].ttf; 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-Italic[opsz,wght].ttf src/googlefonts-fixes.yaml -o $(FONTDIR)/googlefonts/Inter-Italic[opsz,wght].ttf;
var_web: \ var_web: \
$(FONTDIR)/var/InterVariable.woff2 \ $(FONTDIR)/var/InterVariable.woff2 \
@ -297,10 +300,10 @@ STATIC_FONTS_WEB := $(patsubst %,$(FONTDIR)/static/%.woff2,$(STATIC_FONTS))
STATIC_FONTS_WEB_HINTED := $(patsubst %,$(FONTDIR)/static-hinted/%.woff2,$(STATIC_FONTS)) STATIC_FONTS_WEB_HINTED := $(patsubst %,$(FONTDIR)/static-hinted/%.woff2,$(STATIC_FONTS))
$(FONTDIR)/static/Inter.otc: $(STATIC_FONTS_OTF) $(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) $(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_otf: $(STATIC_FONTS_OTF)
static_ttf: $(STATIC_FONTS_TTF) static_ttf: $(STATIC_FONTS_TTF)
@ -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 build/fontbakery-report-var.txt: $(FONTDIR)/var/InterVariable.ttf $(FONTDIR)/var/InterVariable-Italic.ttf | venv
@echo "fontbakery InterVariable -> $(@) ..." @echo "fontbakery InterVariable -> $(@) ..."
@. $(VENV) ; fontbakery $(FBAKE_ARGS) $^ > $@ \ @fontbakery $(FBAKE_ARGS) $^ > $@ \
|| (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1) || (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1)
@echo "fontbakery InterVariable: PASS" @echo "fontbakery InterVariable: PASS"
@grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g' @grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g'
build/fontbakery-report-text.txt: $(STATIC_TEXT_FONTS_TTF) | venv build/fontbakery-report-text.txt: $(STATIC_TEXT_FONTS_TTF) | venv
@echo "fontbakery Inter -> $@ ..." @echo "fontbakery Inter -> $@ ..."
@. $(VENV) ; fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \ @fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \
|| (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1) || (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1)
@echo "fontbakery Inter: PASS" @echo "fontbakery Inter: PASS"
@grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g' @grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g'
build/fontbakery-report-display.txt: $(STATIC_DISPLAY_FONTS_TTF) | venv build/fontbakery-report-display.txt: $(STATIC_DISPLAY_FONTS_TTF) | venv
@echo "fontbakery InterDisplay -> $@ ..." @echo "fontbakery InterDisplay -> $@ ..."
@. $(VENV) ; fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \ @fontbakery $(FBAKE_ARGS_STATIC) $^ > $@ \
|| (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1) || (cat $@; echo "report at $@"; touch -m -t 199001010000 $@; exit 1)
@echo "fontbakery InterDisplay: PASS" @echo "fontbakery InterDisplay: PASS"
@grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g' @grep -E -A7 '^Total:' $@ | tail -6 | sed -E 's/^ +/ /g'
@ -589,20 +592,20 @@ list:
# --------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------
# initialize toolchain # 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 @mkdir -p build
[ ! -f build/venv/config.stamp ] || rm -rf build/venv [ ! -f "$(VENVDIR)/config.stamp" ] || rm -rf "$(VENVDIR)"
[ -d build/venv ] || python3 -m venv build/venv [ -d "$(VENVDIR)" ] || python3 -m venv "$(VENVDIR)"
. $(VENV) ; pip install pipenv==2023.8.28 pip install pipenv==2023.8.28
. $(VENV) ; pipenv install pipenv install
touch $@ touch $@
venv-update: venv-update:
. $(VENV) ; pipenv update pipenv update
reset: clean reset: clean
rm -rf build/venv rm -rf "$(VENVDIR)"
.PHONY: venv venv-update reset .PHONY: venv venv-update reset