From 92b74608ea370b869bacb82d293decddfe4f8565 Mon Sep 17 00:00:00 2001 From: Julien Rioux Date: Sun, 8 Sep 2013 18:01:13 +0200 Subject: [PATCH] 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 --- stepmake/stepmake/metafont-rules.make | 6 +++--- 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 ) && -- 2.39.2