Raise the bar with regards to Python and Sphinx requirements
Subsystems (4)
cover Raise the bar with regards to Python and Sphinx requirements
This series increases the minimal requirements for Sphinx and Python, and drop some backward-compatible code from Sphinx extension.
Looking at Sphinx release dates:
Release 2.4.0 (released Feb 09, 2020) Release 2.4.4 (released Mar 05, 2020) (current minimal requirement) Release 3.4.0 (released Dec 20, 2020) Release 3.4.3 (released Jan 08, 2021) (https://www.sphinx-doc.org/en/master/changes/index.html)
And Python release dates, we have:
Python Release date 3.5 2015-09-13 (current minimal requirement) 3.6 2016-12-23 3.7 2018-06-27 3.8 2019-10-14 3.9 2020-10-05 3.10 2021-10-04 (according with https://en.wikipedia.org/w/index.php?title=History_of_Python)
The new minimal requirements are now compatible with the toolset available on Jan, 2021, e.g.:
- Sphinx 3.4.3;
- Python 3.9
The new Sphinx minimal requirement allows dropping all backward-compatible code we have at kernel-doc and at Sphinx extensions.
The new Python minimal requirement also matches the current required level for almost all scripts (*).
Those matches a 4-years old toolchain, which sounds a reasonable period of time, as Python/Sphinx aren't required for the Kernel build.
(*) Except for a couple scripts inside tools that require python 3.10:
$ vermin -v $(git ls-files '*.py')|grep 3.10
!2, 3.10 tools/net/sunrpc/xdrgen/generators/__init__.py
!2, 3.10 tools/net/sunrpc/xdrgen/generators/program.py
!2, 3.10 tools/net/sunrpc/xdrgen/subcmds/source.py
!2, 3.10 tools/net/sunrpc/xdrgen/xdr_ast.py
!2, 3.10 tools/perf/scripts/python/mem-phys-addr.py
!2, 3.10 tools/power/cpupower/bindings/python/test_raw_pylibcpupower.pySuch scripts aren't required for Kernel builds, so it should be OK to set minimal python version to 3.9.
Mauro Carvalho Chehab (4):
docs: changes: update Sphinx minimal version to 3.4.3
docs: changes: update Python minimal version
docs: extensions: don't use utf-8 syntax for descriptions scripts/kernel-doc: drop Sphinx version check
Documentation/conf.py | 2 +- Documentation/process/changes.rst | 4 +- Documentation/sphinx/cdomain.py | 7 +- Documentation/sphinx/kernel_abi.py | 6 +- Documentation/sphinx/kernel_feat.py | 4 +- Documentation/sphinx/kernel_include.py | 4 +- Documentation/sphinx/kerneldoc.py | 5 - Documentation/sphinx/kfigure.py | 10 +- Documentation/sphinx/load_config.py | 2 +- Documentation/sphinx/maintainers_include.py | 4 +- Documentation/sphinx/rstFlatTable.py | 10 +- scripts/kernel-doc | 129 +++----------------- 12 files changed, 41 insertions(+), 146 deletions(-)
Signature · 1 line
2.48.1
PATCH 1/4 docs: changes: update Sphinx minimal version to 3.4.3
Doing that allows us to get rid of all backward-compatible code.
--- Documentation/conf.py | 2 +- Documentation/process/changes.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Documentation/conf.py +1 -1
@@ -47,7 +47,7 @@ from load_config import loadConfig # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = '2.4.4' +needs_sphinx = '3.4.3' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
Documentation/process/changes.rst +1 -1
@@ -58,7 +58,7 @@ mcelog 0.6 mcelog --version iptables 1.4.2 iptables -V openssl & libcrypto 1.0.0 openssl version bc 1.06.95 bc --version -Sphinx\ [#f1]_ 2.4.4 sphinx-build --version +Sphinx\ [#f1]_ 3.4.3 sphinx-build --version GNU tar 1.28 tar --version gtags (optional) 6.6.5 gtags --version mkimage (optional) 2017.01 mkimage --version
Signature · 1 line
2.48.1
PATCH 2/4 docs: changes: update Python minimal version
In reply to Mauro Carvalho ChehabThe current minimal version doesn't match what we have currently at the Kernel:
$ vermin -v $(git ls-files *.py) ... Minimum required versions: 3.10 Incompatible versions: 2
Those are the Python scripts requiring versions higher than current minimal (3.5):
!2, 3.10 tools/net/sunrpc/xdrgen/generators/__init__.py
!2, 3.10 tools/net/sunrpc/xdrgen/generators/program.py
!2, 3.10 tools/net/sunrpc/xdrgen/subcmds/source.py
!2, 3.10 tools/net/sunrpc/xdrgen/xdr_ast.py
!2, 3.10 tools/power/cpupower/bindings/python/test_raw_pylibcpupower.py
!2, 3.9 tools/testing/selftests/net/rds/test.py
!2, 3.9 tools/net/ynl/ethtool.py
!2, 3.9 tools/net/ynl/cli.py
!2, 3.9 scripts/checktransupdate.py
!2, 3.8 tools/testing/selftests/tc-testing/plugin-lib/nsPlugin.py
!2, 3.8 tools/testing/selftests/hid/tests/base.py
!2, 3.7 tools/testing/selftests/turbostat/smi_aperf_mperf.py
!2, 3.7 tools/testing/selftests/turbostat/defcolumns.py
!2, 3.7 tools/testing/selftests/turbostat/added_perf_counters.py
!2, 3.7 tools/testing/selftests/hid/tests/conftest.py
!2, 3.7 tools/testing/kunit/qemu_config.py
!2, 3.7 tools/testing/kunit/kunit_tool_test.py
!2, 3.7 tools/testing/kunit/kunit.py
!2, 3.7 tools/testing/kunit/kunit_parser.py
!2, 3.7 tools/testing/kunit/kunit_kernel.py
!2, 3.7 tools/testing/kunit/kunit_json.py
!2, 3.7 tools/testing/kunit/kunit_config.py
!2, 3.7 tools/perf/scripts/python/gecko.py
!2, 3.7 scripts/rust_is_available_test.py
!2, 3.7 scripts/bpf_doc.py
!2, 3.6 tools/writeback/wb_monitor.py
!2, 3.6 tools/workqueue/wq_monitor.py
!2, 3.6 tools/workqueue/wq_dump.py
!2, 3.6 tools/usb/p9_fwd.py
!2, 3.6 tools/tracing/rtla/sample/timerlat_load.py
!2, 3.6 tools/testing/selftests/net/openvswitch/ovs-dpctl.py
!2, 3.6 tools/testing/selftests/net/nl_netdev.py
!2, 3.6 tools/testing/selftests/net/lib/py/ynl.py
!2, 3.6 tools/testing/selftests/net/lib/py/utils.py
!2, 3.6 tools/testing/selftests/net/lib/py/nsim.py
!2, 3.6 tools/testing/selftests/net/lib/py/netns.py
!2, 3.6 tools/testing/selftests/net/lib/py/ksft.py
!2, 3.6 tools/testing/selftests/kselftest/ksft.py
!2, 3.6 tools/testing/selftests/hid/tests/test_tablet.py
!2, 3.6 tools/testing/selftests/hid/tests/test_sony.py
!2, 3.6 tools/testing/selftests/hid/tests/test_multitouch.py
!2, 3.6 tools/testing/selftests/hid/tests/test_mouse.py
!2, 3.6 tools/testing/selftests/hid/tests/base_gamepad.py
!2, 3.6 tools/testing/selftests/hid/tests/base_device.py
!2, 3.6 tools/testing/selftests/drivers/net/stats.py
!2, 3.6 tools/testing/selftests/drivers/net/shaper.py
!2, 3.6 tools/testing/selftests/drivers/net/queues.py
!2, 3.6 tools/testing/selftests/drivers/net/ping.py
!2, 3.6 tools/testing/selftests/drivers/net/lib/py/remote_ssh.py
!2, 3.6 tools/testing/selftests/drivers/net/lib/py/load.py
!2, 3.6 tools/testing/selftests/drivers/net/lib/py/__init__.py
!2, 3.6 tools/testing/selftests/drivers/net/lib/py/env.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/rss_ctx.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/pp_alloc_fail.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/nic_performance.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/nic_link_layer.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/lib/py/linkconfig.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/lib/py/__init__.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/devmem.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/devlink_port_split.py
!2, 3.6 tools/testing/selftests/drivers/net/hw/csum.py
!2, 3.6 tools/testing/selftests/devices/probe/test_discoverable_devices.py
!2, 3.6 tools/testing/selftests/bpf/test_bpftool_synctypes.py
!2, 3.6 tools/testing/selftests/bpf/generate_udp_fragments.py
!2, 3.6 tools/testing/kunit/run_checks.py
!2, 3.6 tools/testing/kunit/kunit_printer.py
!2, 3.6 tools/sched_ext/scx_show_state.py
!2, 3.6 tools/perf/tests/shell/lib/perf_metric_validation.py
!2, 3.6 tools/perf/tests/shell/lib/perf_json_output_lint.py
!2, 3.6 tools/perf/scripts/python/parallel-perf.py
!2, 3.6 tools/perf/scripts/python/flamegraph.py
!2, 3.6 tools/perf/scripts/python/arm-cs-trace-disasm.py
!2, 3.6 tools/perf/pmu-events/models.py
!2, 3.6 tools/perf/pmu-events/metric_test.py
!2, 3.6 tools/perf/pmu-events/metric.py
!2, 3.6 tools/perf/pmu-events/jevents.py
!2, 3.6 tools/net/ynl/ynl-gen-rst.py
!2, 3.6 tools/net/ynl/ynl-gen-c.py
!2, 3.6 tools/net/ynl/lib/ynl.py
!2, 3.6 tools/net/ynl/lib/nlspec.py
!2, 3.6 tools/crypto/tcrypt/tcrypt_speed_compare.py
!2, 3.6 tools/cgroup/iocost_monitor.py
!2, 3.6 tools/cgroup/iocost_coef_gen.py
!2, 3.6 scripts/make_fit.py
!2, 3.6 scripts/macro_checker.py
!2, 3.6 scripts/get_abi.py
!2, 3.6 scripts/generate_rust_analyzer.py
!2, 3.6 scripts/gdb/linux/timerlist.py
!2, 3.6 scripts/gdb/linux/pgtable.py
!2, 3.6 scripts/clang-tools/run-clang-tools.py
!2, 3.6 Documentation/sphinx/automarkup.pyEven if we exclude tools/net/sunrpc/xdrgen/, the minimal version is Python 3.9.
Update process/changes to reflect the current minimal version required to run Python scripts outside tools.
--- Documentation/process/changes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/process/changes.rst +1 -1
@@ -62,7 +62,7 @@ Sphinx\ [#f1]_ 3.4.3 sphinx-build --version GNU tar 1.28 tar --version gtags (optional) 6.6.5 gtags --version mkimage (optional) 2017.01 mkimage --version -Python (optional) 3.5.x python3 --version +Python (optional) 3.9.x python3 --version GNU AWK (optional) 5.1.0 gawk --version ====================== =============== ========================================
Signature · 1 line
2.48.1
PATCH 3/4 docs: extensions: don't use utf-8 syntax for descriptions
In reply to Mauro Carvalho ChehabNone of the descriptions at the Sphinx extensions are using non-ascii characters, so no need to place them under u""" notation.
Also, according with:
https://docs.python.org/3/deprecations/pending-removal-in-3.16.html
the 'u' format code is scheduled to be removed in Python 3.16.
So, let's just use """.
--- Documentation/sphinx/cdomain.py | 4 ++-- Documentation/sphinx/kernel_abi.py | 6 +++--- Documentation/sphinx/kernel_feat.py | 4 ++-- Documentation/sphinx/kernel_include.py | 4 ++-- Documentation/sphinx/kfigure.py | 10 +++++----- Documentation/sphinx/load_config.py | 2 +- Documentation/sphinx/maintainers_include.py | 4 ++-- Documentation/sphinx/rstFlatTable.py | 10 +++++----- 8 files changed, 22 insertions(+), 22 deletions(-)
Documentation/sphinx/cdomain.py +2 -2
@@ -1,6 +1,6 @@ # -*- coding: utf-8; mode: python -*- # pylint: disable=W0141,C0113,C0103,C0325 -u""" +""" cdomain ~~~~~~~
@@ -145,7 +145,7 @@ class CObject(Base_CObject): } def handle_func_like_macro(self, sig, signode): - u"""Handles signatures of function-like macros. + """Handles signatures of function-like macros. If the objtype is 'function' and the signature ``sig`` is a function-like macro, the name of the macro is returned. Otherwise
Documentation/sphinx/kernel_abi.py +3 -3
@@ -2,7 +2,7 @@ # coding=utf-8 # SPDX-License-Identifier: GPL-2.0 # -u""" +""" kernel-abi ~~~~~~~~~~
@@ -55,7 +55,7 @@ path = os.path.join(srctree, "Documentation/ABI") _kernel_abi = None def get_kernel_abi(): - u""" + """ Initialize kernel_abi global var, if not initialized yet. This is needed to avoid warnings during Sphinx module initialization.
@@ -81,7 +81,7 @@ def setup(app): class KernelCmd(Directive): - u"""KernelABI (``kernel-abi``) directive""" + """KernelABI (``kernel-abi``) directive""" required_arguments = 1 optional_arguments = 3
Documentation/sphinx/kernel_feat.py +2 -2
@@ -1,7 +1,7 @@ # coding=utf-8 # SPDX-License-Identifier: GPL-2.0 # -u""" +""" kernel-feat ~~~~~~~~~~~
@@ -56,7 +56,7 @@ def setup(app): class KernelFeat(Directive): - u"""KernelFeat (``kernel-feat``) directive""" + """KernelFeat (``kernel-feat``) directive""" required_arguments = 1 optional_arguments = 2
Documentation/sphinx/kernel_include.py +2 -2
@@ -2,7 +2,7 @@ # -*- coding: utf-8; mode: python -*- # pylint: disable=R0903, C0330, R0914, R0912, E0401 -u""" +""" kernel-include ~~~~~~~~~~~~~~
@@ -56,7 +56,7 @@ def setup(app): class KernelInclude(Include): # ============================================================================== - u"""KernelInclude (``kernel-include``) directive""" + """KernelInclude (``kernel-include``) directive""" def run(self): env = self.state.document.settings.env
Documentation/sphinx/kfigure.py +5 -5
@@ -1,6 +1,6 @@ # -*- coding: utf-8; mode: python -*- # pylint: disable=C0103, R0903, R0912, R0915 -u""" +""" scalable figure and image handling ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -165,7 +165,7 @@ def setup(app): def setupTools(app): - u""" + """ Check available build tools and log some *verbose* messages. This function is called once, when the builder is initiated.
@@ -445,7 +445,7 @@ class kernel_image(nodes.image): pass class KernelImage(images.Image): - u"""KernelImage directive + """KernelImage directive Earns everything from ``.. image::`` directive, except *remote URI* and *glob* pattern. The KernelImage wraps a image node into a
@@ -481,7 +481,7 @@ class kernel_figure(nodes.figure): """Node for ``kernel-figure`` directive.""" class KernelFigure(Figure): - u"""KernelImage directive + """KernelImage directive Earns everything from ``.. figure::`` directive, except *remote URI* and *glob* pattern. The KernelFigure wraps a figure node into a kernel_figure
@@ -557,7 +557,7 @@ class kernel_render(nodes.General, nodes.Inline, nodes.Element): pass class KernelRender(Figure): - u"""KernelRender directive + """KernelRender directive Render content by external tool. Has all the options known from the *figure* directive, plus option ``caption``. If ``caption`` has a
Documentation/sphinx/load_config.py +1 -1
@@ -9,7 +9,7 @@ from sphinx.util.osutil import fs_encoding def loadConfig(namespace): # ------------------------------------------------------------------------------ - u"""Load an additional configuration file into *namespace*. + """Load an additional configuration file into *namespace*. The name of the configuration file is taken from the environment ``SPHINX_CONF``. The external configuration file extends (or overwrites) the
Documentation/sphinx/maintainers_include.py +2 -2
@@ -3,7 +3,7 @@ # -*- coding: utf-8; mode: python -*- # pylint: disable=R0903, C0330, R0914, R0912, E0401 -u""" +""" maintainers-include ~~~~~~~~~~~~~~~~~~~
@@ -37,7 +37,7 @@ def setup(app): ) class MaintainersInclude(Include): - u"""MaintainersInclude (``maintainers-include``) directive""" + """MaintainersInclude (``maintainers-include``) directive""" required_arguments = 0 def parse_maintainers(self, path):
Documentation/sphinx/rstFlatTable.py +5 -5
@@ -2,7 +2,7 @@ # -*- coding: utf-8; mode: python -*- # pylint: disable=C0330, R0903, R0912 -u""" +""" flat-table ~~~~~~~~~~
@@ -99,7 +99,7 @@ class colSpan(nodes.General, nodes.Element): pass # pylint: disable=C0103,C0321 class FlatTable(Table): # ============================================================================== - u"""FlatTable (``flat-table``) directive""" + """FlatTable (``flat-table``) directive""" option_spec = { 'name': directives.unchanged
@@ -135,7 +135,7 @@ class FlatTable(Table): class ListTableBuilder(object): # ============================================================================== - u"""Builds a table from a double-stage list""" + """Builds a table from a double-stage list""" def __init__(self, directive): self.directive = directive
@@ -212,7 +212,7 @@ class ListTableBuilder(object): raise SystemMessagePropagation(error) def parseFlatTableNode(self, node): - u"""parses the node from a :py:class:`FlatTable` directive's body""" + """parses the node from a :py:class:`FlatTable` directive's body""" if len(node) != 1 or not isinstance(node[0], nodes.bullet_list): self.raiseError(
@@ -225,7 +225,7 @@ class ListTableBuilder(object): self.roundOffTableDefinition() def roundOffTableDefinition(self): - u"""Round off the table definition. + """Round off the table definition. This method rounds off the table definition in :py:member:`rows`.
Signature · 1 line
2.48.1
PATCH 4/4 scripts/kernel-doc: drop Sphinx version check
In reply to Mauro Carvalho ChehabAs the current minimal supported Sphinx version is 3.4.3, drop support for older versions.
--- Documentation/sphinx/cdomain.py | 3 - Documentation/sphinx/kerneldoc.py | 5 -- scripts/kernel-doc | 129 ++++-------------------------- 3 files changed, 16 insertions(+), 121 deletions(-)
Documentation/sphinx/cdomain.py +0 -3
@@ -45,9 +45,6 @@ import re __version__ = '1.1' -# Get Sphinx version -major, minor, patch = sphinx.version_info[:3] - # Namespace to be prepended to the full name namespace = None
Documentation/sphinx/kerneldoc.py +0 -5
@@ -62,11 +62,6 @@ class KernelDocDirective(Directive): env = self.state.document.settings.env cmd = [env.config.kerneldoc_bin, '-rst', '-enable-lineno'] - # Pass the version string to kernel-doc, as it needs to use a different - # dialect, depending what the C domain supports for each specific - # Sphinx versions - cmd += ['-sphinx-version', sphinx.__version__] - filename = env.config.kerneldoc_srctree + '/' + self.arguments[0] export_file_patterns = []
scripts/kernel-doc +16 -113
206 lines not on this page · raw message
Signature · 1 line
2.48.1
Quoted 11 lines · Mauro Carvalho Chehab
This series increases the minimal requirements for Sphinx and Python, and drop some backward-compatible code from Sphinx extension.
Looking at Sphinx release dates:
Release 2.4.0 (released Feb 09, 2020) Release 2.4.4 (released Mar 05, 2020) (current minimal requirement) Release 3.4.0 (released Dec 20, 2020) Release 3.4.3 (released Jan 08, 2021) (https://www.sphinx-doc.org/en/master/changes/index.html)
(And those are positively ancient versions, too! 8.1.3 is current...)
Quoted 12 lines
And Python release dates, we have:
Python Release date 3.5 2015-09-13 (current minimal requirement) 3.6 2016-12-23 3.7 2018-06-27 3.8 2019-10-14 3.9 2020-10-05 3.10 2021-10-04 (according with https://en.wikipedia.org/w/index.php?title=History_of_Python)
Quoted 4 lines
The new minimal requirements are now compatible with the toolset available on Jan, 2021, e.g.:
- Sphinx 3.4.3;
- Python 3.9
I just did a quick sanity check against Ubuntu releases, and it all looks fine: Ubuntu 20.04 had sphinx 1.8.5, so it already can't build the docs. Ubuntu 22.04 has sphinx 4.3.2, so all good. Ubuntu 22.04 also has Python 3.10, so also okay.
Signature · 1 line
Kees Cook
Jonathan Corbet
maintainerQuoted 2 lines · Mauro Carvalho Chehab
This series increases the minimal requirements for Sphinx and Python, and drop some backward-compatible code from Sphinx extension.
OK, I've gone ahead and applied this series - let's see who screams...
Thanks,
jon