Re: groff 1.24.0.rc1 available for evaluation
Ingo Schwarze <[email protected]>
| Newsgroups | gmane.comp.printing.groff.general |
|---|---|
| Message-ID | <[email protected]> |
Hi Branden, Here is my third problem report. I already spent hours of working time on this one, performing more than a dozen cycles of adding of modifying a tweak, than running the next build attempt, but all these attempts crashed at the same place in grodvi/dvi.o : ----- 8< ----- schnipp ----- >8 ----- 8< ----- schnapp ----- >8 ----- c++ -O2 -pipe -o grodvi src/devices/grodvi/dvi.o libdriver.a libgroff.a lib/libgnu.a -lm ld: warning: libgroff.a: archive member 'libgnu.a' is neither ET_REL nor LLVM bitcode ld: warning: unicode.cpp(libgroff_a-unicode.o:(to_utf8_string(unsigned int)) in archive libgroff.a): warning: sprintf() is often misused, please use snprintf() ld: warning: symbol.cpp(libgroff_a-symbol.o:(symbol::symbol(char const*, int)) in archive libgroff.a): warning: strcpy() is almost always misused, please use strlcpy() ld: warning: symbol.cpp(libgroff_a-symbol.o:(concat(symbol, symbol)) in archive libgroff.a): warning: strcat() is almost always misused, please use strlcat() ld: error: undefined symbol: vfzprintf >>> referenced by fprintf.c >>> libgnu_a-fprintf.o:(rpl_fprintf) in archive lib/libgnu.a >>> did you mean: vfwprintf >>> defined in: /usr/lib/libc.so.102.2 ld: error: undefined symbol: rpl_strerror >>> referenced by font.cpp >>> libgroff_a-font.o:(font::load(bool)) in archive libgroff.a c++: error: linker command failed with exit code 1 (use -v to see invocation) *** Error 1 in . (Makefile:8337 'grodvi') ----- 8< ----- schnipp ----- >8 ----- 8< ----- schnapp ----- >8 ----- Again, i'm lazily quoting my commit message of the fix in my WIP port, for now. It would be incredibly helpful to have a mode to simply build groff without gnulib interference. To have a mode that simply assumes that everything groff wants from gnulib is natively available from the operating system. Simply let that "native mode" crash when some feature that is actually needed is missing from the operating system, and let it be the responsibility of the porter to provide the feature. I'm almost certain that would just work instantly out of the box, whereas gnulib causes such massive portability problems that it takes hours and hours of very difficult work to circumvent. ----- 8< ----- schnipp ----- >8 ----- 8< ----- schnapp ----- >8 ----- commit d8ce56fb213f0ad5c49dde34aa2cca727588c073 Author: Ingo Schwarze <[email protected]> Date: Mon Jan 19 14:38:32 2026 +0100 prevent gnulib from crashing while trying to replace printf(3) As expected, the newer gnulib used in groff-1.24 has become even more aggressive disparaging our printf(3) implementation for multiple bad reasons. Getting it to build at all has become significantly harder. Notably, the pointless quibbles about errno.h and strerror(0) appear to make gnulib want to replace the entire printf(3) implementation, unless i'm totally misinterpreting what is going on in the build - which might be the case because both the gnulib code and the ./configure code are utterly unreadable: the former because of its totally excessive use of #if directives, the latter because it has no indentation whatsoever that could help reading it. So i'm not completely sure this is the minimal fix, though it does look like every single one of the seven tweaks is really required. With this fix, the build progresses slightly further. Now grodvi builds; it's now grops that explodes. diff --git a/Makefile b/Makefile index 856f70a..859454c 100644 --- a/Makefile +++ b/Makefile @@ -68,15 +68,20 @@ CONFIGURE_ARGS += PAGE=letter # from gnulib. In particular, groff does not use %n, so it would be # insane to use an implementation that lacks our %n protection. CONFIGURE_ENV += gl_cv_func_printf_directive_a=yes \ + gl_cv_func_printf_directive_b=yes \ gl_cv_func_printf_directive_n=yes \ - gl_cv_func_printf_enomem=yes + gl_cv_func_printf_enomem=yes \ + gl_cv_func_printf_sizes_c23=yes \ + gl_cv_func_strerror_0_works=yes \ + gl_cv_header_errno_h_complete=yes # Disable dependencies of the gnulib fprintf-posix module. # Even though we tell ./configure that our fprintf(3) shall be used, # gnulib is too stupid to understand that implies the dependecies # aren't needed either und would still compile in needless and # potentially risky printf(3) code from gnulib. -CONFIGURE_ENV += ac_cv_func_vasnprintf=yes +CONFIGURE_ENV += ac_cv_func_vasnprintf=yes \ + gl_cv_func_vasnprintf_works=yes # Even after the above CONFIGURE_ENV cleanup, gnulib compiles in # several bogus files that groff does not need, merely because ----- 8< ----- schnipp ----- >8 ----- 8< ----- schnapp ----- >8 ----- Yours, Ingo