mirror of https://github.com/torvalds/linux.git
docs: makefile: move rustdoc check to the build wrapper
The makefile logic to detect if rust is enabled is not working the way it was expected: instead of using the current setup for CONFIG_RUST, it uses a cached version from a previous build. The root cause is that the current logic inside docs/Makefile uses a cached version of CONFIG_RUST, from the last time a non documentation target was executed. That's perfectly fine for Sphinx build, as it doesn't need to read or depend on any CONFIG_*. So, instead of relying at the cache, move the logic to the wrapper script and let it check the current content of .config, to verify if CONFIG_RUST was selected. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <c06b1834ef02099735c13ee1109fa2a2b9e47795.1763722971.git.mchehab+huawei@kernel.org>
This commit is contained in:
parent
b9a565b3e4
commit
464257baf9
|
|
@ -42,12 +42,6 @@ FONTS_CONF_DENY_VF ?= $(HOME)/deny-vf
|
||||||
# User-friendly check for sphinx-build
|
# User-friendly check for sphinx-build
|
||||||
HAVE_SPHINX := $(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else echo 0; fi)
|
HAVE_SPHINX := $(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else echo 0; fi)
|
||||||
|
|
||||||
ifneq ($(wildcard $(srctree)/.config),)
|
|
||||||
ifeq ($(CONFIG_RUST),y)
|
|
||||||
RUSTDOC=--rustdoc
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(HAVE_SPHINX),0)
|
ifeq ($(HAVE_SPHINX),0)
|
||||||
|
|
||||||
.DEFAULT:
|
.DEFAULT:
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,29 @@ class SphinxBuilder:
|
||||||
|
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
def check_rust(self):
|
||||||
|
"""
|
||||||
|
Checks if Rust is enabled
|
||||||
|
"""
|
||||||
|
self.rustdoc = False
|
||||||
|
|
||||||
|
config = os.path.join(self.srctree, ".config")
|
||||||
|
|
||||||
|
if not os.path.isfile(config):
|
||||||
|
return
|
||||||
|
|
||||||
|
re_rust = re.compile(r"CONFIG_RUST=(m|y)")
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(config, "r", encoding="utf-8") as fp:
|
||||||
|
for line in fp:
|
||||||
|
if re_rust.match(line):
|
||||||
|
self.rustdoc = True
|
||||||
|
return
|
||||||
|
|
||||||
|
except OSError as e:
|
||||||
|
print(f"Failed to open {config}", file=sys.stderr)
|
||||||
|
|
||||||
def get_sphinx_extra_opts(self, n_jobs):
|
def get_sphinx_extra_opts(self, n_jobs):
|
||||||
"""
|
"""
|
||||||
Get the number of jobs to be used for docs build passed via command
|
Get the number of jobs to be used for docs build passed via command
|
||||||
|
|
@ -236,6 +259,8 @@ class SphinxBuilder:
|
||||||
|
|
||||||
self.get_sphinx_extra_opts(n_jobs)
|
self.get_sphinx_extra_opts(n_jobs)
|
||||||
|
|
||||||
|
self.check_rust()
|
||||||
|
|
||||||
#
|
#
|
||||||
# If venv command line argument is specified, run Sphinx from venv
|
# If venv command line argument is specified, run Sphinx from venv
|
||||||
#
|
#
|
||||||
|
|
@ -306,7 +331,7 @@ class SphinxBuilder:
|
||||||
|
|
||||||
return subprocess.call(cmd, *args, **pwargs)
|
return subprocess.call(cmd, *args, **pwargs)
|
||||||
|
|
||||||
def handle_html(self, css, output_dir, rustdoc):
|
def handle_html(self, css, output_dir):
|
||||||
"""
|
"""
|
||||||
Extra steps for HTML and epub output.
|
Extra steps for HTML and epub output.
|
||||||
|
|
||||||
|
|
@ -327,7 +352,8 @@ class SphinxBuilder:
|
||||||
except (OSError, IOError) as e:
|
except (OSError, IOError) as e:
|
||||||
print(f"Warning: Failed to copy CSS: {e}", file=sys.stderr)
|
print(f"Warning: Failed to copy CSS: {e}", file=sys.stderr)
|
||||||
|
|
||||||
if rustdoc:
|
if self.rustdoc:
|
||||||
|
print("Building rust docs")
|
||||||
if "MAKE" in self.env:
|
if "MAKE" in self.env:
|
||||||
cmd = [self.env["MAKE"]]
|
cmd = [self.env["MAKE"]]
|
||||||
else:
|
else:
|
||||||
|
|
@ -622,7 +648,7 @@ class SphinxBuilder:
|
||||||
shutil.rmtree(self.builddir, ignore_errors=True)
|
shutil.rmtree(self.builddir, ignore_errors=True)
|
||||||
|
|
||||||
def build(self, target, sphinxdirs=None,
|
def build(self, target, sphinxdirs=None,
|
||||||
theme=None, css=None, paper=None, deny_vf=None, rustdoc=False,
|
theme=None, css=None, paper=None, deny_vf=None,
|
||||||
skip_sphinx=False):
|
skip_sphinx=False):
|
||||||
"""
|
"""
|
||||||
Build documentation using Sphinx. This is the core function of this
|
Build documentation using Sphinx. This is the core function of this
|
||||||
|
|
@ -671,7 +697,7 @@ class SphinxBuilder:
|
||||||
|
|
||||||
args.extend(["-D", f"latex_elements.papersize={paper}paper"])
|
args.extend(["-D", f"latex_elements.papersize={paper}paper"])
|
||||||
|
|
||||||
if rustdoc:
|
if self.rustdoc:
|
||||||
args.extend(["-t", "rustdoc"])
|
args.extend(["-t", "rustdoc"])
|
||||||
|
|
||||||
if not sphinxdirs:
|
if not sphinxdirs:
|
||||||
|
|
@ -749,7 +775,7 @@ class SphinxBuilder:
|
||||||
# Ensure that each html/epub output will have needed static files
|
# Ensure that each html/epub output will have needed static files
|
||||||
#
|
#
|
||||||
if target in ["htmldocs", "epubdocs"]:
|
if target in ["htmldocs", "epubdocs"]:
|
||||||
self.handle_html(css, output_dir, rustdoc)
|
self.handle_html(css, output_dir)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Step 2: Some targets (PDF and info) require an extra step once
|
# Step 2: Some targets (PDF and info) require an extra step once
|
||||||
|
|
@ -804,9 +830,6 @@ def main():
|
||||||
parser.add_argument('--deny-vf',
|
parser.add_argument('--deny-vf',
|
||||||
help="Configuration to deny variable fonts on pdf builds")
|
help="Configuration to deny variable fonts on pdf builds")
|
||||||
|
|
||||||
parser.add_argument('--rustdoc', action="store_true",
|
|
||||||
help="Enable rustdoc build. Requires CONFIG_RUST")
|
|
||||||
|
|
||||||
parser.add_argument("-v", "--verbose", action='store_true',
|
parser.add_argument("-v", "--verbose", action='store_true',
|
||||||
help="place build in verbose mode")
|
help="place build in verbose mode")
|
||||||
|
|
||||||
|
|
@ -834,7 +857,7 @@ def main():
|
||||||
|
|
||||||
builder.build(args.target, sphinxdirs=args.sphinxdirs,
|
builder.build(args.target, sphinxdirs=args.sphinxdirs,
|
||||||
theme=args.theme, css=args.css, paper=args.paper,
|
theme=args.theme, css=args.css, paper=args.paper,
|
||||||
rustdoc=args.rustdoc, deny_vf=args.deny_vf,
|
deny_vf=args.deny_vf,
|
||||||
skip_sphinx=args.skip_sphinx_build)
|
skip_sphinx=args.skip_sphinx_build)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue