186d9c6cdSmaya# common targets:
286d9c6cdSmaya# <no target>, build, ttf-dir: create dedicated dir with TTF files
386d9c6cdSmaya# ttf:                         create export dir with TTF files, track changes
486d9c6cdSmaya# 4web:                        dtto for TTF, WOFF, SVG, and EOT
586d9c6cdSmaya
686d9c6cdSmayaFONTFORGE    = fontforge
786d9c6cdSmayaPYTHON       = python3
886d9c6cdSmayaFONTLINT     = fontlint
986d9c6cdSmaya
1086d9c6cdSmaya# TTF->EOT converters in fallback order
1186d9c6cdSmaya# the first one is canonical choice used in the release process
1286d9c6cdSmayaMKEOT        = mkeot
1386d9c6cdSmaya# URLs to be used for root string within EOT file;
1486d9c6cdSmaya# defaults to "libre roots" that allow usage on any common web page
1586d9c6cdSmayaMKEOT_URLS   = http:// https:// file://
1686d9c6cdSmayaTTF2EOT      = ttf2eot
1786d9c6cdSmayaifneq ($(strip $(shell which $(MKEOT) 2>/dev/null)),)
1886d9c6cdSmaya    make_eot = $(MKEOT) $(1) $(MKEOT_URLS) > $(2)
1986d9c6cdSmayaelse
2086d9c6cdSmaya    ifneq ($(strip $(shell which $(TTF2EOT) 2>/dev/null)),)
2186d9c6cdSmaya        make_eot = $(TTF2EOT) $(1) > $(2)
2286d9c6cdSmaya    else
2386d9c6cdSmaya        make_eot = $(error No tool for TTF->EOT conversion: $(MKEOT), $(TTF2EOT))
2486d9c6cdSmaya    endif
2586d9c6cdSmayaendif
2686d9c6cdSmaya
2786d9c6cdSmayaEXPORTSCRIPT = scripts/fontexport.pe
2886d9c6cdSmayaFONTTOOLSCRIPT = scripts/setisFixedPitch-fonttools.py
2986d9c6cdSmayaSCRIPTS      = $(EXPORTSCRIPT) scripts/sfd2ttf.pe scripts/ttf2sfd.pe
3086d9c6cdSmayaMISCFILES    = AUTHORS ChangeLog LICENSE README.md TODO
3186d9c6cdSmayaSRCDIR       = src
3286d9c6cdSmayaEXPORTDIR    = export
3386d9c6cdSmayaCHECK_PREFIX = check
3486d9c6cdSmaya
3586d9c6cdSmayaVER          = 2.1.1
3686d9c6cdSmayaNAME         = Liberation
3786d9c6cdSmayaVARIANTS     = \
3886d9c6cdSmaya    Mono-Regular       Mono-Bold        Mono-Italic       Mono-BoldItalic       \
3986d9c6cdSmaya    Sans-Regular       Sans-Bold        Sans-Italic       Sans-BoldItalic       \
4086d9c6cdSmaya    Serif-Regular      Serif-Bold       Serif-Italic      Serif-BoldItalic      
4186d9c6cdSmaya
4286d9c6cdSmayaDISTPREFIX     := liberation-fonts-$(VER)
4386d9c6cdSmayaDISTPREFIX_TTF := liberation-fonts-ttf-$(VER)
4486d9c6cdSmayaSFDFILES       := $(addprefix $(SRCDIR)/$(NAME),    $(VARIANTS:=.sfd))
4586d9c6cdSmayaTTFFILES       := $(addprefix $(EXPORTDIR)/$(NAME), $(VARIANTS:=.ttf))
4686d9c6cdSmaya
4786d9c6cdSmaya# keeping backward compatibility for "build"
4886d9c6cdSmayaall build: ttf-dir
4986d9c6cdSmaya
5086d9c6cdSmaya$(EXPORTDIR):
5186d9c6cdSmaya	mkdir -p $@
5286d9c6cdSmaya
5386d9c6cdSmaya# TrueType/OpenType Font, general usage
5486d9c6cdSmaya# - ttf cares about source file changes, using shared EXPORTDIR
5586d9c6cdSmaya# - ttf-dir should be a bit more efficient, creating dedicated dir for TTF
5686d9c6cdSmayaFORMATS = ttf
5786d9c6cdSmayattf-dir:: $(SFDFILES)
5886d9c6cdSmaya	$(FONTFORGE) -script $(EXPORTSCRIPT) -ttf $^
5986d9c6cdSmaya	$(PYTHON) $(FONTTOOLSCRIPT) src/LiberationMono-*.ttf
6086d9c6cdSmaya	mv  src/LiberationMono-Regular-fixed.ttf  src/LiberationMono-Regular.ttf
6186d9c6cdSmaya	mv  src/LiberationMono-Italic-fixed.ttf  src/LiberationMono-Italic.ttf
6286d9c6cdSmaya	mv  src/LiberationMono-Bold-fixed.ttf  src/LiberationMono-Bold.ttf
6386d9c6cdSmaya	mv  src/LiberationMono-BoldItalic-fixed.ttf  src/LiberationMono-BoldItalic.ttf
6486d9c6cdSmaya	mkdir -p $(DISTPREFIX_TTF)
6586d9c6cdSmaya	mv $(addsuffix .ttf,$(basename $^)) $(DISTPREFIX_TTF)
6686d9c6cdSmaya
6786d9c6cdSmaya# web sites usage
6886d9c6cdSmaya# Web Open Font Format (WOFF); for all modern browsers (W3C recommendation)
6986d9c6cdSmayaFORMATS += woff
7086d9c6cdSmaya# SVG Font; only for WebKit and Presto based browsers (Firefox "avoids" it)
7186d9c6cdSmayaFORMATS += svg
7286d9c6cdSmaya# Embedded OpenType (EOT); MSIE only [extra recipe, FontForge can't create EOT]
7386d9c6cdSmayaFORMATS += eot
7486d9c6cdSmayaeot:: $(addprefix $(EXPORTDIR)/$(NAME), $(VARIANTS:=.eot))
7586d9c6cdSmaya	@echo
7686d9c6cdSmaya$(EXPORTDIR)/%.eot: $(EXPORTDIR)/%.ttf | $(EXPORTDIR)
7786d9c6cdSmaya	$(call make_eot,$<,$@)
7886d9c6cdSmaya4web: ttf woff svg eot
7986d9c6cdSmaya
8086d9c6cdSmaya# XXX: declare other formats here if needed (TeX, etc.)
8186d9c6cdSmaya
8286d9c6cdSmaya# default for formats without extra recipes defined above (e.g., not "eot"):
8386d9c6cdSmaya# summary per-format target + single file export for these declared formats
8486d9c6cdSmayadefine FORMAT_template =
8586d9c6cdSmaya$(1):: $$(addprefix $$(EXPORTDIR)/$$(NAME), $$(VARIANTS:=.$(1)))
8686d9c6cdSmaya	@echo
8786d9c6cdSmaya$$(EXPORTDIR)/%.$(1):: $$(SRCDIR)/%.sfd | $$(EXPORTDIR)
8886d9c6cdSmaya	$$(FONTFORGE) -script $$(EXPORTSCRIPT) -$$(lastword $$(subst ., ,$$@)) $$< 2>/dev/null
8986d9c6cdSmaya	mv $$(SRCDIR)/$$(notdir $$@) $$(EXPORTDIR)
9086d9c6cdSmayaendef
9186d9c6cdSmaya$(foreach format,$(FORMATS),$(eval $(call FORMAT_template,$(format))))
9286d9c6cdSmaya
9386d9c6cdSmayadist: clean-dist dist-sfd dist-ttf
9486d9c6cdSmayadist-src: dist-sfd
9586d9c6cdSmaya
9686d9c6cdSmayadist-sfd:: $(SFDFILES)
9786d9c6cdSmaya	tempdir=$$(mktemp -d) \
9886d9c6cdSmaya	  && mkdir -p $${tempdir}/$(DISTPREFIX)/{src,scripts} \
9986d9c6cdSmaya	  && cp Makefile $(MISCFILES) $${tempdir}/$(DISTPREFIX) \
10086d9c6cdSmaya	  && cp $(SFDFILES) $${tempdir}/$(DISTPREFIX)/src \
10186d9c6cdSmaya	  && cp $(SCRIPTS) $(FONTTOOLSCRIPT) $${tempdir}/$(DISTPREFIX)/scripts \
10286d9c6cdSmaya	  && tar Cczvhf $${tempdir} $(DISTPREFIX).tar.gz $(DISTPREFIX) \
10386d9c6cdSmaya	  || echo 'Problem encountered ($@)'; rm -rf -- $${tempdir}
10486d9c6cdSmayadist-ttf: ttf
10586d9c6cdSmaya	$(PYTHON) $(FONTTOOLSCRIPT) export/LiberationMono-*.ttf
10686d9c6cdSmaya	mv  export/LiberationMono-Regular-fixed.ttf  export/LiberationMono-Regular.ttf
10786d9c6cdSmaya	mv  export/LiberationMono-Italic-fixed.ttf  export/LiberationMono-Italic.ttf
10886d9c6cdSmaya	mv  export/LiberationMono-Bold-fixed.ttf  export/LiberationMono-Bold.ttf
10986d9c6cdSmaya	mv  export/LiberationMono-BoldItalic-fixed.ttf  export/LiberationMono-BoldItalic.ttf
11086d9c6cdSmaya	tempdir=$$(mktemp -d) \
11186d9c6cdSmaya	  && mkdir -p $${tempdir}/$(DISTPREFIX_TTF) \
11286d9c6cdSmaya	  && cp $(MISCFILES) $(TTFFILES) $${tempdir}/$(DISTPREFIX_TTF) \
11386d9c6cdSmaya	  && tar Cczvhf $${tempdir} $(DISTPREFIX_TTF).tar.gz $(DISTPREFIX_TTF) \
11486d9c6cdSmaya	  || echo 'Problem encountered ($@)'; rm -rf -- $${tempdir}
11586d9c6cdSmaya# substitute tar line with this if needed:
11686d9c6cdSmaya#	  && zip -j $(DISTPREFIX_TTF).zip $(MISCFILES) $(TTFFILES) \
11786d9c6cdSmaya
11886d9c6cdSmayacheck:
11986d9c6cdSmaya	log="$(CHECK_PREFIX)_$$(git describe --dirty --always 2>/dev/null||date +%Y%m%d)" \
12086d9c6cdSmaya	  && for sfd in $(SFDFILES); do \
12186d9c6cdSmaya	         $(FONTLINT) $${sfd} 2>/dev/null | tee -a $${log}; echo; \
12286d9c6cdSmaya	     done
12386d9c6cdSmaya
12486d9c6cdSmayaclean: clean-dist
12586d9c6cdSmaya	rm -rf -- $(DISTPREFIX)* $(DISTPREFIX_TTF)*
12686d9c6cdSmaya	rm -rf -- $(EXPORTDIR)
12786d9c6cdSmaya	rm -f -- $(CHECK_PREFIX)_*
12886d9c6cdSmayaclean-dist:
12986d9c6cdSmaya	rm -f -- *.tar.gz *.zip
13086d9c6cdSmaya
13186d9c6cdSmaya.PHONY: all build ttf-dir ttf dist dist-src dist-sfd dist-ttf 4web $(FORMATS) check clean clean-dist
132