emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: how to run makeinfo in a subprocess on Windows?


From: Eli Zaretskii
Subject: Re: how to run makeinfo in a subprocess on Windows?
Date: Mon, 06 Sep 2021 08:20:32 +0300

> From: Stephen Leake <stephen_leake@stephe-leake.org>
> Date: Sun, 05 Sep 2021 15:47:38 -0700
> 
> When the source for a doc is .texi, that requires running "makeinfo".
> elpa-admin does this via call-process, doing something like:
> 
> (let ((default-directory "c:/Projects/elpa/packages/ada-mode/")
>       (docfile "ada-mode.texi")
>       (html-file "doc/ada-mode/ada-mode.html"))
>   (call-process "makeinfo" docfile nil nil "--no-split" "--html" "-o" 
> html-file))
> 
> and that works fine on Debian.
> 
> However, on Windows, I get :
> let: Searching for program: Permission denied, makeinfo
> 
> I suspect the problem is that "makeinfo" is actually a perl script, and
> it has "#! /usr/bin/perl" on the first line. On Debian, the lower-level
> system call that actually starts the process apparently knows how to
> handle that; it starts perl, and passes it "makeinfo" and the other args.

Where did you get the Windows binary Texinfo distribution?  If done
right for native MS-Windows, such a binary distribution should install
on PATH the makeinfo.bat batch file in addition to makeinfo the Perl
script, and Emacs is supposed to find the batch file and invoke it
instead of the Perl script.  However, I'm not sure MSYS2/MinGW64
provide a native MinGW Texinfo package, in which case what you have is
the MSYS2 port of Texinfo, and that isn't good in general for using it
from a native w32 Emacs.

> However, on Windows that doesn't happen. I suspect if I was running the
> mingw64 version of Emacs, it would work. The emacs I'm running is built
> using mingw64 tools, but it uses the native Windows OS, not the
> mingw64 layer.

There's a terminology problem here.  MinGW64 executables are native
Windows executables, so the Emacs you are running _is_ "the mingw64
version of Emacs".  The non-native executables provided by MSYS2 are
called "MSYS2 executables", and are similar to Cygwin executables:
they need a special DLL to run on Windows, and have features and
peculiarities whose intent is to run smoothly inside Bash and interact
smoothly with other MSYS2 programs.

> Is there a suggested way to handle this? I can just add code to
> elpa-admin to run perl explicitly when on Windows, but I'm hoping
> there's already code somewhere that handles this.

The official upstream Texinfo tarball includes makeinfo.bat, so if the
binary distribution you have doesn't have it, you could try installing
that by hand and using it.  Or just write it yourself, it's very
simple:

  @echo off
  setlocal
  set TEXINFO_XS_PARSER=1
  perl "%~dpn0" %*
  endlocal

If this somehow doesn't work, try commenting out the "set" command,
maybe your Texinfo binaries were built without XS support.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]