Re: [PATCH v3 1/6] docs: kdoc: add GNU Make detection

Mauro Carvalho Chehab <[email protected]>
Newsgroups org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Thu, 13 Aug 2026 02:23:18 +0800
Chen Miao <[email protected]> wrote:

> The Sphinx dependency checker and build wrapper need to select a GNU
> Make executable that meets the minimum supported version. Keep the version
> parsing and command selection in a common module so both tools use
> identical behavior.
> 
> Signed-off-by: Chen Miao <[email protected]>
> ---
>  tools/lib/python/kdoc/gmake_detect.py | 62 +++++++++++++++++++++++++++
>  1 file changed, 62 insertions(+)
>  create mode 100644 tools/lib/python/kdoc/gmake_detect.py
> 
> diff --git a/tools/lib/python/kdoc/gmake_detect.py b/tools/lib/python/kdoc/gmake_detect.py
> new file mode 100644
> index 000000000..5c0a28bc7
> --- /dev/null
> +++ b/tools/lib/python/kdoc/gmake_detect.py
> @@ -0,0 +1,62 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# Copyright (c) 2026 Chen Miao <[email protected]>
> +
> +"""Detect a supported GNU Make executable."""
> +
> +import re
> +import shutil
> +import subprocess
> +import sys
> +
> +from kdoc.python_version import PythonVersion

Did you test it? since python_version is at the same directory,
I would expect it to be:

	from python_version import PythonVersion

> +
> +
> +MIN_GMAKE_VERSION = PythonVersion("4.0").version
> +
> +
> +def get_gmake_version(cmd):
> +    """Return the GNU Make version for *cmd*, or ``None`` otherwise."""
> +    if not cmd:
> +        return None
> +
> +    kwargs = {}
> +    if sys.version_info < (3, 7):
> +        kwargs["universal_newlines"] = True
> +    else:
> +        kwargs["text"] = True
> +
> +    try:
> +        result = subprocess.run(
> +            [cmd, "--version"],
> +            stdout=subprocess.PIPE,
> +            stderr=subprocess.PIPE,
> +            check=True,
> +            **kwargs,
> +        )
> +    except (OSError, subprocess.CalledProcessError):
> +        return None
> +
> +    match = re.search(
> +        r"^GNU Make\s+([0-9]+(?:\.[0-9]+)*)", result.stdout, re.MULTILINE
> +    )
> +    if not match:
> +        return None
> +
> +    return PythonVersion.parse_version(match.group(1))
> +
> +
> +def find_gmake(make=None):
> +    """Return the first GNU Make 4.0+ from MAKE, gmake, or make."""
> +    candidates = (
> +        make,
> +        shutil.which("gmake"),
> +        shutil.which("make"),
> +    )
> +
> +    for cmd in candidates:
> +        version = get_gmake_version(cmd)
> +        if version and version >= MIN_GMAKE_VERSION:
> +            return cmd
> +
> +    return None



Thanks,
Mauro
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.