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@xxxxxxxxxx> --- scripts/sphinx-build-wrapper | 10 ++++++++++ scripts/sphinx-pre-install | 14 +++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/scripts/sphinx-build-wrapper b/scripts/sphinx-build-wrapper index f6fec766c3e6..f21701d34552 100755 --- a/scripts/sphinx-build-wrapper +++ b/scripts/sphinx-build-wrapper @@ -45,6 +45,7 @@ the newer version. """ import argparse +import locale import os import re import shlex @@ -495,6 +496,15 @@ class SphinxBuilder: if not sphinxdirs: sphinxdirs = os.environ.get("SPHINXDIRS", ".") + # 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: + locale.setlocale(locale.LC_ALL, '') + except Exception: + self.env["LC_ALL"] = "C" + self.env["LANG"] = "C" + # sphinxdirs can be a list or a whitespace-separated string sphinxdirs_list = [] for sphinxdir in sphinxdirs: diff --git a/scripts/sphinx-pre-install b/scripts/sphinx-pre-install index c46d7b76f93c..50ae9cfcb3d7 100755 --- a/scripts/sphinx-pre-install +++ b/scripts/sphinx-pre-install @@ -26,6 +26,7 @@ system pacage install is recommended. """ import argparse +import locale import os import re import subprocess @@ -516,8 +517,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) -- 2.50.1