Re: webpage.html sometimes doesn't build out-of-tree? (was: error by compiling)

Deri via GNU roff typesetting system discussion <[email protected]>
Newsgroups gmane.comp.printing.groff.general
Message-ID <19473619.YbBP6i9bF2@pip>
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.