+##
+## todo: this also depends on .tfm, FIXME.
+$(outdir)/%.afm $(outdir)/%.enc $(outdir)/%.tex $(outdir)/%.dep: $(outdir)/%.log $(outdir)/%.tfm
+ $(PYTHON) $(buildscript-dir)/mf-to-table.py --package=$(topdir) --outdir=$(outdir) --dep $(outdir)/$(<F:.log=.dep) --afm $(outdir)/$(<F:.log=.afm) --enc $(outdir)/$(<F:.log=.enc) --tex $(outdir)/$(<F:.log=.tex) --ly $(outdir)/$(<F:.log=list.ly) $<
+
+fontdir: $(addprefix $(outdir)/, lilypond.map lilypond.sfd private-fonts fonts.scale fonts.dir)
+
+## Urg
+mapentry=$(1) $(shell fgrep FontName $(outdir)/$(1).afm | sed -e 's/FontName *//') <$(1).pfaX
+
+map = $(foreach a,$(2),$(call $(1),$(a)))
+$(outdir)/lilypond.xmap: $(AFM_FILES)
+ echo '$(call map,mapentry,$(ALL_FONTS))' | \
+ tr 'X' '\n' | sed -e 's/^ *//'> $@
+
+# using shell for loop seems most robust
+$(outdir)/lilypond.map: $(AFM_FILES)
+ for i in $(FETA_FONTS); do echo $$i $$(fgrep FontName $(outdir)/$$i.afm | sed -e 's/FontName *//') '<'$$i.pfa; done > $@
+ for i in $(SAUTER_FONTS); do echo "$$i $$i <$$i.pfa"; done >> $@
+
+
+$(outdir)/fonts.scale: $(PFA_FILES)
+# cd $(outdir) && echo $(FETA_MF_FILES:.mf=.pfa) $(FETA_MF_FILES:.mf=.pfb) | $(PYTHON) $(topdir)/buildscripts/make-font-dir.py > $(@F)
+ cd $(outdir) && echo *.pfa *.pfb | $(PYTHON) $(topdir)/buildscripts/make-font-dir.py > $(@F)
+
+$(outdir)/fonts.dir: $(outdir)/fonts.scale
+ cd $(outdir) && mkfontdir
+
+# Sketch map file
+$(outdir)/lilypond.sfd:
+# cd $(outdir) && echo sketch $(FETA_MF_FILES:.mf=.pfa) | $(PYTHON) $(topdir)/buildscripts/make-font-dir.py > $(@F)
+ cd $(outdir) && echo sketch *.pfa | $(PYTHON) $(topdir)/buildscripts/make-font-dir.py > $(@F)
+
+# Sodipodi map file
+SODIPODI_FONTS = parmesan20 feta-braces0 feta-nummer10 feta20
+$(outdir)/private-fonts:
+ cd $(outdir) && echo sodipodi $(SODIPODI_FONTS:%=%.pfa) | $(PYTHON) $(topdir)/buildscripts/make-font-dir.py > $(@F)