On Sat, Jan 17, 2026 at 09:52:09PM +0200, Eli Zaretskii wrote: > > Date: Sat, 17 Jan 2026 20:33:33 +0100 > > From: [email protected] > > Cc: Gavin Smith <[email protected]>, [email protected] > > > > > Since the tests run with Terxinfo uninstalled, I wonder whether the > > > test suite harness sets things up so as to find and load the DLLs > > > just built. Showing that as part of the test would go a long way > > > towards flagging any issues with finding the DLLs, and will also > > > indicate which parts of the code were actually tested -- the Perl code > > > or the equivalent C code. Right now, I have no idea. And looking in > > > config.log and Makefile's doesn't help, because I already know the > > > configure script concluded the extensions could be built, and I also > > > know that they were in fact built. I just don't know whether they > > > were used when running the test suite. > > > > If you set TEXINFO_XS=debug in the environment, you will see all the > > XS modules and XS functions (when the whole module is not overriden, but > > some functions are) that are loaded and whether it failed or it was a > > success. > > OK, I will try using that next time. But won't TEXINFO_XS=debug also > show a lot of unrelated stuff, which will flood the terminal with > things I'm not interested in?
No, it will mainly show that, but there are lots of functions and modules, so it will flood the terminal nonetheless. Also it shows every function when you are probably only interested in one from that file. > > > Which brings me to the installation. I've just run "make install", > > > and I see that various libtexinfo*.dll DLLs are installed in > > > $prefix/lib/bin. > > > > That is somewhat unexpected. In tta/C/Makefile.am, there is > > > > converterlibdir = $(libdir)/$(CONVERTER) > > xsdir = $(converterlibdir) > > > > and the libraries are in xs_LTLIBRARIES, and therefore should be > > installed in $(libdir)/texi2any, since CONVERTER=texi2any. > > > > xs_LTLIBRARIES += libtexinfo.la > > I think the reason is libtool. It "knows" that shared libraries on > Windows need to be installed in the 'bin' subdirectory, not in the > 'lib' subdirectory as on Posix systems. > > So I guess this calls for some Makefile wizardry, to make sure > libtexinfo*.dll libraries end up in lib/texi2any/ instead. Ok. I guess we have to bypass libtool on that. That being said, this could come handy for the SWIG interface as for the SWIG interface, we do not have the custom XSLoader and we need to load the libraries. So, maybe we should install in both locations or something like that. > > > (Strangely, ctexi2any.exe, > > > which I presumed will load them, is not installed.) Are the DLLs > > > loaded by explicit dlopen calls, which use their full absolute file > > > names? > > > > Something like that, yes. The libtool .la files are used on some > > platforms to find the file names to dlopen. > > Does Perl code use the *.la files? Because AFAIK libtool is not > involved in loading the DLL libraries on Windows at run time. Yes, it is Texinfo::XSLoader code that does that. > > If the .la files are not > > found, the module is dlopened anyway, and it works in platforms that > > have rpath or the like, possibly with libtool help and find libraries > > without a need to preload through dlopen. > > Windows doesn't have rpath. Indeed, this typically works like that in GNU/Linux and some BSD (not all, OpenBSD does things differently). > > > Another question related to "make install" is why are the *.dll.a > > > files installed in lib/texi2any/ ? These are the so-called "import > > > libraries", which are needed on Windows to link applications against > > > shared libraries. But there's no feature in Texinfo that needs to > > > allow other applications to be linked against the DLLs and XS > > > extensions produced by the build, is there? > > > > These are possibly unneeded. But I think that they are installed by > > libtool, as we do not install them ourselves. But maybe they are needed > > for the C implementation of texi2any? > > No. The import libraries are only used by the linker at link time. Ok, then they are not needed. I do not think that it is problematic to leave them there, though. Similar .so that are only used to link are also present in GNU/Linux. > > > The same goes to the *.la > > > files -- they are only needed for linking against the libraries (and > > > that is not Windows-specific); so why are they installed? > > > > As I said above, it is probably needed to find the locations of the > > libtexinfo* libraries and to load them by Texinfo::XSLoader. > > So Texinfo::XSLoader accesses the *.la files? Yes. -- Pat
