diff options
| author | Mauro Carvalho Chehab <mchehab+huawei@kernel.org> | 2025-11-21 12:05:28 +0100 |
|---|---|---|
| committer | Jonathan Corbet <corbet@lwn.net> | 2025-11-29 08:42:53 -0700 |
| commit | 464257baf99200d1be1c053f15aa617056361e81 (patch) | |
| tree | b8a51b668100439ddeec1271fdac9d9c7ebaf193 /tools/docs/sphinx-build-wrapper | |
| parent | b9a565b3e4d852d8af14f2c4be0b1dc45f0884b6 (diff) | |
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>
Diffstat (limited to 'tools/docs/sphinx-build-wrapper')
| -rwxr-xr-x | tools/docs/sphinx-build-wrapper | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/tools/docs/sphinx-build-wrapper b/tools/docs/sphinx-build-wrapper index d4943d952e2a..7a5fcef25429 100755 --- a/tools/docs/sphinx-build-wrapper +++ b/tools/docs/sphinx-build-wrapper @@ -119,6 +119,29 @@ class SphinxBuilder: 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): """ 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.check_rust() + # # If venv command line argument is specified, run Sphinx from venv # @@ -306,7 +331,7 @@ class SphinxBuilder: 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. @@ -327,7 +352,8 @@ class SphinxBuilder: except (OSError, IOError) as e: 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: cmd = [self.env["MAKE"]] else: @@ -622,7 +648,7 @@ class SphinxBuilder: shutil.rmtree(self.builddir, ignore_errors=True) 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): """ 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"]) - if rustdoc: + if self.rustdoc: args.extend(["-t", "rustdoc"]) if not sphinxdirs: @@ -749,7 +775,7 @@ class SphinxBuilder: # Ensure that each html/epub output will have needed static files # 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 @@ -804,9 +830,6 @@ def main(): parser.add_argument('--deny-vf', 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', help="place build in verbose mode") @@ -834,7 +857,7 @@ def main(): builder.build(args.target, sphinxdirs=args.sphinxdirs, 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) if __name__ == "__main__": |