Hi, Kurt!

At 2022-05-26T10:29:04-0400, T. Kurt Bond wrote:
> I really need to get the install-font script POSIXfied then, don't I?
> Is there a specific timeframe?

I don't have one to impose.  I can't do an RC myself because (1) I don't
know how to do the part that interacts with alpha.gnu.org infrastructure
and (2) there's something involving signing keys (a wise safeguard).

I will say that I had basically resigned myself to not having this
feature in groff 1.23.0.  Having dug more into font issues over the past
several months, I am starting to think it might be cleaner to get
PostScript and PDF device font description management improved _within_
the groff source tree, then leverage that improvement in shipping tools.

I got as far as fixing up the X11 font description stuff, now mentioned
in the "FOR-RELEASE" file, and I started working on Adobe Type 1 fonts,
but had to put that on the shelf (read: in my Git stash) because
something more urgent came up.

I'm attaching the last thing on this topic that I put in my stash so
people have an idea what I'm talking about.  It is absolutely not done.

Even with the install-font script made POSIX-shell-happy, there will
still be work to do, like giving it a less name-space-stomperific
name[1], writing a man page for it, and giving distribution packaging
folks enough guidance that they will understand how to correctly call
our tool from their package triggers or "postinst"s or similar.

In summary, I think a significant chunk of work remains to be bitten off
for this task.

Regards,
Branden

[1] I guess "groff-font-install" or "groff-install-font" would be clear
    enough, but I think either would annoy me when tab-completing
    "groff".  Maybe we can do better.
diff --git a/font/devps/devps.am b/font/devps/devps.am
index 22ebe59d3..41a9d30a6 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'.
 #
@@ -39,6 +39,10 @@ DEVPSFONTFILES = \
   font/devps/HBI \
   font/devps/HI \
   font/devps/HR \
+  font/devps/HCB \
+  font/devps/HCBI \
+  font/devps/HCI \
+  font/devps/HCR \
   font/devps/HNB \
   font/devps/HNBI \
   font/devps/HNI \
@@ -148,10 +152,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..2821efd32 100644
--- a/font/devps/generate/Makefile
+++ b/font/devps/generate/Makefile
@@ -27,11 +27,11 @@ SHELL = /bin/sh
 # Directory containing AFM files.  Must not be current directory.
 # Either long names (e.g., Times-Roman.afm) or short names (e.g.,
 # timesr.afm) may be used. See the afmname script.
-afmdir=/usr/local/lib/afm
+afmdir ?= /usr/local/lib/afm
 
 # 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
+symbolfont ?= /usr/local/lib/fonts/Symbol.pfb
 
 PRINTAFM=printafm
 
@@ -44,6 +44,7 @@ TEXTFONTS=AB ABI AI AR \
 	BMB BMBI BMI BMR \
 	CB CBI CI CR \
 	HB HBI HI HR \
+	HCB HCBI HCI HCR \
 	HNB HNBI HNI HNR \
 	NB NBI NI NR \
 	PB PBI PI PR \
@@ -61,6 +62,7 @@ TEXTENC=$(srcdir)/../text.enc
 EFLAG=-e $(TEXTENC)
 TEXTMAP=$(srcdir)/textmap
 AFMNAME=$(srcdir)/afmname
+OUTDIR=$(srcdir)/..
 
 RM=rm -f
 
@@ -69,211 +71,231 @@ 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)/$@
+
+HCR:
+	$(AFMTODIT) $(EFLAG) $(RFLAG) \
+	  `$(AFMNAME) $(afmdir)/Helvetica-Condensed.afm` \
+	  $(TEXTMAP) $(OUTDIR)/$@
+
+HCB:
+	$(AFMTODIT) $(EFLAG) $(RFLAG) \
+	  `$(AFMNAME) $(afmdir)/Helvetica-Condensed-Bold.afm` \
+	  $(TEXTMAP) $(OUTDIR)/$@
+
+HCI:
+	$(AFMTODIT) $(EFLAG) $(IFLAG) \
+	  `$(AFMNAME) $(afmdir)/Helvetica-Condensed-Oblique.afm` \
+	  $(TEXTMAP) $(OUTDIR)/$@
+
+HCBI:
+	$(AFMTODIT) $(EFLAG) $(IFLAG) \
+	  `$(AFMNAME) $(afmdir)/Helvetica-Condensed-BoldObl.afm` \
+	  $(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 +305,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 *~ "#*"
diff --git a/font/devps/generate/afmname b/font/devps/generate/afmname
index 7d1934930..6944a6e7b 100755
--- a/font/devps/generate/afmname
+++ b/font/devps/generate/afmname
@@ -20,6 +20,10 @@ else
 /^Helvetica$/ { print "helve" }
 /^Helvetica-Bold$/ { print "helveb" }
 /^Helvetica-BoldOblique$/ { print "helvebo" }
+/^Helvetica-Condensed$/ { print "hvc_____" }
+/^Helvetica-Condensed-Bold$/ { print "hvcb____" }
+/^Helvetica-Condensed-BoldObl$/ { print "hvcbo___" }
+/^Helvetica-Condensed-Oblique$/ { print "hvcdo___" }
 /^Helvetica-Narrow$/ { print "helven" }
 /^Helvetica-Narrow-Bold$/ { print "helvenb" }
 /^Helvetica-Narrow-BoldOblique$/ { print "helvenbo" }
diff --git a/src/utils/afmtodit/afmtodit.pl b/src/utils/afmtodit/afmtodit.pl
index 73ae7c65f..183080c45 100644
--- a/src/utils/afmtodit/afmtodit.pl
+++ b/src/utils/afmtodit/afmtodit.pl
@@ -421,8 +421,13 @@ foreach my $lig (sort keys %default_ligatures) {
 open(FONT, ">$outfile") || die "$prog: can't open '$outfile' for output: $!\n";
 select(FONT);
 
-print("# This file has been generated with " .
-      "GNU afmtodit (groff) version @VERSION@\n");
+# Produce a short version number so noise from a Git build doesn't leak
+# into the generated files when we run this tool in "maintainer mode".
+my $short_version = "@VERSION@";
+$short_version =~ s/([0-9.]+)(rc[0-9]+).*/\1\2/;
+
+print("# This file was generated with " .
+      "GNU afmtodit (groff) version $short_version\n");
 print("#\n");
 print("#   $fullname\n") if defined $fullname;
 print("#   $version\n") if defined $version;
@@ -445,7 +450,10 @@ if ($opt_c) {
 
 print("\n");
 
-print("name $font\n");
+my $name = $font;
+$name =~ s@.*/@@;
+
+print("name $name\n");
 print("internalname $psname\n") if $psname;
 print("special\n") if $opt_s;
 printf("slant %g\n", $italic_angle) if $italic_angle != 0;

Attachment: signature.asc
Description: PGP signature

Reply via email to