groff
[Top][All Lists]
Advanced

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

build system: devpdf/download regression; was: groff man(7) `B` macro...


From: Ingo Schwarze
Subject: build system: devpdf/download regression; was: groff man(7) `B` macro...
Date: Sat, 18 Jun 2022 19:16:10 +0200

Hi Branden,

G. Branden Robinson wrote on Sat, Jun 18, 2022 at 10:40:46AM -0500:
> At 2022-06-17T20:53:13+0200, Ingo Schwarze wrote:

>> during the testing described below (which i foolishly expected to
>> be minor), i tripped over several new candidates for regressions
>> that look unrelated.  This is not a serious report yet, i'll have to
>> investigate in more detail and then report properly.  The candidates
>> include the following effects that i saw in my usual test setup:

> The PDF ones are surprising to me.  But not inexplicable--Deri and I
> have both done recent work in this area.  (The problems are likely
> solely my fault, though.)
 
>>  * The build died when trying to install font/devpdf/download
>>    because the file was never built and consequently didn't exist.

> My surmise is that this arises from commit 6e62be835d.  I'll try an
> out-of-tree build with MAKE=bmake and see if I can reproduce it.
 
>>  * The PDF font description files (font/devpdf/TR and friends)
>>    no longer got installed.

> I don't have a clear hypothesis for this one.  I can say it's a little
> trickier to deal with because the set of font description files for the
> PDF output driver is dynamically generated, and differs depending on the
> availability of the URW font files.  This is unlike all of the other
> output drivers.  I'll take a closer look; maybe BSD Make will sniff this
> one out too.

I have made a bit of progress with these.  I now suspect both are related
to each other and not limited to any specific implementation of make(1).

Let's see, how is font/devpdf/download supposed to get built?

We have this in font/devpdf/devpdf.am, and using grep(1), i suspect
it is the only reason why it might get built:

  font/devpdf/stamp: font/devpdf/DESC font/devpdf/download \
    $(devpdffontenc_DATA) $(devpdffontmap_DATA) $(devpdffont_DATA)
        $(AM_V_at)>$@

So what asks for building font/devpdf/stamp?  Grepping again, i found
these and only these consumers:

  In contrib/mom/mom.am:
    if USE_GROPDF
      MOMPROCESSEDEXAMPLEFILES = \
      [... various *.pdf files ...]
    endif
    [...]
    $(MOMPROCESSEDEXAMPLEFILES): $(MOMNORMALFILES) \
      groff troff gropdf pdfmom penguin.ps penguin.pdf font/devpdf/stamp

  In contrib/sboxes/sboxes.am:
    if USE_GROPDF
    sboxespdfdocdir = $(pdfdocdir)
    nodist_sboxespdfdoc_DATA = $(sboxes_builddir)/msboxes.pdf
    endif
    [...]
    $(sboxes_builddir)/msboxes.pdf: $(sboxes_builddir)/msboxes.ms \
      $(dist_sboxestmac_DATA) groff troff gropdf font/devpdf/stamp
        $(GROFF_V)$(DOC_GROFF) -M$(sboxes_srcdir) -ms -msboxes -Tpdf \
          $(sboxes_builddir)/msboxes.ms > $@

  In doc/doc.am:
    PROCESSEDFILES_DEPS_PDF = groff troff gropdf font/devpdf/stamp
    [...]
    if USE_GROPDF
    $(PROCESSEDDOCFILES_PDF): $(PROCESSEDFILES_DEPS_PDF)
    endif

All consumers appear to be conditional on USE_GROPDF.
Consequently, since i don't want our groff package to depend
on ghostscript and friends and hence have this in my ports build script,

  # Our groff port needs to be lightweight because a few very basic
  # ports still depend on it for building their manual pages.
  # In particular, avoid dependencies on the following heavy ports:
  CONFIGURE_ARGS += --without-libiconv-prefix  # converters/libiconv
  CONFIGURE_ARGS += --without-gs               # print/ghostscript
  CONFIGURE_ARGS += psselect=missing           # print/psutils
  CONFIGURE_ARGS += PDFFONTS=missing \
                    PDFIMAGES=missing \
                    PDFINFO=missing            # print/poppler-utils

i intentionally end up with

  configure: The programs 'gs', 'pnmcrop', 'pnmcut', 'pnmtopng',
   'pnmtops', and 'psselect' were not found in $PATH.

and

  config.log:USE_GROPDF_FALSE=''
  config.log:USE_GROPDF_TRUE='#'

and

  #MOMPROCESSEDEXAMPLEFILES = [...]
  #nodist_sboxespdfdoc_DATA = $(sboxes_builddir)/msboxes.pdf
  #$(PROCESSEDDOCFILES_PDF): $(PROCESSEDFILES_DEPS_PDF)

in the generated Makefile, and it looks like in the end of the day,
nothing whatsoever asks for building the font description files
for devpdf.

The mistake here might be that the groff build system only regards
the devpdf font decription files as prerequisites for building
PDF documentation - but in addition, they should also be considered
part of the devpdf infrastructure to be installed in their own
right, no matter whether they are used during the build.

On a tangent, i suspect similar problems may be hiding elsewhere
that will bite people who disable (or lack) other features in their 
system that i left enabled.  That is, some integral parts of
groff only being built because some optional stuff (like building
documentation in an optional format) depends on them.
But auditing for that kind of problem is hard because there are
so many *.am files scattered around the tree and the automake
infrastructure involved makes reading them a non-trivial task.

The quick and dirty patch appended below fixes the immediate problem
in my partciular setup.  Now all the expected devpdf files get
built and installed, including the "download" file and the individual
font description files like TR, TB, CR and so on.

But i'm not convinced this is the right way to fix it.
How do i properly tell the groff build system "i want this target
built unconditionally"?
I wish this build system were be less complicated.
We are slowly making progress in that direction, but with automake,
i fear it will always remain a maze.  :-/

I won't mix the discussion about the .TH font regression
into this message but address the rest of your reply separately.

Yours,
  Ingo


diff --git a/font/devpdf/devpdf.am b/font/devpdf/devpdf.am
index 363d4cdd0..64ed657d4 100644
--- a/font/devpdf/devpdf.am
+++ b/font/devpdf/devpdf.am
@@ -51,6 +51,8 @@ EXTRA_DIST += \
   font/devpdf/Foundry.in \
   font/devpdf/util/BuildFoundries.pl
 
+all: font/devpdf/stamp
+
 font/devpdf/enc/text.enc:
        $(AM_V_at)$(MKDIR_P) $(top_builddir)/font/devpdf/enc
        $(AM_V_at)cp -f $(top_srcdir)/font/devps/text.enc \



reply via email to

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