tools/docs,scripts: sphinx-*: prevent sphinx-build crashes

On a properly set system, LANG and LC_ALL is always defined.
However, some distros like Debian, Gentoo and their variants
start with those undefioned.

When Sphinx tries to set a locale with:

	locale.setlocale(locale.LC_ALL, '')

It raises an exception, making Sphinx fail. This is more likely
to happen with test containers.

Add a logic to detect and workaround such issue by setting
locale to C.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Message-ID: <1d0afad8fe3d83182be3a08eb00dd71322e23e69.1758196090.git.mchehab+huawei@kernel.org>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
Mauro Carvalho Chehab authored and Jonathan Corbet committed 2025-09-18 11:18:39 -06:00
1 parent 08e14bc17e
commit 82c294d453
2 files changed
+24 -1

No files matched your search

+13 -1
View File
@@ -26,6 +26,7 @@ system pacage install is recommended.
"""
import argparse
import locale
import os
import re
import subprocess
@@ -422,8 +423,19 @@ class MissingCheckers(AncillaryMethods):
"""
Gets sphinx-build version.
"""
env = os.environ.copy()
# The sphinx-build tool has a bug: internally, it tries to set
# locale with locale.setlocale(locale.LC_ALL, ''). This causes a
# crash if language is not set. Detect and fix it.
try:
result = self.run([cmd, "--version"],
locale.setlocale(locale.LC_ALL, '')
except Exception:
env["LC_ALL"] = "C"
env["LANG"] = "C"
try:
result = self.run([cmd, "--version"], env=env,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True, check=True)