groff-commit
[Top][All Lists]
Advanced

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

[groff] 26/37: [devps]: Refactor Adobe Type 1 font desc regen.


From: G. Branden Robinson
Subject: [groff] 26/37: [devps]: Refactor Adobe Type 1 font desc regen.
Date: Mon, 14 Mar 2022 01:59:11 -0400 (EDT)

gbranden pushed a commit to branch master
in repository groff.

commit 2566b64e0bb35626f15fd2b256f95d9837daa3d1
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Sun Mar 13 17:00:29 2022 +1100

    [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.
---
 ChangeLog                    |  24 ++++++++
 font/devps/devps.am          |  13 ++++-
 font/devps/generate/Makefile | 128 ++++++++++++++++++++++---------------------
 3 files changed, 101 insertions(+), 64 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6cc00a78..7df57f0d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2022-03-13  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * 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.
+
 2022-03-09  G. Branden Robinson <g.branden.robinson@gmail.com>
 
        * font/devps/symbolsl.afm: New file.
diff --git a/font/devps/devps.am b/font/devps/devps.am
index e8bffa89..09a452fe 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 340a967a..1c8e276d 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 *~ "#*"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]