1 # common targets: 2 # <no target>, build, ttf-dir: create dedicated dir with TTF files 3 # ttf: create export dir with TTF files, track changes 4 # 4web: dtto for TTF, WOFF, SVG, and EOT 5 6 FONTFORGE = fontforge 7 PYTHON = python3 8 FONTLINT = fontlint 9 10 # TTF->EOT converters in fallback order 11 # the first one is canonical choice used in the release process 12 MKEOT = mkeot 13 # URLs to be used for root string within EOT file; 14 # defaults to "libre roots" that allow usage on any common web page 15 MKEOT_URLS = http:// https:// file:// 16 TTF2EOT = ttf2eot 17 ifneq ($(strip $(shell which $(MKEOT) 2>/dev/null)),) 18 make_eot = $(MKEOT) $(1) $(MKEOT_URLS) > $(2) 19 else 20 ifneq ($(strip $(shell which $(TTF2EOT) 2>/dev/null)),) 21 make_eot = $(TTF2EOT) $(1) > $(2) 22 else 23 make_eot = $(error No tool for TTF->EOT conversion: $(MKEOT), $(TTF2EOT)) 24 endif 25 endif 26 27 EXPORTSCRIPT = scripts/fontexport.pe 28 FONTTOOLSCRIPT = scripts/setisFixedPitch-fonttools.py 29 SCRIPTS = $(EXPORTSCRIPT) scripts/sfd2ttf.pe scripts/ttf2sfd.pe 30 MISCFILES = AUTHORS ChangeLog LICENSE README.md TODO 31 SRCDIR = src 32 EXPORTDIR = export 33 CHECK_PREFIX = check 34 35 VER = 2.1.1 36 NAME = Liberation 37 VARIANTS = \ 38 Mono-Regular Mono-Bold Mono-Italic Mono-BoldItalic \ 39 Sans-Regular Sans-Bold Sans-Italic Sans-BoldItalic \ 40 Serif-Regular Serif-Bold Serif-Italic Serif-BoldItalic 41 42 DISTPREFIX := liberation-fonts-$(VER) 43 DISTPREFIX_TTF := liberation-fonts-ttf-$(VER) 44 SFDFILES := $(addprefix $(SRCDIR)/$(NAME), $(VARIANTS:=.sfd)) 45 TTFFILES := $(addprefix $(EXPORTDIR)/$(NAME), $(VARIANTS:=.ttf)) 46 47 # keeping backward compatibility for "build" 48 all build: ttf-dir 49 50 $(EXPORTDIR): 51 mkdir -p $@ 52 53 # TrueType/OpenType Font, general usage 54 # - ttf cares about source file changes, using shared EXPORTDIR 55 # - ttf-dir should be a bit more efficient, creating dedicated dir for TTF 56 FORMATS = ttf 57 ttf-dir:: $(SFDFILES) 58 $(FONTFORGE) -script $(EXPORTSCRIPT) -ttf $^ 59 $(PYTHON) $(FONTTOOLSCRIPT) src/LiberationMono-*.ttf 60 mv src/LiberationMono-Regular-fixed.ttf src/LiberationMono-Regular.ttf 61 mv src/LiberationMono-Italic-fixed.ttf src/LiberationMono-Italic.ttf 62 mv src/LiberationMono-Bold-fixed.ttf src/LiberationMono-Bold.ttf 63 mv src/LiberationMono-BoldItalic-fixed.ttf src/LiberationMono-BoldItalic.ttf 64 mkdir -p $(DISTPREFIX_TTF) 65 mv $(addsuffix .ttf,$(basename $^)) $(DISTPREFIX_TTF) 66 67 # web sites usage 68 # Web Open Font Format (WOFF); for all modern browsers (W3C recommendation) 69 FORMATS += woff 70 # SVG Font; only for WebKit and Presto based browsers (Firefox "avoids" it) 71 FORMATS += svg 72 # Embedded OpenType (EOT); MSIE only [extra recipe, FontForge can't create EOT] 73 FORMATS += eot 74 eot:: $(addprefix $(EXPORTDIR)/$(NAME), $(VARIANTS:=.eot)) 75 @echo 76 $(EXPORTDIR)/%.eot: $(EXPORTDIR)/%.ttf | $(EXPORTDIR) 77 $(call make_eot,$<,$@) 78 4web: ttf woff svg eot 79 80 # XXX: declare other formats here if needed (TeX, etc.) 81 82 # default for formats without extra recipes defined above (e.g., not "eot"): 83 # summary per-format target + single file export for these declared formats 84 define FORMAT_template = 85 $(1):: $$(addprefix $$(EXPORTDIR)/$$(NAME), $$(VARIANTS:=.$(1))) 86 @echo 87 $$(EXPORTDIR)/%.$(1):: $$(SRCDIR)/%.sfd | $$(EXPORTDIR) 88 $$(FONTFORGE) -script $$(EXPORTSCRIPT) -$$(lastword $$(subst ., ,$$@)) $$< 2>/dev/null 89 mv $$(SRCDIR)/$$(notdir $$@) $$(EXPORTDIR) 90 endef 91 $(foreach format,$(FORMATS),$(eval $(call FORMAT_template,$(format)))) 92 93 dist: clean-dist dist-sfd dist-ttf 94 dist-src: dist-sfd 95 96 dist-sfd:: $(SFDFILES) 97 tempdir=$$(mktemp -d) \ 98 && mkdir -p $${tempdir}/$(DISTPREFIX)/{src,scripts} \ 99 && cp Makefile $(MISCFILES) $${tempdir}/$(DISTPREFIX) \ 100 && cp $(SFDFILES) $${tempdir}/$(DISTPREFIX)/src \ 101 && cp $(SCRIPTS) $(FONTTOOLSCRIPT) $${tempdir}/$(DISTPREFIX)/scripts \ 102 && tar Cczvhf $${tempdir} $(DISTPREFIX).tar.gz $(DISTPREFIX) \ 103 || echo 'Problem encountered ($@)'; rm -rf -- $${tempdir} 104 dist-ttf: ttf 105 $(PYTHON) $(FONTTOOLSCRIPT) export/LiberationMono-*.ttf 106 mv export/LiberationMono-Regular-fixed.ttf export/LiberationMono-Regular.ttf 107 mv export/LiberationMono-Italic-fixed.ttf export/LiberationMono-Italic.ttf 108 mv export/LiberationMono-Bold-fixed.ttf export/LiberationMono-Bold.ttf 109 mv export/LiberationMono-BoldItalic-fixed.ttf export/LiberationMono-BoldItalic.ttf 110 tempdir=$$(mktemp -d) \ 111 && mkdir -p $${tempdir}/$(DISTPREFIX_TTF) \ 112 && cp $(MISCFILES) $(TTFFILES) $${tempdir}/$(DISTPREFIX_TTF) \ 113 && tar Cczvhf $${tempdir} $(DISTPREFIX_TTF).tar.gz $(DISTPREFIX_TTF) \ 114 || echo 'Problem encountered ($@)'; rm -rf -- $${tempdir} 115 # substitute tar line with this if needed: 116 # && zip -j $(DISTPREFIX_TTF).zip $(MISCFILES) $(TTFFILES) \ 117 118 check: 119 log="$(CHECK_PREFIX)_$$(git describe --dirty --always 2>/dev/null||date +%Y%m%d)" \ 120 && for sfd in $(SFDFILES); do \ 121 $(FONTLINT) $${sfd} 2>/dev/null | tee -a $${log}; echo; \ 122 done 123 124 clean: clean-dist 125 rm -rf -- $(DISTPREFIX)* $(DISTPREFIX_TTF)* 126 rm -rf -- $(EXPORTDIR) 127 rm -f -- $(CHECK_PREFIX)_* 128 clean-dist: 129 rm -f -- *.tar.gz *.zip 130 131 .PHONY: all build ttf-dir ttf dist dist-src dist-sfd dist-ttf 4web $(FORMATS) check clean clean-dist 132