Re: groff 1.24.0.rc1 available for evaluation

Bjarni Ingi Gislason <[email protected]>
Newsgroups gmane.comp.printing.groff.general
Message-ID <[email protected]>
  I once used the Gnulib module "posix-check" to find out what could be
improved.

  See bug-groff bugs #61832 and #61833.

  I have these additional Gnulib modules in my bootstrap.conf:

  vsnprintf-posix
  gen-header
  mkstemp
  getcwd
  strerror
  strtol
  assert
  assert-h
  idx
  string-h
  strings-h
  nullptr
  signal-h

  execvp
  faccessat
  fclose
  fdopen
  fflush
  fopen
  freopen
  fseeko
  ftello
  ldexpl
  nl_langinfo
  pclose
  popen
  pthread-mutex
  pthread-once
  pthread-rwlock
  setlocale
  strsignal
  tmpfile

  copysign
  printf-posix
  sprintf-posix
  malloc-gnu
  stack-trace
  abort-debug
  std-gnu23
  bool
  once

  stdcountof-h

  stdio-h

_._

  "groff" is a "GNU groff", so it is intended for a GNU operation system.

  The Gnulib project is to help using GNU software in other operation
systems.

  Trouble can, may, and should be reported to the "[email protected]"
mailing list to get issues fixed or provided solutions.


On Mon, Jan 19, 2026 at 03:13:58PM +0100, Ingo Schwarze wrote:
> 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
>
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.