[Intel-wired-lan] [PATCH 38/38] docs: kdoc_output: pick a better default for modulename

Mauro Carvalho Chehab
2026-02-18T10:13:47Z

Instead of placing the same data for modulename for all generated
man pages, use the directory from the filename used to produce
kernel docs as basis.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
tools/docs/kernel-doc | 1 -
tools/lib/python/kdoc/kdoc_output.py | 41 +++++++++++++++++-----------
2 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/tools/docs/kernel-doc b/tools/docs/kernel-doc
index aed09f9a54dd..3a932f95bdf5 100755
--- a/tools/docs/kernel-doc
+++ b/tools/docs/kernel-doc
@@ -210,7 +210,6 @@ def main():
help="Enable debug messages")

parser.add_argument("-M", "-modulename", "--modulename",
- default="Kernel API",
help="Allow setting a module name at the output.")

parser.add_argument("-l", "-enable-lineno", "--enable_lineno",
diff --git a/tools/lib/python/kdoc/kdoc_output.py b/tools/lib/python/kdoc/kdoc_output.py
index 1e3dc47bc696..44e40a6e8ca6 100644
--- a/tools/lib/python/kdoc/kdoc_output.py
+++ b/tools/lib/python/kdoc/kdoc_output.py
@@ -589,7 +589,8 @@ class ManFormat(OutputFormat):
``modulename``
Defines the module name to be used at the troff ``.TH`` output.

- This argument is mandatory.
+ This argument is optional. If not specified, it will be filled
+ with the directory which contains the documented file.

``section``
Usually a numeric value from 0 to 9, but man pages also accept
@@ -634,14 +635,21 @@ class ManFormat(OutputFormat):
"%m %d %Y",
]

- def emit_th(self, name):
+ def emit_th(self, name, args):
"""Emit a title header line."""
- name = name.strip()
+ title = name.strip()
+ module = self.modulename(args)

- self.data += f'.TH "{name}" {self.section} "{self.date}" '
- self.data += f' "{self.modulename}" "{self.manual}"\n'
+ self.data += f'.TH "{title}" {self.section} "{self.date}" '
+ self.data += f' "{module}" "{self.manual}"\n'

- def __init__(self, modulename, section="9", manual="Kernel API Manual"):
+ def modulename(self, args):
+ if self._modulename:
+ return self._modulename
+
+ return os.path.dirname(args.fname)
+
+ def __init__(self, modulename=None, section="9", manual="Kernel API Manual"):
"""
Creates class variables.

@@ -651,7 +659,7 @@ class ManFormat(OutputFormat):

super().__init__()

- self.modulename = modulename
+ self._modulename = modulename
self.section = section
self.manual = manual

@@ -685,7 +693,8 @@ class ManFormat(OutputFormat):
dtype = args.type

if dtype == "doc":
- return self.modulename
+ return name
+# return os.path.basename(self.modulename(args))

if dtype in ["function", "typedef"]:
return name
@@ -762,7 +771,7 @@ class ManFormat(OutputFormat):

out_name = self.arg_name(args, name)

- self.emit_th(out_name)
+ self.emit_th(out_name, args)

for section, text in args.sections.items():
self.data += f'.SH "{section}"' + "\n"
@@ -772,7 +781,7 @@ class ManFormat(OutputFormat):

out_name = self.arg_name(args, name)

- self.emit_th(out_name)
+ self.emit_th(out_name, args)

self.data += ".SH NAME\n"
self.data += f"{name} \\- {args['purpose']}\n"
@@ -818,7 +827,7 @@ class ManFormat(OutputFormat):
def out_enum(self, fname, name, args):
out_name = self.arg_name(args, name)

- self.emit_th(out_name)
+ self.emit_th(out_name, args)

self.data += ".SH NAME\n"
self.data += f"enum {name} \\- {args['purpose']}\n"
@@ -851,7 +860,7 @@ class ManFormat(OutputFormat):
out_name = self.arg_name(args, name)
full_proto = args.other_stuff["full_proto"]

- self.emit_th(out_name)
+ self.emit_th(out_name, args)

self.data += ".SH NAME\n"
self.data += f"{name} \\- {args['purpose']}\n"
@@ -868,11 +877,11 @@ class ManFormat(OutputFormat):
self.output_highlight(text)

def out_typedef(self, fname, name, args):
- module = self.modulename
+ module = self.modulename(args)
purpose = args.get('purpose')
out_name = self.arg_name(args, name)

- self.emit_th(out_name)
+ self.emit_th(out_name, args)

self.data += ".SH NAME\n"
self.data += f"typedef {name} \\- {purpose}\n"
@@ -882,12 +891,12 @@ class ManFormat(OutputFormat):
self.output_highlight(text)

def out_struct(self, fname, name, args):
- module = self.modulename
+ module = self.modulename(args)
purpose = args.get('purpose')
definition = args.get('definition')
out_name = self.arg_name(args, name)

- self.emit_th(out_name)
+ self.emit_th(out_name, args)

self.data += ".SH NAME\n"
self.data += f"{args.type} {name} \\- {purpose}\n"
--
2.52.0