On Sat, Mar 07, 2026 at 10:05:52AM +0100, Patrice Dumas wrote: > On Fri, Mar 06, 2026 at 10:00:44PM +0000, Gavin Smith wrote: > > Would it be right to describe your recommendation as splitting the > > XS modules into two groups, "core" modules which would be loaded with > > with requiredifenabled, and other modules where fall-back to pure Perl > > doesn't cause any other modules to fail? > > An additional change I propose is that in the default case, even for the > modules where fall-back to pure Perl doesn't cause failures, the default > case should be the same as setting requiredifenabled, ie texi2any > would die. Another possibility should be available, maybe > TEXINFO_XS=permissive, TEXINFO_XS=fallback or something like that, and > if set, the modules where fall-back to pure Perl doesn't cause failures > would fall-back silently.
I think it would be good to make requiredifenabled the default. We could have fewer options for TEXINFO_XS. We could eliminate the current "default" option (try to load, silent fallback), and "warn" (try to load XS modules, warn if they couldn't be). "debug" would be like "requiredifenabled", just printing a trace of the process of trying to load the modules, but erroring out in case of a failure. We shouldn't need a separate variable to control debugging output as there will not be many options. Setting TEXINFO_XS to "omit" would still work as before, as would disabling the XS modules at configure time. So there could only be three options: "requiredifenabled", "debug" and "omit". It's unclear to me exactly what the dependencies are among the modules/support libraries, and this would eliminate the chance for one XS module to depend on another that fails to load. We don't have any kind of dependency tracking between the XS modules and we may not load the modules in a predictable order and so it seems like it would be difficult to make a module only load if another module can be loaded. As we are moving towards texi2any being a C program it makes sense to require the XS modules to work when installed. This would help to detect any conditions where the modules are built, installed, but then don't load.
