On Saturday, 21 February 2026 18:13:50 GMT G. Branden Robinson wrote:
> [updating subject to something useful for searching]
> 
> Hi Deri,
> 
> At 2026-02-21T13:50:16+0000, Deri wrote:
> > On Saturday, 21 February 2026 02:54:23 GMT G. Branden Robinson wrote:
> > > At 2026-02-20T21:28:08+0000, Bjarni Ingi Gislason wrote:
> > > > After cloning groff
> > > > 
> > > > Error message:
> > > >   GROFF    doc/webpage.html
> > > > 
> > > > pre-grohtml: fatal error: 'pre-grohtml' exited with status 4;
> > > > re-run with a different output driver to see diagnostic messages
> > 
> > This is a strange one!! The error occurs if you don't have the file
> > doc/ gnu.eps (because PSPIC can't find it). doc.am makes it (from
> > doc/gnu.xpm) but in "out-of-tree" builds it ends up in
> > build/doc/gnu.eps, and not found.
> > 
> > The regression was introduced by commit e9da162af80 (Feb 7, 2026),
> > reverting fixes it.
> 
> Well then it's _extra_ strange, because I _can't_ reproduce it.  (And
> didn't on 7 February, because I would not have pushed if I'd been able
> to see this defect, which I certainly should have because I do an out of
> tree build 3-4 times[1] immediately before pushing.)
> 
> > The groff "dist" version has no such problem since doc.am has:-
> > 
> > # Provide a copy of the image in the distribution archive to accommodate
> > # systems without a tool to generate it from an X pixmap.
> > dist-hook: dist-gnueps
> 
> That might explain why we haven't heard tell of this from any of our RC
> testers, since they're all working from a distribution archive.
> 
> > Here's some proof of the above:-
> > 
> > [derij@pip build (master)]$ make
> > make  all-recursive
> > make[1]: Entering directory '/home/derij/groff-git/groff/build'
> > make[2]: Entering directory '/home/derij/groff-git/groff/build'
> > 
> >   GROFF    doc/webpage.html
> > 
> > pre-grohtml: fatal error: 'pre-grohtml' exited with status 4; re-run with
> > a
> > different output driver to see diagnostic messages
> > make[2]: *** [Makefile:19441: doc/webpage.html] Error 4
> > make[2]: Leaving directory '/home/derij/groff-git/groff/build'
> > make[1]: *** [Makefile:13310: all-recursive] Error 1
> > make[1]: Leaving directory '/home/derij/groff-git/groff/build'
> > make: *** [Makefile:7570: all] Error 2
> 
> Can't reproduce.
> 
> $ \rm -r build
> $ (mkdir build && cd build && ../configure)
> ...
> $ make -C build -j
> ...
> fonts_n.roff: listing font 'ZDR'...
> troff: backtrace: file 'man/groff_char.7':1060
> troff:man/groff_char.7:1060: warning: special character '.j' not defined
> troff: backtrace: file 'man/groff_char.7':1466
> troff:man/groff_char.7:1466: warning: special character 'vA' not defined
> troff: backtrace: file 'man/groff_char.7':1596
> troff:man/groff_char.7:1596: warning: special character 'bs' not defined
> troff: backtrace: file 'man/groff_char.7':1769
> troff:man/groff_char.7:1769: warning: special character '-+' not defined
> troff: backtrace: file 'man/groff_char.7':1818
> troff:man/groff_char.7:1818: warning: special character 'coproduct' not
> defined troff: backtrace: file 'man/groff_char.7':1918
> troff:man/groff_char.7:1918: warning: special character '+e' not defined
> make[2]: Leaving directory '/home/branden/src/GIT/groff/build'
> make[1]: Leaving directory '/home/branden/src/GIT/groff/build'
> make: Leaving directory '/home/branden/src/GIT/groff/build'
> 
> $ find . -name gnu.eps
> ./doc/gnu.eps

If you are in your '/home/branden/src/GIT/groff' directory (as you clearly are 
for the following two commands) thank you for confirming the existence of the 
"rogue" gnu.eps sitting in '/home/branden/src/GIT/groff/doc', as I proposed as 
the reason you were not seeing the issue.

> Hmm, so why was the `PSPIC` macro able to find the image in the "wrong"
> place?  Let's delete "webpage.html" and force a rebuild, verbosely.
> 
> $ \rm build/doc/webpage*

You must be in-tree here - else you would receive an error.

> $ make -C build V=1 doc/webpage.html && echo SUCCESS

Still in-tree?

> make: Entering directory '/home/branden/src/GIT/groff/build'
> /usr/bin/mkdir -p doc \
> && GROFF_COMMAND_PREFIX= GROFF_BIN_PATH="/home/branden/src/GIT/groff/build"
> /home/branden/src/GIT/groff/build/groff
> -M/home/branden/src/GIT/groff/build/tmac
> -M/home/branden/src/GIT/groff/build/../tmac
> -F/home/branden/src/GIT/groff/build/font
> -F/home/branden/src/GIT/groff/build/../font -ww -b -t -I
> /home/branden/src/GIT/groff/build/../doc -P-jdoc/webpage -P-nrb \
> -P-Iwebpage -P-Ddoc/img -Thtml -ms
> /home/branden/src/GIT/groff/build/../doc/webpage.ms \
>   > doc/webpage.html.tmp \
> 
>   && mv doc/webpage.html.tmp doc/webpage.html
> make: Leaving directory '/home/branden/src/GIT/groff/build'
> SUCCESS

For me (out-of-tree):-

[derij@pip build (master)]$ \rm doc/webpage*
[derij@pip build (master)]$ make -C build V=1 doc/webpage.html && echo SUCCESS
make: Entering directory '/home/derij/groff-git/groff/build'
make: *** build: No such file or directory.  Stop.
make: Leaving directory '/home/derij/groff-git/groff/build'

Lets try that again but specifically as out-of-tree.

[derij@pip build (master)]$ make -C . V=1 doc/webpage.html && echo SUCCESS
make: Entering directory '/home/derij/groff-git/groff/build'
/usr/bin/mkdir -p doc \
&& GROFF_COMMAND_PREFIX= GROFF_BIN_PATH="/home/derij/groff-git/groff/build" /
home/derij/groff-git/groff/build/groff -M/home/derij/groff-git/groff/build/
tmac -M/home/derij/groff-git/groff/build/../tmac -F/home/derij/groff-git/
groff/build/font -F/home/derij/groff-git/groff/build/../font -ww -b -t -I /
home/derij/groff-git/groff/build/../doc -P-jdoc/webpage -P-nrb \
  -P-Iwebpage -P-Ddoc/img -Thtml -ms /home/derij/groff-git/groff/build/../doc/
webpage.ms \
  > doc/webpage.html.tmp \
  && mv doc/webpage.html.tmp doc/webpage.html
pre-grohtml: fatal error: 'pre-grohtml' exited with status 4; re-run with a 
different output driver to see diagnostic messages
make: *** [Makefile:19441: doc/webpage.html] Error 4
make: Leaving directory '/home/derij/groff-git/groff/build'

> It looks to me like my builds are succeeding because groff is being
> passed this option:
> 
>  -I /home/branden/src/GIT/groff/build/../doc
> 

Lets look in the -I directory

[derij@pip build (master)]$ ls -l /home/derij/groff-git/groff/build/../doc/
gnu.eps
ls: cannot access '/home/derij/groff-git/groff/build/../doc/gnu.eps': No such 
file or directory

> That comes from the following lines in doc/doc.am.
> 
> # groff(1)'s `-I` implies `-g` and `-s`, so we must depend on grn and
> # soelim even though the document doesn't require them.
> doc/webpage.html: grn soelim
> doc/webpage.html: $(DOC_GNU_EPS) tmac/www.tmac tbl
> doc/webpage.html: $(doc_srcdir)/groff.css
> doc/webpage.html: $(doc_srcdir)/webpage.ms $(TMAC_PACKAGE_MS)
>         $(GROFF_V)$(MKDIR_P) $(doc_builddir) \
>         && $(DOC_GROFF) -t -I $(doc_srcdir) -P-jdoc/webpage -P-nrb \
>           -P-Iwebpage -P-Ddoc/img -Thtml -ms $(doc_srcdir)/webpage.ms \
> 
>           > [email protected] \
> 
>           && mv [email protected] $@

Exactly the problem, gnu.eps is created in $(doc_builddir) but troff's -I 
looks in $(doc_srcdir). Of course, in-tree, these are both the same, so it 
works.
 
> > Now fix it.
> 
> For me, this is working as planned and intended.
> 
> Try the "nuke-and-rebuild webpage.html" depicted above on your system...

See above.

> > [derij@pip build (master)]$ cp doc/gnu.eps ../doc
> 
> ...after removing that, and show me what you get.  I'm acutely
> interested to understand the difference that is breaking things for you.
> 
> > If you are not seeing the error please check you have not got a rogue
> > doc/ gnu.eps in the source doc/ directory.
> 
> I don't.  See my "find" command above.

Which actually proves I am correct, you do have a "rogue" copy in the source 
directory. Possibly left over from an in-tree build, another good reason for 
dropping in-tree builds.

Cheers

Deri

> Regards,
> Branden
> 
> [1] One "paranoid", with lots of compiler options like Bjarni uses, one
>     "fast" without them, and one unnamed, but which makes the
>     "distcheck" target which in turn requires "dist", which assembles
>     and builds a distribution archive as part of your build.  Prior to
>     an anticipated push, I perform the builds in this order so I can
>     catch problems as early as possible, aborting the process where
>     necessary to suss out where I made a mistake, fix it, and then
>     restart the procedure.





Reply via email to