Makefile revision 1.1.1.1 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