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.
