On 2025-02-22 10:02, Bruno Haible wrote:
The latest release already contains some multithreading support already:
That was inadvertent.
When you intersect the resulting list with the gnulib_modules defined in diffutils/bootstrap.conf, the result is: exclude nstrftime regex In detail, we have dependency chains exclude -> regex -> lock -> once -> pthread-once nstrftime -> localename-unsafe-limited -> getlocalename_l-simple -> lock -> once -> pthread-once regex -> lock -> once -> pthread-once Here, in fact, the dependency chain localename-unsafe-limited -> getlocalename_l-simple -> lock can be reduced
Thanks for doing that. I hope that diffutils's existing use of GNULIB_EXCLUDE_SINGLE_THREAD and GNULIB_REGEX_SINGLE_THREAD are enough to break the other chains. (Haven't had time to look into it.)
when you --avoid'ed some multithreading modules, no wonder that some tests fail.
The idea was to --avoid tests that require multithreading. Formerly diffutils could do that by avoiding only lock-tests; it sounds like it needs to avoid more now. I plan to look into it.
* Omitting any multithreading code. Users can already force it by configuring with --disable-threads. As a package maintainer, you can make this the default by adding this line to configure.ac: AC_DEFUN([gl_THREADLIB_DEFAULT_NO], [])
Shouldn't this be documented in doc/multithread.texi? At least to clarify the relationship between it and GNULIB_EXCLUDE_SINGLE_THREAD etc.
Also, since it's checked via m4_ifdef, shouldn't it be defined via m4_define([gl_THREADLIB_DEFAULT_NO])?
* As long as you can see (with "ldd") that the package's binaries don't make use of libpthread and (with "nm | grep ' U '") that the package's binaries don't use multithreading functions, there is no reason to forcibly remove source files from the tarball.
It's not simply shrinking the tarball's size. It's making it easier for diffutils developers and builders to see that multithreading need not be worried about, so that 'configure' doesn't check for multithreading, tests don't test for it, etc. Even if from Gnulib's viewpoint it's simpler to leave the multithreaded source code and tests in, from the consumer's viewpoint it may well be simpler to omit that stuff when the package can't significantly benefit from multithreading.