From 2566b64e0bb35626f15fd2b256f95d9837daa3d1 Mon Sep 17 00:00:00 2001 From: "G. Branden Robinson" Date: Sun, 13 Mar 2022 17:00:29 +1100 Subject: [devps]: Refactor Adobe Type 1 font desc regen. Checkpoint work in progress. Should not cause regressions because the Make targets invoked are never called during a build (they are isolates that you have to manually name on the command line). * font/devps/devps.am: Rename targets. (fonts): (devps_fonts): Rename these... (maintainer-font-descriptions): (devps_font-descriptions): ...to these. Add comments explaining what they're for and why they aren't used in a build. * font/devps/generate/Makefile: Add `outdir` variable to store destination directory of font description files, and update all targets that write artifacts to use this directory. This makes the targets "phony", which I don't regard as a problem since the generated artifacts are kept under source control, and this isn't really a user-facing script (even though it gets installed). I think there is a good chance that this will become a shell script, because to avoid regressions we need to generate the font descriptions using both the 229-glyph and 314-glyph versions of the Adobe fonts' AFM files (so that we get wider glyph coverage _and_ more kerning pair data) and we need to add kerning information for the ellipsis (Savannah #59907). (symbolsl.afm): Revise generation process to be sensitive to failure. --- font/devps/devps.am | 13 ++++- font/devps/generate/Makefile | 128 ++++++++++++++++++++++--------------------- 2 files changed, 77 insertions(+), 64 deletions(-) (limited to 'font/devps') diff --git a/font/devps/devps.am b/font/devps/devps.am index e8bffa89c..09a452fe3 100644 --- a/font/devps/devps.am +++ b/font/devps/devps.am @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2022 Free Software Foundation, Inc. # # This file is part of 'groff'. # @@ -150,10 +150,17 @@ font/devps/DESC: $(devps_srcdir)/DESC.in && (test -z '$(PSPRINT)' \ || echo print '$(PSPRINT)' >>$@) -fonts: devps_fonts +maintainer-font-descriptions: devps_font-descriptions +# This target generates font descriptions from installed Type 1 AFM +# files; these are _not_ normally generated during a build, but provided +# with the groff source distribution. +# # We add top_builddir to the PATH in case the only afmtodit available is # the one in the current build. -devps_fonts: afmtodit font/devps/DESC +# +# The AFM files from which these descriptions are produced must be +# obtained elsewhere, so this target runs only in "maintainer mode". +devps_font-descriptions: afmtodit font/devps/DESC PATH=$(top_builddir)$(GROFF_PATH_SEPARATOR)$(PATH) \ $(MAKE) -f $(devps_srcdir)/generate/Makefile \ srcdir=$(devps_srcdir)/generate DESC=$(devps_srcdir)/DESC.in diff --git a/font/devps/generate/Makefile b/font/devps/generate/Makefile index 340a967a1..1c8e276d7 100644 --- a/font/devps/generate/Makefile +++ b/font/devps/generate/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1989-2020 Free Software Foundation, Inc. +# Copyright (C) 1989-2022 Free Software Foundation, Inc. # Written by James Clark (jjc@jclark.com) # # This file is part of groff. @@ -29,6 +29,9 @@ SHELL = /bin/sh # timesr.afm) may be used. See the afmname script. afmdir=/usr/local/lib/afm +# Write font descriptions to this directory. +outdir=$(srcdir)/.. + # The symbol font which fits to 'Symbol.afm'. For the creation of # 'symbolsl.afm' we need the 'printafm' script from ghostscript. symbolfont=/usr/local/lib/fonts/Symbol.pfb @@ -69,211 +72,211 @@ all: $(FONTS) TR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Times-Roman.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ TB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Times-Bold.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ TI: $(AFMTODIT) $(EFLAG) $(IFLAG) -a 7 \ `$(AFMNAME) $(afmdir)/Times-Italic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ TBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Times-BoldItalic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica-Bold.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica-Oblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica-BoldOblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ CR: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Courier.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ CB: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Courier-Bold.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ CI: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Courier-Oblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ CBI: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Courier-BoldOblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ PR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Palatino-Roman.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ PB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Palatino-Bold.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ PI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Palatino-Italic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ PBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Palatino-BoldItalic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ NR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ NB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Bold.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ NI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Italic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ NBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/NewCenturySchlbk-BoldItalic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ BMR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Bookman-Light.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ BMB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Bookman-Demi.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ BMI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Bookman-LightItalic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ BMBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Bookman-DemiItalic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ AR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ AB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/AvantGarde-Demi.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ AI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/AvantGarde-BookOblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ ABI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/AvantGarde-DemiOblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HNR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HNB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Bold.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HNI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Oblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ HNBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/Helvetica-Narrow-BoldOblique.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ ZCMI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ `$(AFMNAME) $(afmdir)/ZapfChancery-MediumItalic.afm` \ - $(TEXTMAP) $@ + $(TEXTMAP) $(OUTDIR)/$@ ZD: $(AFMTODIT) -s $(RFLAG) \ `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` \ - $(srcdir)/dingbats.map $@ + $(srcdir)/dingbats.map $(OUTDIR)/$@ -SS: symbolsl.afm +SS: $(OUTDIR)/symbolsl.afm $(AFMTODIT) -s -x $(IFLAG) \ - symbolsl.afm $(srcdir)/lgreekmap $@ + $(OUTDIR)/symbolsl.afm $(srcdir)/lgreekmap $(OUTDIR)/$@ S: symbol.afm $(AFMTODIT) -s $(RFLAG) \ - symbol.afm symbolmap $@ + symbol.afm symbolmap $(OUTDIR)/$@ -ZDR: zapfdr.afm +ZDR: $(OUTDIR)/zapfdr.afm $(AFMTODIT) -s $(RFLAG) \ - zapfdr.afm $(srcdir)/dingbats.rmap $@ + $(OUTDIR)/zapfdr.afm $(srcdir)/dingbats.rmap $(OUTDIR)/$@ # the map is just a dummy EURO: freeeuro.afm $(AFMTODIT) $(RFLAG) \ - freeeuro.afm symbolmap $@ + freeeuro.afm symbolmap $(OUTDIR)/$@ freeeuro.afm freeeuro.pfa: $(srcdir)/freeeuro.sfd - fontforge -script $(srcdir)/sfdtopfa.pe $(srcdir)/freeeuro.sfd + fontforge -script $(srcdir)/sfdtopfa.pe $(srcdir)/freeeuro.sfd \ + && mv freeeuro.afm freeeuro.pfa $(OUTDIR) symbol.afm: $(srcdir)/symbol.sed - $(RM) $@ sed -f $(srcdir)/symbol.sed `$(AFMNAME) $(afmdir)/Symbol.afm` \ - >$@ + >$(OUTDIR)/$@ symbolsl.afm: $(srcdir)/symbolsl.awk $(srcdir)/../symbolsl.ps - $(RM) $@ Fontmap - echo "/Symbol-Slanted ($(srcdir)/../symbolsl.ps) ;" > Fontmap - echo "/Symbol ($(symbolfont)) ;" >> Fontmap - $(PRINTAFM) Symbol-Slanted > tmp.afm - awk -f $(srcdir)/symbolsl.awk -v SYMAFM=`$(AFMNAME) \ - $(afmdir)/Symbol.afm` tmp.afm >$@ - $(RM) Fontmap tmp.afm - -zapfdr.afm: $(srcdir)/zapfdr.sed - $(RM) $@ + $(RM) Fontmap \ + && echo "/Symbol-Slanted ($(srcdir)/../symbolsl.ps) ;" \ + > Fontmap \ + && echo "/Symbol ($(symbolfont)) ;" >> Fontmap \ + && $(PRINTAFM) Symbol-Slanted > tmp.afm \ + && awk -f $(srcdir)/symbolsl.awk -v SYMAFM=`$(AFMNAME) \ + $(afmdir)/Symbol.afm` tmp.afm >$(OUTDIR)/$@ \ + && $(RM) Fontmap tmp.afm + +zapfdr.afm: $(srcdir)/apfdr.sed sed -f $(srcdir)/zapfdr.sed \ - `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` >$@ + `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` >$(OUTDIR)/$@ ZD: $(srcdir)/dingbats.map ZDR: $(srcdir)/dingbats.rmap @@ -283,16 +286,19 @@ $(GREEKFONTS): $(srcdir)/lgreekmap $(FONTS): $(DESC) symbolmap: $(TEXTMAP) $(srcdir)/symbolchars - echo '#' >$@ - echo '# This is a list of all predefined groff symbols.' >>$@ - echo '#' >>$@ - cat $(TEXTMAP) $(srcdir)/symbolchars >>$@ + printf \ + '#\n# This is a list of all predefined groff symbols.\n#\n' \ + > $(OUTDIR)/$@ \ + && cat $(TEXTMAP) $(srcdir)/symbolchars >>$@ clean: - $(RM) symbolmap symbol.afm + cd $(OUTDIR) \ + && $(RM) freeeuro.afm freeeuro.pfa symbol.afm symbolmap \ + symbolsl.afm zapfdr.afm realclean: clean - $(RM) $(FONTS) + cd $(OUTDIR) \ + && $(RM) $(FONTS) extraclean: realclean $(RM) core *~ "#*" -- cgit v1.2.1