Restore kernel-doc support for Python 3.6
cover Restore kernel-doc support for Python 3.6
Hi Jon,
While discussing patch v2 12/12 from your kdoc series, I realized that kernel-doc command line should not crash with Python 3.6, nor cause compilation breakages with older versions.
The problem mainly affect builds with CONFIG_DRM enabled, due to:
drivers/gpu/drm/Makefile: PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \ drivers/gpu/drm/i915/Makefile: cmd_checkdoc = PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none -Werror $< include/drm/Makefile: PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
This small series prevent Kernel build breakages on such case, and it is meant to be merged after your kdoc patches.
Patch 1 emits a warning wih Python 3.7 siilar to kdoc class, but on an early stage. More importantly, it emits a warning and exits the script for versions <= 3.6.
We still need the kdoc warning, as it detect troubles when calling kernel-doc as a class.
Patch 2 fix a backward-compatibility issue that otherwise would require Python 3.9.
With that, building the Kernel with older versions won't break.
Regards,
Mauro
Mauro Carvalho Chehab (2):
docs: kernel-doc: emit warnings for ancient versions of Python
scripts: kdoc: make it backward-compatible with Python 3.7
scripts/kernel-doc.py | 10 ++++++++++ scripts/lib/kdoc/kdoc_parser.py | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-)
Signature · 1 line
2.50.0
PATCH 1/2 docs: kernel-doc: emit warnings for ancient versions of Python
Kernel-doc requires at least version 3.6 to run, as it uses f-string. Yet, Kernel build currently calls kernel-doc with -none on some places. Better not to bail out when older versions are found.
Versions of Python prior to 3.7 do not guarantee to remember the insertion order of dicts; since kernel-doc depends on that guarantee, running with such older versions could result in output with reordered sections.
Check Python version when called via command line.
--- scripts/kernel-doc.py | 10 ++++++++++ 1 file changed, 10 insertions(+)
scripts/kernel-doc.py +10 -0
@@ -271,6 +271,16 @@ def main(): logger.addHandler(handler) + python_ver = sys.version_info[:2] + if python_ver < (3,6): + logger.warning("Python 3.6 or later is required by kernel-doc") + + # Return 0 here to avoid breaking compilation + sys.exit(0) + + if python_ver < (3,7): + logger.warning("Python 3.7 or later is required for correct results") + if args.man: out_style = ManFormat(modulename=args.modulename) elif args.none:
Signature · 1 line
2.50.0
PATCH 2/2 scripts: kdoc: make it backward-compatible with Python 3.7
In reply to Mauro Carvalho ChehabThere was a change at kdoc that ended breaking compatibility with Python 3.7: str.removesuffix() was introduced on version 3.9.
Restore backward compatibility.
--- scripts/lib/kdoc/kdoc_parser.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
scripts/lib/kdoc/kdoc_parser.py +3 -1
@@ -1214,7 +1214,9 @@ class KernelDoc: # Found an export, trim out any special suffixes # for suffix in suffixes: - symbol = symbol.removesuffix(suffix) + # Be backward compatible with Python < 3.9 + if symbol.endswith(suffix): + symbol = symbol[:-len(suffix)] function_set.add(symbol) return True
Signature · 1 line
2.50.0
Jonathan Corbet
maintainerRe: [PATCH 1/2] docs: kernel-doc: emit warnings for ancient versions of Python
In reply to Mauro Carvalho ChehabQuoted 20 lines · Mauro Carvalho Chehab
Kernel-doc requires at least version 3.6 to run, as it uses f-string. Yet, Kernel build currently calls kernel-doc with -none on some places. Better not to bail out when older versions are found.
Versions of Python prior to 3.7 do not guarantee to remember the insertion order of dicts; since kernel-doc depends on that guarantee, running with such older versions could result in output with reordered sections.
Check Python version when called via command line.
Signed-off-by Mauro Carvalho Chehab <[email protected]>--- scripts/kernel-doc.py | 10 ++++++++++ 1 file changed, 10 insertions(+)scripts/kernel-doc.py +0
-0
scripts/kernel-doc.py def main(): · line 276
Quoted 6 lines
scripts/kernel-doc.py +3
-0@@ -271,6 +271,16 @@ def main(): logger.addHandler(handler) + python_ver = sys.version_info[:2] + if python_ver < (3,6): + logger.warning("Python 3.6 or later is required by kernel-doc")
Does this really work on truly old Python versions? I don't have an easy way to try it, but I would expect things to fail with a syntax error (due to the f-strings) at the import stage...?
Thanks,
jon