On Tue, Mar 17, 2026 at 11:20:17AM +0100, Manuel Jacob wrote: > Hi, > > When cross-compiling texinfo in an environment where ncurses is available > for the host machine (e.g. in a sysroot), but not for the build machine, > running `make` fails with the following error: > > ... > > The same error has been reported here: > https://lists.gnu.org/archive/html/bug-texinfo/2013-11/msg00017.html > > In the case of cross-compiling, parts of texinfo are built for running on > the build machine (in the `tools` directory). For each of the build machine > and the host machine, it is decided whether the `info` subdirectory is built > or not, based on `HAVE_TERMLIBS`. If `HAVE_TERMLIBS` is false for the build > machine and true for the host machine, `tools/info` will not be built, but > `info` will be built, trying to execute `../tools/info/makedoc`, which is > not there. > > A possible workaround is to execute `make -C tools/info makedoc` before > executing `make`.
Thanks for testing and investigating this. I'm surprised that cross-compilation works at all - the support in the build system for it is very old and is from before the Perl implementation of makeinfo, as far as I am aware. I've attempted a fix based on your description. I'm not really sure how I would test this, but if you can confirm this works, we could make this change. diff --git a/ChangeLog b/ChangeLog index ba1f5e1d7d..8bbc9d546e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2026-03-22 Gavin Smith <[email protected]> + + Always build info/makedoc when cross-compiling + + * Makefile.am (SUBDIRS) [TOOLS_ONLY]: + Always include "info" subdirectory to allow "makedoc" program + to be built on "build" system when cross-compiling, even if terminal + library is not found on "build". + * info/Makefile.am (bin_PROGRAMS): Use HAVE_TERMLIBS conditional to + only include "ginfo" if terminal library is found. + (LDADD, ginfo_LDADD): Only use $(TERMLIBS) in ginfo_LDADD. + 2026-03-22 Patrice Dumas <[email protected]> Put lineraw line commands leading and trailing directly in tree diff --git a/Makefile.am b/Makefile.am index 5002ff9371..88e673b41b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -51,15 +51,7 @@ install-tex: SUBDIRS = if TOOLS_ONLY # Build native tools only. - SUBDIRS += gnulib/lib install-info tta util -if HAVE_TERMLIBS - SUBDIRS += info -else -# DOS/Windows don't need TERMLIBS to build Info -if HOST_IS_WINDOWS - SUBDIRS += info -endif -endif + SUBDIRS += gnulib/lib info install-info tta util else # All subdirectories. # Do libs first since the C programs depend on it. @@ -74,9 +66,8 @@ if HOST_IS_WINDOWS SUBDIRS += info endif endif - SUBDIRS += install-info po po_document tta Pod-Simple-Texinfo \ - texindex util doc man - SUBDIRS += js + SUBDIRS += install-info js po po_document texindex tta Pod-Simple-Texinfo \ + util doc man endif distclean-local: diff --git a/info/Makefile.am b/info/Makefile.am index 265f538371..f66db95245 100644 --- a/info/Makefile.am +++ b/info/Makefile.am @@ -18,10 +18,18 @@ # distributed even without no-dist-built-sources AUTOMAKE_OPTIONS = 1.16 +if HAVE_TERMLIBS +bin_PROGRAMS = ginfo +else +# DOS/Windows don't need TERMLIBS to build Info +if HOST_IS_WINDOWS +bin_PROGRAMS = ginfo +endif +endif + # Use `ginfo' for building to avoid confusion with the standard `info' # target. Removes the `g' in the install rule before applying any # user-specified name transformations. -bin_PROGRAMS = ginfo transform = s/ginfo/info/; $(program_transform_name) AM_CPPFLAGS = \ @@ -34,7 +42,7 @@ AM_CPPFLAGS = \ -DSYSCONFDIR=\"$(sysconfdir)\" \ -DPKGDATADIR=\"$(pkgdatadir)\" -LDADD = $(top_builddir)/gnulib/lib/libgnu.a $(TERMLIBS) +LDADD = $(top_builddir)/gnulib/lib/libgnu.a # for various gnulib modules LDADD += $(LIBINTL) $(LIBICONV) $(LIBC32CONV) $(LIBUNISTRING) $(LIBTHREAD) @@ -45,6 +53,8 @@ LDADD += $(HARD_LOCALE_LIB) $(SETLOCALE_NULL_LIB) # for mbrtowc gnulib module which is brought in indirectly LDADD += $(MBRTOWC_LIB) +ginfo_LDADD = $(LDADD) $(TERMLIBS) + # Needed if make has not run in the "gnulib" directory yet ../gnulib/lib/libgnu.a: cd ../gnulib/lib && $(MAKE) $(AM_MAKEFLAGS)
