bug#81332: info/dir and INFO_NONMISC are not gated by DOCLANGS

Vincent Belaïche <[email protected]> Tue, 4 Aug 2026 12:14:49 +0000
Newsgroups gmane.emacs.bugs
Message-ID <AMBP194MB2691BE5E2BCFC0B2832F314084D42@AMBP194MB2691.EURP194.PROD.OUTLOOK.COM>
--_000_AMBP194MB2691BE5E2BCFC0B2832F314084D42AMBP194MB2691EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Dear Boris and Eli,

IMHO it is not such a good idea to have specific handling for some manuals.=
 This makes makefiles more complex and hard to maintain.

Concerning Eli's point:

> THose 3 manuals must always be built and always be installed,
> regardless of DOCLANGS.

I acknowledge that some manuals are really needed to be installed in a norm=
al build. However, on the other hand, it should be possible for the aware u=
ser to configure the build without those manuals. I mean that it should be =
possible to build the Emacs executable on a machine on which the makeinfo t=
ools are not available. The Emacs executable should be able to be installed=
, start and run w/o crashing even though the mandatory manuals are not inst=
alled. The user should get some error message, just like when some applicat=
ion's DLL is not there and you cannot load it, one gets an error message te=
lling which DLL is missing.

I understand that this is not the case, and currently makeinfo is a build p=
rerequisite. Please don't take me wrong: I am not saying that the user shou=
ld be anyhow encouraged not to compile & install the manuals. My point is t=
hat having some manual build mandated prevents code factorization in the ma=
kefiles, and that also prevents aware users to disable the manual building =
(at their own risks of not getting appropriate documentation when using Ema=
cs) to get some minimalistic build. My recommendation is that makeinfo shou=
ld just be highly recommended, but just like the TeX texinfo compiler, shou=
ld not be absolutely mandated (meaning that it is ok if there is some trick=
 like setting DOCLANGS to ' ' to disable manual compilation altogether).

I a nutshell, I am not proposing to change anything in what the default bui=
ld would produce, but just to have more flexibility/modularity as regards m=
anual compilation enabling/disabling (by default DOCLANGS contains at least=
 default, so the mandatory manuals would still be compiled by default with =
my proposal).

Here, I am not discussing any technicalities in details, because what I am =
suggesting above needs first to be discussed/accepted/rejected.

    Vincent.

________________________________
De : Boris <[email protected]>
Envoy=E9 : mardi 28 juillet 2026 17:43
=C0 : Eli Zaretskii <[email protected]>
Cc : [email protected] <[email protected]>; [email protected] =
<[email protected]>
Objet : Re: bug#81332: info/dir and INFO_NONMISC are not gated by DOCLANGS

> THose 3 manuals must always be built and always be installed,
> regardless of DOCLANGS.

Understood, and then the situation is worse than what I described: with DOC=
LANGS that does not contain default, those three manuals are not built at a=
ll on master right now. info/dir and INFO_NONMISC listing them is the corre=
ct part; the build is the broken part.

That is a regression from my second patch. Before it, every doc directory r=
an one sub-make per language, and doc/emacs, doc/lispintro and doc/lispref =
have no DOCLANG in their Makefiles, so each of those sub-makes just rebuilt=
 the default manual. That is what caused the duplicate copies under make -j=
. My fix made the language list per directory, and with default filtered ou=
t those directories ended up with nothing to build.

So the fix goes the other way round: doc/emacs, doc/lispintro and doc/lispr=
ef always build the default language, whatever DOCLANGS says, while doc/mis=
c keeps honoring it. Then info/dir and INFO_NONMISC stay exactly as they ar=
e, no gating anywhere.

That also drops the build-aux question: info/dir always has those three ent=
ries, so make-info-dir never gets fewer than two arguments, and I do not ne=
ed to touch it.

One question before I write the patch: should doc/misc keep honoring DOCLAN=
GS? With DOCLANGS=3D'fr' it currently builds only ses-fr, and the English m=
isc manuals are skipped. I plan to leave that as is, since those manuals ar=
e not referenced from doc strings, but say the word if you want default for=
ced everywhere.

Vincent: this also means empty DOCLANGS will no longer disable all manuals,=
 the three above will still be built. Given Eli's requirement I do not thin=
k we can keep that property.

I will send the patch once the doc/misc question is settled.

Cheers,
[email protected]

On Tuesday, 28 July 2026 at 18:34, Eli Zaretskii <[email protected]> wrote:

> > Date: Tue, 28 Jul 2026 15:23:40 +0000
> > From: Boris <[email protected]>
> > Cc: Eli Zaretskii <[email protected]>, Vincent Belaiche <vincent.b.1@hotmail=
.fr>
> >
> > The bug is closed and this is not a regression from the patches, so thi=
s is just a question: is the remaining DOCLANGS inconsistency worth fixing?=
 I mentioned it when Vincent and I discussed the empty DOCLANGS case, and I=
 said I could take it as a follow-up.
> >
> > Two places still hardcode the three built-in manuals:
> >
> > - srcdir_doc_info_dir_inputs lists doc/emacs/emacs.texi, doc/lispintro/=
emacs-lisp-intro.texi and doc/lispref/elisp.texi unconditionally, while the=
 misc entries are gated (texi_misc_default only exists when default is in D=
OCLANGS)
> > - INFO_NONMISC lists the same three .info files for install-info
> >
> > The visible effect is with DOCLANGS=3D'fr' (or any set without default)=
: emacs-info, lispintro-info and lispref-info are no-ops, so those manuals =
are never built, but info/dir still lists them, and install-info still runs=
 install-info on them. The latter is invisible today only because the recip=
e ignores errors.
>
> THose 3 manuals must always be built and always be installed,
> regardless of DOCLANGS.  The first two are referenced from various doc
> strings, and the 3rd one (Lisp Intro) is important enough part of
> Emacs to be available regardless of the language preferences of the
> user who builds the manuals.
>
> > Gating both on $(filter default,$(DOCLANGS)) is a small change. One det=
ail: build-aux/make-info-dir starts with "test $# -ge 2 || exit 1", so with=
 empty DOCLANGS everything would be gated away and "make info" would fail i=
nstead of generating a dir file. I would relax that to -ge 1, so info/dir i=
s still generated with the header and no entries.
>
> Can we do that without involving build-aux/ files?  Those files are
> from Gnulib, so I'd prefer our local tricks to be just ours.
>
> Thanks.
>

--_000_AMBP194MB2691BE5E2BCFC0B2832F314084D42AMBP194MB2691EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"> P {margin-top:0;margin-bo=
ttom:0;} </style>
</head>
<body dir=3D"ltr">
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
Dear Boris and Eli,</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
IMHO it is not such a good idea to have specific handling for some manuals.=
 This makes makefiles more complex and hard to maintain.</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
Concerning Eli's point:</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
&gt; THose 3 manuals must always be built and always be installed,<br>
&gt; regardless of DOCLANGS.</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
I acknowledge that some manuals are really needed to be installed in a norm=
al build. However, on the other hand, it should be possible for the aware u=
ser to configure the build without those manuals. I mean that it should be =
possible to build the Emacs executable
 on a machine on which the makeinfo tools are not available. The Emacs exec=
utable should be able to be installed, start and run w/o crashing even thou=
gh the mandatory manuals are not installed. The user should get some error =
message, just like when some application's
 DLL is not there and you cannot load it, one gets an error message telling=
 which DLL is missing.</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
I understand that this is not the case, and currently makeinfo is a build p=
rerequisite. Please don't take me wrong: I am not saying that the user shou=
ld be anyhow encouraged not to compile &amp; install the manuals. My point =
is that having some manual build mandated
 prevents code factorization in the makefiles, and that also prevents aware=
 users to disable the manual building (at their own risks of not getting ap=
propriate documentation when using Emacs) to get some minimalistic build. M=
y recommendation is that makeinfo
 should just be highly recommended, but just like the TeX texinfo compiler,=
 should not be absolutely mandated (meaning that it is ok if there is some =
trick like setting DOCLANGS to ' ' to disable manual compilation altogether=
).</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
I a nutshell, I am not proposing to change anything in what the default bui=
ld would produce, but just to have more flexibility/modularity as regards m=
anual compilation enabling/disabling (by default DOCLANGS contains at least=
 default, so the mandatory manuals
 would still be compiled by default with my proposal).</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
Here, I am not discussing any technicalities in details, because what I am =
suggesting above needs first to be discussed/accepted/rejected.&nbsp;</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class=3D"elementToProof" style=3D"font-family: &quot;Courier New&quot;=
, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
&nbsp; &nbsp; Vincent.</div>
<div style=3D"font-family: &quot;Courier New&quot;, monospace; font-size: 1=
2pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr style=3D"display: inline-block; width: 98%;">
<div id=3D"divRplyFwdMsg">
<div style=3D"direction: ltr; font-family: Calibri, sans-serif; font-size: =
11pt; color: rgb(0, 0, 0);">
<b>De :</b> Boris &lt;[email protected]&gt;<br>
<b>Envoy=E9 :</b> mardi 28 juillet 2026 17:43<br>
<b>=C0 :</b> Eli Zaretskii &lt;[email protected]&gt;<br>
<b>Cc&nbsp;:</b> [email protected] &lt;[email protected]&gt;; vince=
[email protected] &lt;[email protected]&gt;<br>
<b>Objet :</b> Re: bug#81332: info/dir and INFO_NONMISC are not gated by DO=
CLANGS</div>
<div style=3D"direction: ltr;">&nbsp;</div>
</div>
<div style=3D"font-size: 11pt;">&gt; THose 3 manuals must always be built a=
nd always be installed,<br>
&gt; regardless of DOCLANGS.<br>
<br>
Understood, and then the situation is worse than what I described: with DOC=
LANGS that does not contain default, those three manuals are not built at a=
ll on master right now. info/dir and INFO_NONMISC listing them is the corre=
ct part; the build is the broken
 part.<br>
<br>
That is a regression from my second patch. Before it, every doc directory r=
an one sub-make per language, and doc/emacs, doc/lispintro and doc/lispref =
have no DOCLANG in their Makefiles, so each of those sub-makes just rebuilt=
 the default manual. That is what
 caused the duplicate copies under make -j. My fix made the language list p=
er directory, and with default filtered out those directories ended up with=
 nothing to build.<br>
<br>
So the fix goes the other way round: doc/emacs, doc/lispintro and doc/lispr=
ef always build the default language, whatever DOCLANGS says, while doc/mis=
c keeps honoring it. Then info/dir and INFO_NONMISC stay exactly as they ar=
e, no gating anywhere.<br>
<br>
That also drops the build-aux question: info/dir always has those three ent=
ries, so make-info-dir never gets fewer than two arguments, and I do not ne=
ed to touch it.<br>
<br>
One question before I write the patch: should doc/misc keep honoring DOCLAN=
GS? With DOCLANGS=3D'fr' it currently builds only ses-fr, and the English m=
isc manuals are skipped. I plan to leave that as is, since those manuals ar=
e not referenced from doc strings,
 but say the word if you want default forced everywhere.<br>
<br>
Vincent: this also means empty DOCLANGS will no longer disable all manuals,=
 the three above will still be built. Given Eli's requirement I do not thin=
k we can keep that property.<br>
<br>
I will send the patch once the doc/misc question is settled.<br>
<br>
Cheers,<br>
[email protected]<br>
<br>
On Tuesday, 28 July 2026 at 18:34, Eli Zaretskii &lt;[email protected]&gt; wrote=
:<br>
<br>
&gt; &gt; Date: Tue, 28 Jul 2026 15:23:40 +0000<br>
&gt; &gt; From: Boris &lt;[email protected]&gt;<br>
&gt; &gt; Cc: Eli Zaretskii &lt;[email protected]&gt;, Vincent Belaiche &lt;vinc=
[email protected]&gt;<br>
&gt; &gt;<br>
&gt; &gt; The bug is closed and this is not a regression from the patches, =
so this is just a question: is the remaining DOCLANGS inconsistency worth f=
ixing? I mentioned it when Vincent and I discussed the empty DOCLANGS case,=
 and I said I could take it as a follow-up.<br>
&gt; &gt;<br>
&gt; &gt; Two places still hardcode the three built-in manuals:<br>
&gt; &gt;<br>
&gt; &gt; - srcdir_doc_info_dir_inputs lists doc/emacs/emacs.texi, doc/lisp=
intro/emacs-lisp-intro.texi and doc/lispref/elisp.texi unconditionally, whi=
le the misc entries are gated (texi_misc_default only exists when default i=
s in DOCLANGS)<br>
&gt; &gt; - INFO_NONMISC lists the same three .info files for install-info<=
br>
&gt; &gt;<br>
&gt; &gt; The visible effect is with DOCLANGS=3D'fr' (or any set without de=
fault): emacs-info, lispintro-info and lispref-info are no-ops, so those ma=
nuals are never built, but info/dir still lists them, and install-info stil=
l runs install-info on them. The latter
 is invisible today only because the recipe ignores errors.<br>
&gt;<br>
&gt; THose 3 manuals must always be built and always be installed,<br>
&gt; regardless of DOCLANGS.&nbsp; The first two are referenced from variou=
s doc<br>
&gt; strings, and the 3rd one (Lisp Intro) is important enough part of<br>
&gt; Emacs to be available regardless of the language preferences of the<br=
>
&gt; user who builds the manuals.<br>
&gt;<br>
&gt; &gt; Gating both on $(filter default,$(DOCLANGS)) is a small change. O=
ne detail: build-aux/make-info-dir starts with &quot;test $# -ge 2 || exit =
1&quot;, so with empty DOCLANGS everything would be gated away and &quot;ma=
ke info&quot; would fail instead of generating a dir file.
 I would relax that to -ge 1, so info/dir is still generated with the heade=
r and no entries.<br>
&gt;<br>
&gt; Can we do that without involving build-aux/ files?&nbsp; Those files a=
re<br>
&gt; from Gnulib, so I'd prefer our local tricks to be just ours.<br>
&gt;<br>
&gt; Thanks.<br>
&gt;</div>
</body>
</html>

--_000_AMBP194MB2691BE5E2BCFC0B2832F314084D42AMBP194MB2691EURP_--