[PATCH 5/6] Makefile: restructure for usability and modularity

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Previously, it was rather a shell script than set of recipes
with resource dependencies tracking.

The old targets (should) work as they used to, plus there are new ones:
- make ttf:
  generate TTF files in the "export" dir (which can be overriden from
  command line), utilizing native feature of "make" to generate only
  files the sources of which have changed (useful, e.g., for continuous
  updates tracking)
- make ttf-dir:
  target which "make" and "make down" boil down to, single-shot
  batch generation of TTF file to dedicated directory, i.e., without
  the advantage of dependency-change tracking as with the previous

To handle more universal tasks, new FontForge script was added
as scripts/fontexport.pe (it even contains brief help) and is
integrated on the places as the other ones.

Also .gitignore is extended with "export" dir.

Signed-off-by: Jan Pokorný <jpokorny@xxxxxxxxxx>
---
 source/.gitignore            |    1 +
 source/Makefile              |   99 ++++++++++++++++++++++++++----------------
 source/scripts/fontexport.pe |   22 +++++++++
 3 files changed, 85 insertions(+), 37 deletions(-)
 create mode 100644 source/scripts/fontexport.pe

diff --git a/source/.gitignore b/source/.gitignore
index 0615b11..2b685a5 100644
--- a/source/.gitignore
+++ b/source/.gitignore
@@ -3,5 +3,6 @@
 /*.zip
 # generated subdirectories
 /liberation-fonts-ttf-*/
+/export/
 # logs from check
 /check_*
diff --git a/source/Makefile b/source/Makefile
index ff28e79..995443b 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -1,38 +1,65 @@
-VER = 1.07.2
-#VER = 1.06.0.$(shell date +%Y%m%d)
-FONTFORGE = fontforge
-FONTLINT = fontlint
-
-TMPDIR := $(shell mktemp -d)
-SFDFILES := src/LiberationMono-Bold.sfd src/LiberationMono-BoldItalic.sfd src/LiberationMono-Italic.sfd src/LiberationMono-Regular.sfd src/LiberationSans-Bold.sfd src/LiberationSans-BoldItalic.sfd src/LiberationS
ans-Italic.sfd src/LiberationSans-Regular.sfd src/LiberationSerif-Bold.sfd src/LiberationSerif-BoldItalic.sfd src/LiberationSerif-Italic.sfd src/LiberationSerif-Regular.sfd src/LiberationSansNarrow-Regular.sfd src
/LiberationSansNarrow-Bold.sfd src/LiberationSansNarrow-Italic.sfd src/LiberationSansNarrow-BoldItalic.sfd
-SCRIPTS := scripts/sfd2ttf.pe scripts/ttf2sfd.pe
-MISCFILES := AUTHORS ChangeLog COPYING License.txt README TODO
+FONTFORGE    = fontforge
+FONTLINT     = fontlint
+
+SCRIPTS      = scripts/sfd2ttf.pe scripts/ttf2sfd.pe scripts/fontexport.pe
+MISCFILES    = AUTHORS ChangeLog COPYING License.txt README TODO
+SRCDIR       = src
+EXPORTDIR    = export
 CHECK_PREFIX = check
 
-all: build
+VER          = 1.07.2
+#VER         = 1.06.0.$(shell date +%Y%m%d)
+NAME         = Liberation
+VARIANTS     = \
+    Mono-Regular       Mono-Bold        Mono-Italic       Mono-BoldItalic       \
+    Sans-Regular       Sans-Bold        Sans-Italic       Sans-BoldItalic       \
+    Serif-Regular      Serif-Bold       Serif-Italic      Serif-BoldItalic      \
+    SansNarrow-Regular SansNarrow-Bold  SansNarrow-Italic SansNarrow-BoldItalic
 
-build:
-       $(foreach sfdfile, $(SFDFILES), $(FONTFORGE) -script ./scripts/sfd2ttf.pe $(sfdfile);)
-       mkdir -p liberation-fonts-ttf-$(VER)/
-       mv src/*.ttf liberation-fonts-ttf-$(VER)/
+DISTPREFIX     := liberation-fonts-$(VER)
+DISTPREFIX_TTF := liberation-fonts-ttf-$(VER)
+SFDFILES       := $(addprefix $(SRCDIR)/$(NAME),    $(VARIANTS:=.sfd))
+TTFFILES       := $(addprefix $(EXPORTDIR)/$(NAME), $(VARIANTS:=.ttf))
 
-dist: dist-sfd dist-ttf
+# keeping backward compatibility for "build"
+all build: ttf-dir
 
-dist-src: dist-sfd
+$(EXPORTDIR):
+       mkdir -p $@
 
-dist-sfd:
-       mkdir -p $(TMPDIR)/liberation-fonts-$(VER)/{src,scripts}
-       cp Makefile $(MISCFILES) $(TMPDIR)/liberation-fonts-$(VER)/
-       cp $(SFDFILES) $(TMPDIR)/liberation-fonts-$(VER)/src/
-       cp $(SCRIPTS) $(TMPDIR)/liberation-fonts-$(VER)/scripts/
-       tar Cczvhf $(TMPDIR)/ liberation-fonts-$(VER).tar.gz \
-         liberation-fonts-$(VER)/
+# TrueType/OpenType Font, general usage
+# - ttf cares about source file changes, using shared EXPORTDIR
+# - ttf-dir should be a bit more efficient, creating dedicated dir for TTF
+ttf: $(EXPORTDIR) $(TTFFILES)
+ttf-dir:: $(SFDFILES)
+       $(FONTFORGE) -script ./scripts/fontexport.pe -ttf $^
+       mkdir -p $(DISTPREFIX_TTF)
+       mv $(addsuffix .ttf,$(basename $^)) $(DISTPREFIX_TTF)
 
-dist-ttf: clean-ttf build
-       cp $(MISCFILES) liberation-fonts-ttf-$(VER)/
-       tar czvhf liberation-fonts-ttf-$(VER).tar.gz liberation-fonts-ttf-$(VER)/
-#      zip -j liberation-fonts-ttf-$(VER).zip liberation-fonts-ttf-$(VER)/*
-       rm -rf liberation-fonts-ttf-$(VER)
+# single file export (primarily used by other targets)
+$(EXPORTDIR)/%.ttf:: $(SRCDIR)/%.sfd
+       $(FONTFORGE) -script ./scripts/fontexport.pe -$(lastword $(subst ., ,$@)) $<
+       mv $(SRCDIR)/$(notdir $@) $(EXPORTDIR)
+
+dist: clean-dist dist-sfd dist-ttf
+dist-src: dist-sfd
+
+dist-sfd:: $(SFDFILES)
+       tempdir=$$(mktemp -d) \
+         && mkdir -p $${tempdir}/$(DISTPREFIX)/{src,scripts} \
+         && cp Makefile $(MISCFILES) $${tempdir}/$(DISTPREFIX) \
+         && cp $(SFDFILES) $${tempdir}/$(DISTPREFIX)/src \
+         && cp $(SCRIPTS) $${tempdir}/$(DISTPREFIX)/scripts \
+         && tar Cczvhf $${tempdir} $(DISTPREFIX).tar.gz $(DISTPREFIX) \
+         || echo 'Problem encountered ($@)'; rm -rf -- $${tempdir}
+dist-ttf: ttf
+       tempdir=$$(mktemp -d) \
+         && mkdir -p $${tempdir}/$(DISTPREFIX_TTF) \
+         && cp $(MISCFILES) $(TTFFILES) $${tempdir}/$(DISTPREFIX_TTF) \
+         && tar Cczvhf $${tempdir} $(DISTPREFIX_TTF).tar.gz $(DISTPREFIX_TTF) \
+         || echo 'Problem encountered ($@)'; rm -rf -- $${tempdir}
+# substitute tar line with this if needed:
+#        && zip -j $(DISTPREFIX_TTF).zip $(MISCFILES) $(TTFFILES) \
 
 check:
        log="$(CHECK_PREFIX)_$$(git describe --dirty --always 2>/dev/null||date +%Y%m%d)" \
@@ -40,13 +67,11 @@ check:
                 $(FONTLINT) $${sfd} 2>/dev/null | tee -a $${log}; echo; \
             done
 
-clean: clean-ttf clean-src
-       rm -f $(CHECK_PREFIX)_*
-
-clean-ttf:
-       rm -rf liberation-fonts-*
-
-clean-src:
-       rm -f *.tar.gz
+clean: clean-dist
+       rm -rf -- $(DISTPREFIX)* $(DISTPREFIX_TTF)*
+       rm -rf -- $(EXPORTDIR)
+       rm -f -- $(CHECK_PREFIX)_*
+clean-dist:
+       rm -f -- *.tar.gz *.zip
 
-.PHONY: all build dist dist-src dist-sfd dist-ttf check clean clean-ttf clean-src
+.PHONY: all build ttf-dir ttf dist dist-src dist-sfd dist-ttf check clean clean-dist
diff --git a/source/scripts/fontexport.pe b/source/scripts/fontexport.pe
new file mode 100644
index 0000000..031cf08
--- /dev/null
+++ b/source/scripts/fontexport.pe
@@ -0,0 +1,22 @@
+# FontForge script to export font file(s) in selectable format
+# TODO: 0x800 fmflags only for TTF?
+
+if ($argc <= 1)
+    Print("usage: script [-<format>] file1 ...")
+    Print("(default format is ttf)")
+    return(1)
+endif
+
+format = "ttf"
+if (Strstr($1, "-") == 0)
+    format = Strsub($1, 1)
+    shift
+endif
+while ($argc > 1)
+    Print("Generating " + format  + " from " + $1)
+    Open($1)
+    Generate($1:r + "." + format, "", 0x800)
+    Close()
+    Print("")
+    shift
+endloop
-- 
_______________________________________________
fonts mailing list
fonts@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/fonts
http://fonts.fedoraproject.org/



[Index of Archives]     [Fedora Users]     [Font Configuration]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite Forum]     [KDE Users]

  Powered by Linux