diff options
author | Julien Rioux <julien.rioux@gmail.com> | 2013-09-08 18:01:13 +0200 |
---|---|---|
committer | Julien Rioux <julien.rioux@gmail.com> | 2013-09-18 14:08:27 -0400 |
commit | 92b74608ea370b869bacb82d293decddfe4f8565 (patch) | |
tree | e0a0bc47f2f9993084ac40d393f61c20c1cdeadb /stepmake | |
parent | cbe41403f58c9e30a1ba86d5f802b007d61748d6 (diff) |
Build: Dependencies for metafont files (issue 779).
Write .dep files containing make dependency rules for .mf files,
allowing to simply type `make' to process the fonts after changing
an input'ed file and have the fonts updated with the minimum amount
of processing.
These .dep files are generated by recursively scanning for lines
of the form "input X;" in the .mf files, and looking up these
input'ed files within the mf source directory. The .dep files are
included into the build by stepmake/generic-targets.make.
Fixes issue 779: fonts should be rebuilt upon modifications to mf/
http://code.google.com/p/lilypond/issues/detail?id=779
Diffstat (limited to 'stepmake')
-rw-r--r-- | stepmake/stepmake/metafont-rules.make | 6 | ||||
-rw-r--r-- | stepmake/stepmake/metafont-vars.make | 21 |
2 files changed, 24 insertions, 3 deletions
diff --git a/stepmake/stepmake/metafont-rules.make b/stepmake/stepmake/metafont-rules.make index 5b6ad17d91..5be005a198 100644 --- a/stepmake/stepmake/metafont-rules.make +++ b/stepmake/stepmake/metafont-rules.make @@ -2,13 +2,13 @@ # we want to see botched results as well. $(outdir)/%.dvi: %.mf - -MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;" + -$(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;" gftodvi $(basename $<) mv $(basename $<).dvi $(outdir) rm $(basename $<).*gf $(outdir)/%.tfm $(outdir)/%.log: %.mf - MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET) + $(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET) # Let's keep this log output, it saves another mf run. mv $(basename $(@F)).log $(basename $(@F)).tfm $(outdir) rm -f $(basename $(@F)).*gf $(basename $(@F)).*pk @@ -19,7 +19,7 @@ $(outdir)/%.tfm $(outdir)/%.log: %.mf # the soft link for mf2pt1.mp is for recent mpost versions # which no longer dump a .mem file $(outdir)/%.pfb: %.mf $(outdir)/mf2pt1.mem $(outdir)/%.log - TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \ + $(DO_MF_DEP) TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \ && ( cd $$TMP \ && ln -s ../mf2pt1.mem . \ && ln -s ../../mf2pt1.mp . \ diff --git a/stepmake/stepmake/metafont-vars.make b/stepmake/stepmake/metafont-vars.make index aeb75c5f00..73f35a53ed 100644 --- a/stepmake/stepmake/metafont-vars.make +++ b/stepmake/stepmake/metafont-vars.make @@ -15,3 +15,24 @@ METAFONT_QUIET = >/dev/null else METAFONT_QUIET = endif + +# Find the metafont file $(1) within the source dirs and return its path. +# If not found, return $(outdir)/$(1) assuming that it is a generated file. +find-mf = \ +$(firstword \ + $(wildcard $(src-dir)/$(1)) \ + $(wildcard $(top-src-dir)/mf/$(1)) \ + $(outdir)/$(1) \ +) + +# Recursively scan the metafont .mf file $(1) for "input X;" +# and return all dependencies. +scan-mf = \ +$(foreach f, $(shell test -f $(1) && sed -ne "/^[[:space:]]*input[[:space:]]/s/^[[:space:]]*input\([^.;]*\)\(.mf;\|;\)/\1.mf/p" $(1)), \ + $(call find-mf,$(f)) \ + $(call scan-mf,$(call find-mf,$(f))) \ +) + +# Find dependencies for the target $@, based on the metafont source file $<, +# and write the dependencies to a .dep file. +DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $(basename $@).dep ) && |