The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Weijie Yuan <wy@wyuan.org>
To: Chen Miao <chenmiao.ku@gmail.com>
Cc: corbet@lwn.net, alexs@kernel.org, si.yanteng@linux.dev,
	skhan@linuxfoundation.org, dzm91@hust.edu.cn, mchehab@kernel.org,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 1/2] docs: sphinx-pre-install: add macOS Homebrew support
Date: Sun, 9 Aug 2026 21:02:35 +0800	[thread overview]
Message-ID: <anh6axawbEiF37WD@wyuan.org> (raw)
In-Reply-To: <20260809101923.13176-2-chenmiao.ku@gmail.com>

Hi Miao,

On Sun, Aug 09, 2026 at 06:19:20PM +0800, Chen Miao wrote:
> The dependency checker currently reports an unknown distribution on macOS
> and cannot provide installation hints.
> 
> Detect macOS and include its product version in the status output. Use
> Homebrew for formula dependencies and install MacTeX as a cask without
> sudo. Keep PyYAML in the virtual environment requirements because
> Homebrew does not provide a PyYAML formula.
> 
> Document the macOS setup and the --no-pdf option.
> 
> Signed-off-by: Chen Miao <chenmiao.ku@gmail.com>
> ---
>  Documentation/doc-guide/sphinx.rst            |  7 ++
>  .../translations/zh_CN/doc-guide/sphinx.rst   |  5 ++
>  Documentation/translations/zh_CN/how-to.rst   |  6 ++
>  tools/docs/sphinx-pre-install                 | 89 ++++++++++++++++++-
>  4 files changed, 106 insertions(+), 1 deletion(-)
[...]
> diff --git a/Documentation/translations/zh_CN/how-to.rst b/Documentation/translations/zh_CN/how-to.rst
> index 9ec2384e1..e8c91d81a 100644
> --- a/Documentation/translations/zh_CN/how-to.rst
> +++ b/Documentation/translations/zh_CN/how-to.rst
> @@ -102,6 +102,12 @@ Linux 发行版和简单地使用 Linux 命令行,那么可以迅速开始了
>  开头的命令。**请注意**,最新版本 Sphinx 的文档编译速度有极大提升,强烈建议
>  您通过 pip/pypi 安装最新版本 Sphinx。
>  
> +如果您使用 macOS,脚本会使用 Homebrew 输出安装命令,Homebrew 命令不需要
> +sudo。PDF 构建所需的 MacTeX 通过 Homebrew cask 安装;如果只构建 HTML 文档,
> +可以执行 ``./tools/docs/sphinx-pre-install --no-pdf``。macOS 用户建议使用默认
> +的 Python 虚拟环境,因为 PyYAML 会从 ``Documentation/sphinx/requirements.txt``
> +安装,而不是通过 Homebrew 安装。

My question is perhaps quite stupid. (I'm not familiar with this part)

How can you make "git clone xxx/linux.git" done on your mac? I've tried
this before, but it seems that there's some format issue? macOS's
default APFS is case-insensitive.., so I guess you did some extra
settings? (like 'git clone --sparse' or 'git clone --filter=blob:none'?)
But my intuition and experience tell me that it won't be convenient ;-)

If so, an additional description for macOS users might be more
user-friendly, I guess? Since the how-to file aims to lower the
threshold of the process of translation. (While I don't know how many
macOS users are potential contributors.)

And another thing is that zh_CN would prefer splitting zh_CN
translations apart from the original English one in your patch. Because
there's a script to monitor the translation status.
(Better confirm this with zh_CN maintainers)

Thanks.


I haven't read this script carefully. Please feel free to ignore my
incorrect comments below.

> diff --git a/tools/docs/sphinx-pre-install b/tools/docs/sphinx-pre-install
> index 965c9b093..51a296cc7 100755
> --- a/tools/docs/sphinx-pre-install
> +++ b/tools/docs/sphinx-pre-install
> @@ -518,6 +518,24 @@ class MissingCheckers(AncillaryMethods):
>          a decent coverage.
>          """
>  
> +        if sys.platform == "darwin":
> +            sw_vers = self.which("sw_vers")
> +            if sw_vers:
> +                try:
> +                    result = self.run(
> +                        [sw_vers, "-productVersion"],
> +                        capture_output=True,
> +                        text=True,
> +                        check=True,
> +                    )
> +                    version = result.stdout.strip()
> +                    if version:
> +                        return f"macOS {version}"
> +                except (subprocess.CalledProcessError, FileNotFoundError):
> +                    pass
> +
> +            return "macOS"
> +
>          system_release = ""
>  
>          if self.which("lsb_release"):
> @@ -716,6 +734,69 @@ class SphinxDependencyChecker(MissingCheckers):
>  
>          return self.get_install_progs(progs, "apt-get install")
>  
> +    def give_macos_hints(self):
> +        """
> +        Provide package installation hints for macOS using Homebrew.
> +
> +        Homebrew formulae and casks must not be installed with sudo. MacTeX
> +        is a cask, while the other dependencies are formulae.
> +        """
> +        if not self.which("brew"):

Homebrew seems to be treated as a build dependency here, rather than as
the package manager used to provide installation hints.

If all actual documentation dependencies are already installed on a
macOS system without Homebrew, this adds Homebrew as SYSTEM_MANDATORY,
increments self.deps.need, and eventually makes the script exit with
Can't build as 1 mandatory dependency is missing, even though the
documentation can actually be built.

Could we first check whether there are any missing dependencies and only
complain about a missing brew when an installation hint is actually
needed? I don't think Homebrew itself should be added to self.deps.

> +            if not self.distro_msg:
> +                self.deps.add_package("Homebrew", DepManager.SYSTEM_MANDATORY)
> +                self.deps.check_missing({})
> +                self.deps.warn_install()
> +                self.distro_msg = \
> +                    "Homebrew is required for macOS support. Install it from " \
> +                    "https://brew.sh/ and re-run this script."
> +            return None
> +
> +        progs = {
> +            "Pod::Usage":    "perl",
> +            "convert":       "imagemagick",
> +            "dot":           "graphviz",
> +            "ensurepip":     "python",
> +            "python-sphinx": "sphinx-doc",
> +            "rsvg-convert":   "librsvg",
> +            "xelatex":        "mactex",
> +            "latexmk":        "mactex",

Nit & Non-blocking:

Btw, would 'mactex-no-gui' be a better fit here?

The documentation build only needs the TeX command-line tools, while the
regular mactex cask also installs the GUI applications (I forget whether
GUI is big or not, but I guess <1GB). mactex-no-gui still provides the
full TeX Live distribution, so it may avoid installing software that is
not needed for kernel documentation builds.

Not a blocker.

> +        }
> +
> +        install = self.deps.check_missing(progs)
> +
> +        if self.verbose_warn_install:
> +            self.deps.warn_install()
> +
> +        if not install:
> +            return None
> +
> +        formulae = set()
> +        casks = set()
> +        for prog in self.deps.missing:
> +            if prog == "yaml":
> +                self.distro_msg = \
> +                    "PyYAML is not provided as a Homebrew formula. Use the " \
> +                    "default virtualenv mode so it is installed from " \
> +                    "Documentation/sphinx/requirements.txt."
> +                continue
> +
> +            package = progs.get(prog, prog)
> +            if package == "mactex":
> +                casks.add(package)
> +            else:
> +                formulae.add(package)
> +
> +        commands = []
> +        if formulae:
> +            commands.append("\tbrew install " + " ".join(sorted(formulae)))
> +        if casks:
> +            commands.append("\tbrew install --cask " + " ".join(sorted(casks)))

One more thing about the MacTeX hint: after installing the mactex cask,
its command-line tools may not become visible in the current shell
immediately. Homebrew's cask notes say that the terminal needs to be
restarted, or eval "$(/usr/libexec/path_helper)" (Is it?) should be run.

Otherwise, a user who immediately re-runs sphinx-pre-install after
following this suggestion may still see xelatex and latexmk reported as
missing.

Would it make sense to mention this in the macOS installation hint?

> +
> +        if not commands:
> +            return None
> +
> +        return "\nYou should run:\n" + "\n".join(commands)
> +
>      def give_redhat_hints(self):
>          """
>          Provide package installation hints for RedHat-based distros
> @@ -1138,6 +1219,8 @@ class SphinxDependencyChecker(MissingCheckers):
>              re.compile("Kali"):                       self.give_debian_hints,
>              re.compile("Mint"):                       self.give_debian_hints,
>  
> +            re.compile("macOS"):                      self.give_macos_hints,
> +
>              re.compile("openSUSE"):                   self.give_opensuse_hints,
>  
>              re.compile("Mageia"):                     self.give_mageia_hints,
> @@ -1458,7 +1541,11 @@ class SphinxDependencyChecker(MissingCheckers):
>          self.check_program("dot", DepManager.SYSTEM_OPTIONAL)
>          self.check_program("convert", DepManager.SYSTEM_OPTIONAL)
>  
> -        self.check_python_module("yaml")
> +        # PyYAML is installed from Documentation/sphinx/requirements.txt in
> +        # the virtualenv recommended on macOS. Homebrew does not provide a
> +        # PyYAML formula, so do not ask for a nonexistent brew package here.
> +        if not (sys.platform == "darwin" and self.virtualenv and self.need_pip):
> +            self.check_python_module("yaml")
>  
>          if self.pdf:
>              self.check_program("xelatex", DepManager.PDF_MANDATORY)

Thanks.

  reply	other threads:[~2026-08-09 13:03 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-09 10:19 [PATCH v1 0/2] docs: sphinx-pre-install: improve dependency checks Chen Miao
2026-08-09 10:19 ` [PATCH v1 1/2] docs: sphinx-pre-install: add macOS Homebrew support Chen Miao
2026-08-09 13:02   ` Weijie Yuan [this message]
2026-08-09 13:21     ` Dongliang Mu
2026-08-09 14:11       ` Weijie Yuan
2026-08-09 19:07         ` Chen Miao
2026-08-09 22:34           ` Jonathan Corbet
2026-08-10  3:47             ` Weijie Yuan
2026-08-10  5:12               ` Chen Miao
2026-08-09 18:59     ` Chen Miao
2026-08-09 10:19 ` [PATCH v1 2/2] docs: sphinx-pre-install: check GNU Make version Chen Miao
2026-08-09 17:18   ` Mauro Carvalho Chehab
2026-08-09 19:11     ` Chen Miao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=anh6axawbEiF37WD@wyuan.org \
    --to=wy@wyuan.org \
    --cc=alexs@kernel.org \
    --cc=chenmiao.ku@gmail.com \
    --cc=corbet@lwn.net \
    --cc=dzm91@hust.edu.cn \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=si.yanteng@linux.dev \
    --cc=skhan@linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox