From nobody Tue Sep 29 04:10:16 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 44ACB48380D for ; Wed, 12 Aug 2026 18:23:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559021; cv=none; b=f5rVsWYHoKG9Bj2+RCtgdxAgzMw+e5DlVcCW+ASuqG9VtEUrWc12vD6bK9y6oKxA+fOUX0HnhiG3LZXj2tSj70Muus37C+kud/6qXgMoMY/BYAEeupOAUDPJHk1DICdv95frE2fCG5a6h9AYNMuX9NrkUFlNq9vD4M0skFuuEgo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559021; c=relaxed/simple; bh=N/WYdi0aZIV7rxmg17mdmDrh2LsBZrC3Wc9QskuYJDw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=INaWQbDLVcq+PmgtIT9pKic+2EPAPHWOcTlcO6eh4ziSPNt75UHQBQh7FkTpwwRg3nHzMCYUMP5rEVMPkwRvXrvaa6C1VItjyS8i8RlzQuQUfzJWR5VbvP5AxcghbM6q1G/0haZdfkJs46hvbFnCHLZwrP8uf2XQ8iY2PQHVlTs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=qBz/fE8M; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qBz/fE8M" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-38dfe7eb825so1314549a91.0 for ; Wed, 12 Aug 2026 11:23:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786559019; x=1787163819; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/8cDZDrtlvjE2bITeYhmpWwajBeWOw7XQjPzAjg/838=; b=qBz/fE8MBIYif+F6+OwcWWMiqevC7ZCGQKOwngeOVBNEYTHlZfIhTej/j4oQSBZgrT b+lEvb4XOtgSpqoF4SFMbeggL5lOkk5og6Ez9njq7QVKx1xQ7jwIpGEhRl/q6m/me3Ut uuqCi4nk1czJ58Np067hhQAiE3I7g8qDViADMqm9OLZdxK7N8kOadm8bSCnbkRGVENRH p35nZNLGe9BGwSADT8Tajt6tKEZcTC14lTVep19HLx6PD8U16CC9eh8kXc6utV+xw2I9 ywts/EpKHNj2YHssM7gymTYmsFaAhAyAt5+kklM7ZcZAapW3J/TRrg5+HBFbQ2eM9kg5 zfsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786559019; x=1787163819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/8cDZDrtlvjE2bITeYhmpWwajBeWOw7XQjPzAjg/838=; b=Hls7iRGsKOXjLHEzqVxZU6m8XlrtT3VOyb87uguhytrvYRc913BNJU7xGBGWXjzM9R PL9jFjITkpMzmtwkxU/5mBOg8QDu2oINu2eW851rwdVXZ98OmIVFhzjoH8o//SRTYaNu Yfq5r1HvUYW7drdVJIFEXOdHGqHHLHboF79DYLF+BzILHYuJLMJtq/JmRPNrTxkdKuVJ Nz0tPCqTuA0DZuoFsWTOM6TJKOET9CWNqbj9u3Gkv9joSEimB86wAxJTKvZ4uheeL3Yy TIWZrq874omEiLSQK5CHUdx4/0GY7trhqCD653iwS9MqvXszNtFJTzqnckDdYrgzouj9 5vdQ== X-Forwarded-Encrypted: i=1; AHgh+RrBsiE5G7bBBLDgLjL/pBn+JBLlP2cIrU+Fyjpk9BhjUc/ihXgrfKsuuA9ntk2bIg3A3JsglgXIGyRBbog=@vger.kernel.org X-Gm-Message-State: AOJu0YwfMESCtALKZ02+DqwFEcSDWQ/WO4T9ML+mhlGhuTKzRtryVVrm UCcF+t5CMn9Dr1zWZGgEdHO/tXhFG2x5gXj4E3OVu/rGU1FUwGZdgT9G X-Gm-Gg: AR+sD13iwlSlFaf5DbpqSrataxWUScEirDU3tihxhVYVOZhE0wxwJBQ6HW4HSGpjqlv n7hIhalAlsCURKLsqXs2kWA7rtek4WUN0a6Cy7H0GGHI+bbPtWD8RQAKJqEMp3YU4ryzU0PmtAi bGYTGI7bXZtYfiHu9kUgE9jRoMZSx0cbfOTXfJf3oCym75FxjIYM5dcjo5JnfAj7uUD/t8eu3jU t7ZOM+FzrVQUEnRM7v+dIEUxIBHaeniVelIl/e3Fo19Pvu67eKzM+LAdxiatfbv+0PS2xeDkoxQ 7DTS6PPrje9TD9/ekhaDtTfxWRM9Zk1eZr97UpS8xMS78GHk3eKgWnBsdfx4urt9RAWjS/sTJBj EtRBTOot5W0WqSbasb48Vz8xy26k2VuZ8sOmr0MI/Vjcp7wmx1lcOiQ2Oq3XwRxxwoi03/tBGSx agDRFTRSR6n19i4KYrXazJZ5MYf9n7tPYENho1tgMSPpdlF9XrC6L2g130Gl0OrEWFVv3eYLE59 gg= X-Received: by 2002:a17:90b:5288:b0:38e:ad9d:1151 with SMTP id 98e67ed59e1d1-3931dfd01b0mr227959a91.4.1786559019537; Wed, 12 Aug 2026 11:23:39 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31cf3c08163sm12127695eec.7.2026.08.12.11.23.37 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 12 Aug 2026 11:23:39 -0700 (PDT) From: Chen Miao To: corbet@lwn.net, alexs@kernel.org, si.yanteng@linux.dev, skhan@linuxfoundation.org, dzm91@hust.edu.cn, mchehab@kernel.org, wy@wyuan.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Chen Miao Subject: [PATCH v3 1/6] docs: kdoc: add GNU Make detection Date: Thu, 13 Aug 2026 02:23:18 +0800 Message-ID: <20260812182327.53694-2-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260812182327.53694-1-chenmiao.ku@gmail.com> References: <20260812182327.53694-1-chenmiao.ku@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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 + +"""Detect a supported GNU Make executable.""" + +import re +import shutil +import subprocess +import sys + +from kdoc.python_version import PythonVersion + + +MIN_GMAKE_VERSION =3D 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 =3D {} + if sys.version_info < (3, 7): + kwargs["universal_newlines"] =3D True + else: + kwargs["text"] =3D True + + try: + result =3D subprocess.run( + [cmd, "--version"], + stdout=3Dsubprocess.PIPE, + stderr=3Dsubprocess.PIPE, + check=3DTrue, + **kwargs, + ) + except (OSError, subprocess.CalledProcessError): + return None + + match =3D 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=3DNone): + """Return the first GNU Make 4.0+ from MAKE, gmake, or make.""" + candidates =3D ( + make, + shutil.which("gmake"), + shutil.which("make"), + ) + + for cmd in candidates: + version =3D get_gmake_version(cmd) + if version and version >=3D MIN_GMAKE_VERSION: + return cmd + + return None --=20 2.50.1 (Apple Git-155) From nobody Tue Sep 29 04:10:16 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3DE27483BED for ; Wed, 12 Aug 2026 18:23:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559024; cv=none; b=Vw2RhcYYqBhfVYVkUgIZfjhVSqErqnBDB+ED1ye0k2WUn461tE8GxKE08Va3HopVjn1uzx1K8CL2DVON1HljHQf3McFGSwioGlbDOd/yI7I4etEjvdktoJTxJLHPueJuGcBW1PVU1Di8xeM/AnBHZ3LnS3iWvMOQabxCNmuiGEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559024; c=relaxed/simple; bh=h2dbDUsrNzzcBLzHkNW+FD2Z6I/D1g8VZ+8HCKQ5mnk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DijglgUK4Sdgl6jB1oTj0wZkq/hQG/327dLz/k40dQKEaxeF3wDdn/Nzr6LQN8aaN+Rh/QIxzC6SYPO51c5wobl7RRZLAJVv4t+DBmPMfT7LGQp+61qZ/TrDNfsPLlCNarf2vmDf4vbDg2VMAUNud7Vuv57X+DoHQnWbhQE2c3I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OEVadRcL; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OEVadRcL" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2ce98cb8165so2243585ad.1 for ; Wed, 12 Aug 2026 11:23:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786559022; x=1787163822; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=+CHx1iwCwh21fCkE+4XWz3PtqrzLKNwwReumRsHpQLk=; b=OEVadRcLVC9gBuUEcJiz+KSWmMW0wPcuASUAbE1J6JWpjxb/Ey4w1fy0FCEN6ttMyE eKZNk08tGMVgENj0Uoq3jRZMmhH+pGHdo/PHtlLsJ5sPL+f5QswhUtRBAmoY4gSw5bv3 0E1u9TA5reQRFxcDmW79Kmkfl+QVz09UB+N3MUO5EJPJ5+TFxtVajwpbSt8QBX3UUuoU nX1j5lDVEVJZrMlucwgnRHf2NVHw5aU8bmy7g7lYE/H9vSBIZaW5gR4NcS3Of6FbTP6J nrai5gld0E2FtDzPDogj5iq836j8jNoR5NEOlb/+q5d4qDriaC7ZXJvmXq54px+TSSqp vrVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786559022; x=1787163822; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=+CHx1iwCwh21fCkE+4XWz3PtqrzLKNwwReumRsHpQLk=; b=lAQf2BlQE2jYkykg/cfoQ0JbbErosJM3jL5gCMmj2qcou38i7u9kRWurZ9ktVu73hZ ESs+fAPa2H4H/NwolOIX3OcICdTwdpDRitjoDhK8589omvweADEcVgSzJKablTmM5Mpw Zh9x/uSiFN1nGXhXgIXYRu3CysYd2pwTRWq4KDx2n66sPM5QLDXO3u/y4gYPbQ4EppV8 fL615zd/H/kTIquBK28jl2M/OpSFgXNZiosWMwwswu9NjYsjTxHqgnrLQC/9l/DpOlqV qg2EXfr/7MzbMNAsXUG4WRrkMKg1u+wHOzCw6BnlQzA90TmmEu6U/ITuzKwvmdHyx7bM Yacg== X-Forwarded-Encrypted: i=1; AHgh+RqW/wKnat8OQ1a1BLrflq/Hd/KX4JvlB8lXsTuxyflTn48TRLNVyw5N+R/g4noZ8ZljiT+CLl5isNuMZmc=@vger.kernel.org X-Gm-Message-State: AOJu0YzbIHW7ON5c/a69uBzGdCOk/thln2fBHRyGdVndmI/QCdHpo9Bb d0IVStrqiYyxRhHiISD9sYxlXbs+BLOFNO0uFNUMuri5z2ClTXqMdE2I X-Gm-Gg: AR+sD12fKc/lkbROd39bNuP+3ZQxu16o7xHn/RGLZ/Ly9HS4EzRbQx2+9utsE1LZCbc O5qCqM2naK9sLhrc8YtMZ7ZF3c6Dn46jNxZv0AbM8awjez4TokLteQV1VX+v1RrDXQcTYe7q2gf y+rod0H8zBcpO1q9EVV32+FOB0DEUfyqqDQuXp1Ye0J3MhVBPB/PoXUkRT4tlguHx63hd+vWm5h IdlhMnAiNBjBliWrZJiYs7KHwIOm5f25zQRyzd0keIZOluG66oFHSKS9pKL5fN5TPzF2mycj1Ay kpFPu18+qTG73SuQTU473MeQ5LmyxUl30Edb4MpI5ppr+81UKp7/6BX5gW3NreJ6B3H5S6S7mWx Kr8zQXEuhQYUAXbFLVP3EzV/LGxsjItyHMtFsKT+DJ7DliGqnaqVTz9OZ4108I5oOnG0LCiayVu pnN4zjlsZxEyoXvFibfVXFJNJBN7iDmHakjJ/em+PC8ygySSoQwtKtQdm5hHZQQmUxMAvIZd1rE as= X-Received: by 2002:a17:903:124a:b0:2cc:ac15:ff4c with SMTP id d9443c01a7336-2d371d81b8cmr13174645ad.8.1786559022336; Wed, 12 Aug 2026 11:23:42 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31cf3c08163sm12127695eec.7.2026.08.12.11.23.39 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 12 Aug 2026 11:23:42 -0700 (PDT) From: Chen Miao To: corbet@lwn.net, alexs@kernel.org, si.yanteng@linux.dev, skhan@linuxfoundation.org, dzm91@hust.edu.cn, mchehab@kernel.org, wy@wyuan.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Chen Miao Subject: [PATCH v3 2/6] docs: sphinx-pre-install: add macOS Homebrew support Date: Thu, 13 Aug 2026 02:23:19 +0800 Message-ID: <20260812182327.53694-3-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260812182327.53694-1-chenmiao.ku@gmail.com> References: <20260812182327.53694-1-chenmiao.ku@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 the command-line-only MacTeX cask without sudo. Only require Homebrew when dependencies need to be installed, install the DejaVu and Noto CJK fonts needed for PDF output, and explain how to refresh PATH after installing MacTeX. Keep PyYAML in the virtualenv requirements because Homebrew does not provide a PyYAML formula. Check the module even on macOS: it is required by the parser_yaml extension regardless of how Sphinx is installed. When it is missing, direct users to the default virtualenv mode. Signed-off-by: Chen Miao Acked-by: Mauro Carvalho Chehab --- Documentation/doc-guide/sphinx.rst | 18 +++++ tools/docs/sphinx-pre-install | 110 +++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) diff --git a/Documentation/doc-guide/sphinx.rst b/Documentation/doc-guide/s= phinx.rst index 51c370260..1e105542a 100644 --- a/Documentation/doc-guide/sphinx.rst +++ b/Documentation/doc-guide/sphinx.rst @@ -131,6 +131,24 @@ It supports two optional parameters: ``--no-virtualenv`` Use OS packaging for Sphinx instead of Python virtual environment. =20 +macOS uses a case-insensitive APFS volume by default, but the kernel tree +contains file names that differ only in case. Before cloning the tree, use +``diskutil apfs list`` to find the APFS container identifier, replace +``diskX`` below with that identifier, and create an additional case-sensit= ive +volume with:: + + diskutil apfs addVolume diskX APFSX Linux + +On macOS, the script uses Homebrew for system dependencies. Homebrew +commands are printed without ``sudo``. The PDF toolchain is provided by the +``mactex-no-gui`` cask, while the required DejaVu and Noto CJK fonts are +installed from Homebrew font casks; use ``--no-pdf`` when only building HT= ML +documentation. After installing MacTeX, restart the terminal or run +``eval "$(/usr/libexec/path_helper)"`` so its command-line tools are visib= le. +The default virtualenv mode is recommended on macOS because PyYAML is +installed from ``Documentation/sphinx/requirements.txt`` rather than from a +Homebrew formula. + Installing Sphinx Minimal Version --------------------------------- =20 diff --git a/tools/docs/sphinx-pre-install b/tools/docs/sphinx-pre-install index 965c9b093..1956f1369 100755 --- a/tools/docs/sphinx-pre-install +++ b/tools/docs/sphinx-pre-install @@ -518,6 +518,24 @@ class MissingCheckers(AncillaryMethods): a decent coverage. """ =20 + if sys.platform =3D=3D "darwin": + sw_vers =3D self.which("sw_vers") + if sw_vers: + try: + result =3D self.run( + [sw_vers, "-productVersion"], + capture_output=3DTrue, + text=3DTrue, + check=3DTrue, + ) + version =3D result.stdout.strip() + if version: + return f"macOS {version}" + except (subprocess.CalledProcessError, FileNotFoundError): + pass + + return "macOS" + system_release =3D "" =20 if self.which("lsb_release"): @@ -716,6 +734,93 @@ class SphinxDependencyChecker(MissingCheckers): =20 return self.get_install_progs(progs, "apt-get install") =20 + def give_macos_hints(self): + """Provide package installation hints for macOS using Homebrew.""" + progs =3D { + "Pod::Usage": "perl", + "convert": "imagemagick", + "dot": "graphviz", + "ensurepip": "python", + "python-sphinx": "sphinx-doc", + "rsvg-convert": "librsvg", + "xelatex": "mactex-no-gui", + "latexmk": "mactex-no-gui", + } + + if self.pdf: + font_dirs =3D [ + os.path.expanduser("~/Library/Fonts"), + "/Library/Fonts", + "/System/Library/Fonts", + ] + pdf_fonts =3D { + "font-dejavu": ["DejaVuSans.ttf"], + "font-noto-sans-cjk": ["NotoSansCJK.ttc"], + } + + for package, names in pdf_fonts.items(): + files =3D [ + os.path.join(font_dir, name) + for font_dir in font_dirs + for name in names + ] + self.check_missing_file(files, package, DepManager.PDF_MAN= DATORY) + + install =3D self.deps.check_missing(progs) + + if self.verbose_warn_install: + self.deps.warn_install() + + if not install: + return None + + formulae =3D set() + casks =3D set() + notes =3D [] + for package in install.split(): + if package =3D=3D "yaml": + notes.append( + "PyYAML is not provided as a Homebrew formula. Use the= " + "default virtualenv mode so it is installed from " + "Documentation/sphinx/requirements.txt." + ) + continue + + if package =3D=3D "mactex-no-gui" or package.startswith("font-= "): + casks.add(package) + else: + formulae.add(package) + + commands =3D [] + if formulae: + commands.append("\tbrew install " + " ".join(sorted(formulae))) + if casks: + commands.append("\tbrew install --cask " + " ".join(sorted(cas= ks))) + + if not commands: + self.distro_msg =3D "\n".join(notes) + return None + + if not self.which("brew"): + notes.append( + "Homebrew is needed to install the missing dependencies. " + "Install it from https://brew.sh/ and re-run this script." + ) + self.distro_msg =3D "\n".join(notes) + return None + + if "mactex-no-gui" in casks: + notes.append( + "After installing MacTeX, restart the terminal or run:\n" + "\teval \"$(/usr/libexec/path_helper)\"\n" + "before re-running this script." + ) + + if notes: + self.distro_msg =3D "\n".join(notes) + + return "\nYou should run:\n" + "\n".join(commands) + def give_redhat_hints(self): """ Provide package installation hints for RedHat-based distros @@ -1138,6 +1243,8 @@ class SphinxDependencyChecker(MissingCheckers): re.compile("Kali"): self.give_debian_hin= ts, re.compile("Mint"): self.give_debian_hin= ts, =20 + re.compile("macOS"): self.give_macos_hint= s, + re.compile("openSUSE"): self.give_opensuse_h= ints, =20 re.compile("Mageia"): self.give_mageia_hin= ts, @@ -1458,6 +1565,9 @@ class SphinxDependencyChecker(MissingCheckers): self.check_program("dot", DepManager.SYSTEM_OPTIONAL) self.check_program("convert", DepManager.SYSTEM_OPTIONAL) =20 + # PyYAML is required by Documentation/sphinx/parser_yaml.py. The + # macOS installation hints explain that it is installed from the + # virtualenv requirements, rather than from a Homebrew formula. self.check_python_module("yaml") =20 if self.pdf: --=20 2.50.1 (Apple Git-155) From nobody Tue Sep 29 04:10:16 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F2731483BFE for ; Wed, 12 Aug 2026 18:23:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559027; cv=none; b=cDK2vW/oAWOVy2dWsfZqiQnWem39PfZj6KE2Fy6bREvK+mnHggxxQYeJjKsUydTdfyijtCaYCN8D5fjGidZCq/NLLgqUpGK8oD0fPGFiNFbF1HstkiozWDWq0aPv4ASMePWZ3vftn9AZYvPONlloXsmCCsdRtLnu7GDY3xW+i9U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559027; c=relaxed/simple; bh=JjjMb2uu1YODGgc9Ljh3eGSqXYdCYd1Db9x2dvf0KKg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GxpqEBLnE7XDbuoHZGHupzm5e2fB5Qlaju8wacKm0zbMTvdleQ0MSXFJyqSp0h7FCu/20BQC5URk+IWgznjQ+mf3rQPWCFX2c9jzw8zZ7+PsAOK9qetsJX5VZOq96Llt/L7GtwcBWXMvjQH4v5y9uGYGEJqtBbmps8nUnbM98M4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZopdtSgm; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZopdtSgm" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2cace91f112so16645255ad.0 for ; Wed, 12 Aug 2026 11:23:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786559025; x=1787163825; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Cr17zKegf0CAV0ad1vKq8vQpyQFYqiFtNOs4y/ElO2E=; b=ZopdtSgm4PPqhGGjA/j9UpWu22cdVW7ectT34IFAjTd9lDx4FcnPoZ3bVF9fGFH5B/ Ih9DFcl4ASeUBIrAY9Y2EV63eRUvypfCiWRaDPpHENun/t6DPETYXLIml4uujFNuXYmI HUXFxgiLPa+otP8fP7OyuoZKNsJGFLDiyOaCSbF7Bd/N0qViuMfDpM5n0oomeWMQdYQC /32cLZaUdHvVWrihFeR3irMvRNtgWLo04pqdAuLgizSJ9wtRYWn6z9vZ7le8Yn4u3MLf speOVMNRcWAdOXsEph4M6f/wg4Qxw4aX0uD7LZawmDbxe6Nej/JvUyFDZn5Vwn3prHKn 3WoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786559025; x=1787163825; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Cr17zKegf0CAV0ad1vKq8vQpyQFYqiFtNOs4y/ElO2E=; b=fWybx9XKb1ZJ506GdJk7S2v38Q3CSf17sY0qDvO7Y4xQ7umC+wbBFicQ8LRqADrcyo fwrh1/Vw07CYK1qKVg/lkD+EgGoBza8X5gCDkFTeML9S7GKS7MdVY4IyR6d5w6yknYQM n0/I/zmBz4D50cgauRAg0uq+mySAWqApsXZGw29WnLOM2rcZRRjUi/76EOkd7mfOhC3s ju9Wv5T7LATqJqiOF7DRMrddynn99omZrPVnHN02j5Ty6eKf/Juh9qXpPfuxqHmyK1rC 3b7ghkmhQY/2FRXrGt7glBW9/NoFsG1Q64Z9pNlggVncIkqNJrSBVnfquqwNFHMovMpQ I6Hg== X-Forwarded-Encrypted: i=1; AHgh+RqRLzdme3bpx+IqNiPjP1wdDtKKw8BYSj+6FvzhuR8ScygkaOkISJ/RrUJwRfINOKA+t7Hvj4xfHw9Zaig=@vger.kernel.org X-Gm-Message-State: AOJu0YzVD21REs+Y22PmxlVFRO51w7j1LZA9TmLNTygDWR3YPgOwHN5e 9/z8/Pksg5RErQvRyTFQ9xaW42Er1wZXYTOc2KpXYR5O5ZtYDx63D2w6 X-Gm-Gg: AR+sD11W1IJO+Z14V5igUmY6sifHqmS7GrRXWz6xtPLNRadbuYwTiGw3Xd1Jcs9owMs z/TfpLB7+Epo9eerUOAKH0qPUDWZVPZtFEu1V0LDPrk56KuiEcsityVy1NUkK5tB9lIcAau78hl Xarqe3wfTye6gGr/fVt0dr7DeYdfNOAVKNEgyP8ZLStUWPoSRaIwEHUdrh72W2G1qMbUcKlheZb Rcruy6vv88Kaf1Uonu8i2A7bfTP6WfVnjMfxu55D/6Yxx47lCr5BHdOihcybn/19LII0sQGU1lI Rg1irDBd7dSsqivHvhj4HeGBl01YwjQO6fL8418lgYgOen/DwT6EvVX76ErvWr0lYLe8srmIZSv YS6SyCfLI/Z8AYn7KgC51/ukQpDbx5xGDxRmW/Hf3D7zYQb3RjDoi1h4D+d1XI2suAowCYKAdRa CnPy+If/bU+LLg49EXViI2dnCRfpQ7xel1TIyqSD2cw1RiMXUHxoEAJdzDqS90WBozNlAzVAjzM E8= X-Received: by 2002:a05:6a21:3949:b0:3b1:a9ce:507e with SMTP id adf61e73a8af0-3cc55423418mr433328637.32.1786559025024; Wed, 12 Aug 2026 11:23:45 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31cf3c08163sm12127695eec.7.2026.08.12.11.23.42 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 12 Aug 2026 11:23:44 -0700 (PDT) From: Chen Miao To: corbet@lwn.net, alexs@kernel.org, si.yanteng@linux.dev, skhan@linuxfoundation.org, dzm91@hust.edu.cn, mchehab@kernel.org, wy@wyuan.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Chen Miao Subject: [PATCH v3 3/6] docs: sphinx-pre-install: check GNU Make version Date: Thu, 13 Aug 2026 02:23:20 +0800 Message-ID: <20260812182327.53694-4-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260812182327.53694-1-chenmiao.ku@gmail.com> References: <20260812182327.53694-1-chenmiao.ku@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The kernel documentation build requires GNU Make 4.0 or newer, but the Sphinx dependency checker only verifies that a make executable exists. This lets incompatible make implementations pass the check and fail later during the build. Check the GNU Make version on all supported systems. Prefer a compatible gmake command, which is how Homebrew provides GNU Make on macOS, and fall back to make. Use the common kdoc detector so the dependency checker and build wrapper apply the same selection logic. Document the requirement and the macOS gmake invocation. Signed-off-by: Chen Miao Reviewed-by: Mauro Carvalho Chehab # For sphinx= -pre-install --- Documentation/doc-guide/sphinx.rst | 4 +++- tools/docs/sphinx-pre-install | 10 +++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Documentation/doc-guide/sphinx.rst b/Documentation/doc-guide/s= phinx.rst index 1e105542a..4fb716e77 100644 --- a/Documentation/doc-guide/sphinx.rst +++ b/Documentation/doc-guide/sphinx.rst @@ -147,7 +147,9 @@ documentation. After installing MacTeX, restart the ter= minal or run ``eval "$(/usr/libexec/path_helper)"`` so its command-line tools are visib= le. The default virtualenv mode is recommended on macOS because PyYAML is installed from ``Documentation/sphinx/requirements.txt`` rather than from a -Homebrew formula. +Homebrew formula. The script also checks for GNU Make 4.0 or newer; when +Homebrew provides it as ``gmake``, use ``gmake htmldocs`` instead of +``make htmldocs``. =20 Installing Sphinx Minimal Version --------------------------------- diff --git a/tools/docs/sphinx-pre-install b/tools/docs/sphinx-pre-install index 1956f1369..7625ac5a4 100755 --- a/tools/docs/sphinx-pre-install +++ b/tools/docs/sphinx-pre-install @@ -37,6 +37,7 @@ import os.path src_dir =3D os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, os.path.join(src_dir, '../lib/python')) from kdoc.python_version import PythonVersion +from kdoc.gmake_detect import find_gmake =20 RECOMMENDED_VERSION =3D PythonVersion("3.4.3").version MIN_PYTHON_VERSION =3D PythonVersion("3.7").version @@ -308,6 +309,13 @@ class MissingCheckers(AncillaryMethods): =20 return None =20 + def check_make(self): + """Check for GNU Make 4.0 or newer.""" + if find_gmake(os.environ.get("MAKE")): + return + + self.deps.add_package("make", DepManager.SYSTEM_MANDATORY) + def check_perl_module(self, prog, dtype): """ Does perl have a dependency? Is it available? @@ -1559,7 +1567,7 @@ class SphinxDependencyChecker(MissingCheckers): # Check for needed programs/tools self.check_perl_module("Pod::Usage", DepManager.SYSTEM_MANDATORY) =20 - self.check_program("make", DepManager.SYSTEM_MANDATORY) + self.check_make() self.check_program("which", DepManager.SYSTEM_MANDATORY) =20 self.check_program("dot", DepManager.SYSTEM_OPTIONAL) --=20 2.50.1 (Apple Git-155) From nobody Tue Sep 29 04:10:16 2026 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B202484246 for ; Wed, 12 Aug 2026 18:23:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559029; cv=none; b=hU4yA08DqlA5gMATn3exeGCaOTr8Mt3FxicTKsfaeefnKTf0ZJOLuKL5oNLuGzk1nWynTl1QI7YxybHplkCfDM938XIkLHyuN+WrVxEmjOEop/ZRE5NPVu7pAQ3avADpSPl0tiCm2zLi2upYPqMXoFHB9DXLeWC9xcoZRDl/1X4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559029; c=relaxed/simple; bh=MaNdeO0zxfUKATc6m2Zu/5VXWMWx8OHNL5C+gbM+wbs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q/t/8zX3ScxdKacw0A9F2YnStVupJjKBLypNjfHvT3LluXwBSqPxQ+N3JbL+7/RKEKhmj+2H5GExWLf4r9zYfRZzB+ptDtfyNvcsAOwy5u6iCv0pUoDzBpeY41ogaDpA9F8J1bW2PM0tiJIQ34GxYCJGKLzeUqWc+MZJdrbt4pE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OLtpfN69; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OLtpfN69" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2ccf2360620so13486515ad.3 for ; Wed, 12 Aug 2026 11:23:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786559028; x=1787163828; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SO08RG/xBwrspSzwFkkCTaYAqts8IHVXj2FA5i4967M=; b=OLtpfN69W/sBsGej2/2F7EEIhcFFDGAUFu1oNUtUujC+Z0ELoXSzbsZuWqcf6k0h3w Kz8O0D7zWdCegQDQv/A9yhOA4IMVlguwfDklMPDLJiRrFbkzHPa4w2u3pLui5WXyZryF Ra0S8T8gMw8dgL+chIVILRyIXKj3hi6n3W+48YQrC4ag5MUazIMICdvVjg0WQKyrW+ox VJkQHD4Ub3Zl0r7KFESQRnJpRkq6/DqvJXwoos/jdT+uuN475YaV66LDLHdsseq2Bo9U jW9r4fRFUfNOJkoT/M+oa26Y76XfjjRS9f8x/am2hxm2FVwFZkKyS5U4j5LdYJedRqPu 4nyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786559028; x=1787163828; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=SO08RG/xBwrspSzwFkkCTaYAqts8IHVXj2FA5i4967M=; b=fozA+40YOlA5U3qx536XRoQ3dX4/koLM5kF9iwlBGxr0T06Z81e3facqRWZWCE6ND8 9p9SFI/mnbLB0rxJFW/XeS6cN9N3NmBA9J3JLpA8VY3pgV9Ou8IVHYyuqIiwSmyhcDkj XZ8w1Su0ggUn4eRj6eF9zQLKt8zq1WOquvwX6MroUOy2+EUMcuBEp94jM8eoNuH+KftD jD7s96hFdV7krCNcQ1NM2A9pPWuRDwmJpcouDq18YT4+s7jI2eR1pQ9TL+iAEXj7nu2I 4aciQYhEjV3SeBNMY5V73FT57DmbZuE23fzFmFMUzR5OC62ARa2aq7nO2TVJDsDdo6rW 2clA== X-Forwarded-Encrypted: i=1; AHgh+RomVfUUabwoPrW814zbPvVo2TvB7BXk5fDYdH54bnMalq0sReKXR9kac1r11rH66tRu5IRiLyJUf9zENoM=@vger.kernel.org X-Gm-Message-State: AOJu0YwbwRii4xUDOYfSTURdVKaL4/URthg0gCvm499wX6xxjvV8ptdL osHVYT3CUr5mVROYVvSJXbS0Ab7CfKxRo/AyRLH/S12Z+fZZqwS3L59l X-Gm-Gg: AR+sD10pnhHtWhOWXzeO9pcU1dCcKH4gVCI8DgbO97+jK0QERJ1y+fzFpKF92z6LUqQ RfSyKB1VrCwrroW5CziCvnDz1PqVtKy1MnGw5KbNU87K0ojryU9zgTg1RKkDF8gdHlfVFYxdJ0N 0OrCSHRS+HoALjojt758cNlTVjrvvRkLzb7RQ+ig7sASUyK3yEi6lIHa2cxCrKahfylBckggdRV Ewd+tkBPSvogM42Apv54hbivDs7djBzQLwDKmp6PznMhIZvkE725s0Kenh/aac5xemCDAivxrQt mqT2SQ6wUVYwNFmplTOPwdfd8BowplDMXtqyfmZFob+cNt2haeqC15Aot3O2Gs2+6/PXSg2J/Kn Hc78Y3i7IrlVYYrzor28NRzxBqAat/34SqJTClneWNr8EpSAQRM8CmObYAHuEMeI9M5wxV82H64 J1Eonq6WP2vObLAWEuHkYpwSqniACdf5jtDOS4OvDWSo8X3/RGVqsFV9TM+Qi0kn/D0KeTg3wcY W9haFjiDDyx8A== X-Received: by 2002:a05:6a20:3d1a:b0:3bf:9b61:f7ae with SMTP id adf61e73a8af0-3cc55195b34mr482617637.14.1786559027764; Wed, 12 Aug 2026 11:23:47 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31cf3c08163sm12127695eec.7.2026.08.12.11.23.45 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 12 Aug 2026 11:23:47 -0700 (PDT) From: Chen Miao To: corbet@lwn.net, alexs@kernel.org, si.yanteng@linux.dev, skhan@linuxfoundation.org, dzm91@hust.edu.cn, mchehab@kernel.org, wy@wyuan.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Chen Miao Subject: [PATCH v3 4/6] docs: sphinx-build-wrapper: prefer gmake Date: Thu, 13 Aug 2026 02:23:21 +0800 Message-ID: <20260812182327.53694-5-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260812182327.53694-1-chenmiao.ku@gmail.com> References: <20260812182327.53694-1-chenmiao.ku@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Homebrew installs GNU Make as gmake on macOS, but the Sphinx build wrapper invokes make directly when generating Info and Rust documentation. This can make the dependency check succeed while those documentation targets still use an incompatible make implementation. Honor MAKE when it names a compatible GNU Make. Otherwise check gmake and then make, selecting the first GNU Make 4.0 or newer. Use the common kdoc detector to keep this selection consistent with sphinx-pre-install. Signed-off-by: Chen Miao --- tools/docs/sphinx-build-wrapper | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/tools/docs/sphinx-build-wrapper b/tools/docs/sphinx-build-wrap= per index 1bb962202..15c7e0938 100755 --- a/tools/docs/sphinx-build-wrapper +++ b/tools/docs/sphinx-build-wrapper @@ -63,6 +63,7 @@ SRC_DIR =3D os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, os.path.join(SRC_DIR, LIB_DIR)) =20 from kdoc.python_version import PythonVersion +from kdoc.gmake_detect import find_gmake from kdoc.latex_fonts import LatexFontChecker from jobserver import JobserverExec # pylint: disable=3DC0413,C041= 1,E0401 =20 @@ -97,6 +98,14 @@ class SphinxBuilder: with the Kernel. """ =20 + def get_make(self): + """Select the first GNU Make 4.0 or newer in preference order.""" + make =3D find_gmake(self.env.get("MAKE")) + if make: + return make + + sys.exit("GNU Make 4.0 or newer is required") + def get_path(self, path, use_cwd=3DFalse, abs_path=3DFalse): """ Ancillary routine to handle patches the right way, as shell does. @@ -569,9 +578,10 @@ class SphinxBuilder: texinfo directory. """ =20 + make =3D self.get_make() for output_dir in output_dirs: try: - subprocess.run(["make", "info"], cwd=3Doutput_dir, check= =3DTrue) + subprocess.run([make, "info"], cwd=3Doutput_dir, check=3DT= rue) except subprocess.CalledProcessError as e: sys.exit(f"Error generating info docs: {e}") =20 @@ -787,12 +797,11 @@ class SphinxBuilder: =20 if rustdoc and target in ["htmldocs", "epubdocs"]: print("Building rust docs") - if "MAKE" in self.env: - cmd =3D [self.env["MAKE"]] - else: - cmd =3D ["make", "LLVM=3D1"] - - cmd +=3D [ "rustdoc"] + make =3D self.get_make() + cmd =3D [make] + if make !=3D self.env.get("MAKE"): + cmd.append("LLVM=3D1") + cmd.append("rustdoc") if self.verbose: print(" ".join(cmd)) =20 --=20 2.50.1 (Apple Git-155) From nobody Tue Sep 29 04:10:16 2026 Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 43C0C481FCE for ; Wed, 12 Aug 2026 18:23:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559032; cv=none; b=Mj+h+U1PIp3CqMzOkC9idHU47+UjOpAgPYi2wg0swHZ/PQNMSgO/kgNuBUlCMUT/ovYIoiUrz4S89DYS2pMUfb03m+P8LUjD0MYh679ua4Uzaz/mJr/Pe3TEjq97t1Ji9US8Y4mlUfxsvy+DA0+S9GjY8CakYCNAplqKs0xmMXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786559032; c=relaxed/simple; bh=vAS3XXy80kygIF9Q312sEQcYcNWCvzeW4fKWAXXwzmE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=brFce0Vf5GBve4Fx+2jOqNbk0n3TXaO4pzyfyY0ZQmr01pPuu9ce7X8o52R3TSwM+fmaN+PDSee6kQ1LCIpBRHdi11cB/ePURyO7rypIMNrdKnuhd3nwvtp32kbrrRJG64jlnbLvruKNWypN8Fds35pNOwhQXE2Pla7+agdQygw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=tKYaS0rv; arc=none smtp.client-ip=209.85.215.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tKYaS0rv" Received: by mail-pg1-f182.google.com with SMTP id 41be03b00d2f7-ca88130e09aso849620a12.3 for ; Wed, 12 Aug 2026 11:23:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786559031; x=1787163831; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=rY7zCmLlC8EX8bVm77K2UlgL+HheFi3M6EBapeAXM2A=; b=tKYaS0rv1BiAfxJx+OrWw1ONyi54SowPkfsPw/LKYAuRY4aZWtNS6XjgGGbJVfbFAv WDguOBbcZAptgat2vAeNrcVtMVZP2ZPwDRqBlmfraik/ZSUostJEz21/FyIaPGjbfWZ/ w3LntFUcWdlXKNFyp4MFEMU9bQdZ5Qr+qYKH4XjgW2pjVXyqQITTxP0vmBMgfPCoGlJY Ft5CLxAwaQQUY6iv+sXWKhZ4EOUG4YIQzhQn6zBsQj3ND5HaC7sFyblHkuhGh03OG8Fe UxztVcxLfZ7L/lEmSi2piBI7bDjHaz9KyS5AEp0DhXvm8yRDDf4rg2USWo38rzxmQ03E m1sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786559031; x=1787163831; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=rY7zCmLlC8EX8bVm77K2UlgL+HheFi3M6EBapeAXM2A=; b=Zi2mJcx9EdBtaxpUmYBr4PLO+j93hfqrNUmvkK69Q7nXPOU4CBegtdQAXzn0qebgye /Be49FZJ6fkC4eGM7uf540xe7a890B5wl1/jJR8BUcv+/DktQtU3bnlwD0smaiCCoxas r7cI/kfTJM3np2lAKcbLEYKdA3tvee7JpQG8ehFsYOVLtrUQyn6lIoDbTR6WMtQTorsv IsCmd7auQn+xMC1y7dbB7spMjmbcVHeOj96/T2R8FIhgfydxe5HktZrk3MV3wlFFRLdK 7UR72GEc4AgTKTM0eP07NbzcGAQtLDT/Ijxa2EdYP74IviPztvsWRmEJwwjFtF/Amkip WgvQ== X-Forwarded-Encrypted: i=1; AHgh+Rq38tz6bJyXDLa/YIsCZ2BfxfD51WEtLvbivGo1nlHP4euXl/gtjR51jEkXNL39yQ4IrLToki5nBcS5Aes=@vger.kernel.org X-Gm-Message-State: AOJu0YwAutjSJqvu1aZ/vUCKiEIqcRPp37vrTVnWfay+xvl2mqzD1xHp ujjJcGJsLE3cTvUka28ekE+wgmNl0UshXA9M0z8CBJc5vRqzO4RLELQo X-Gm-Gg: AR+sD12TIkYCSN6lHlbUWr7xRcHaZ8lJuDe8BUoQnj5KpEeCqPy4fpFz5OTxn46kEzQ 0SJabP5uPSAOUtkmrUzsLG5RCmdX8YhMyU3EJdMXjmSbA8yYux5pOiUEXPo5exuiDO8DJLezJSI 1HoR3sdwOk5r0HQT7zrRgokUhOKIWIFJL3liBCQtujzbkmAOWfR9WdakSW2queKZMJLreQhmg6P pRsnTNzsHGtk9FdcbhXGwwtBdLZrC1dHuUTP+6ytkeJf1RqPgyGOtPU5eWRtbdnjGNq8sd7XB3Z cIkp0EocWWhmt2lDgXLminsE8cfQ7EpOFvUwkUPE/T9NFFrRL/9Jk6IYeO7+TPGvSddcc3f4n2G LKHtvSTtvUKrOAFLJCGlZsv/ZXNOC3EUDwc0FZOuu8uKwrbhR5eNw/EurtwnLyhWdri9D2r4NaZ oP8L3WhM7E2en1JQ+h7QkDu3ANpwCRPwmpztdRPfoOAXwl6lJZvcMlKfcpUnkOiZ2IW49LzF5mh wM= X-Received: by 2002:a05:6a21:4c0f:b0:3b4:9171:2573 with SMTP id adf61e73a8af0-3cc55345736mr451536637.37.1786559030503; Wed, 12 Aug 2026 11:23:50 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31cf3c08163sm12127695eec.7.2026.08.12.11.23.48 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 12 Aug 2026 11:23:50 -0700 (PDT) From: Chen Miao To: corbet@lwn.net, alexs@kernel.org, si.yanteng@linux.dev, skhan@linuxfoundation.org, dzm91@hust.edu.cn, mchehab@kernel.org, wy@wyuan.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Chen Miao Subject: [PATCH v3 5/6] docs/zh_CN: doc-guide: document macOS Sphinx setup Date: Thu, 13 Aug 2026 02:23:22 +0800 Message-ID: <20260812182327.53694-6-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260812182327.53694-1-chenmiao.ku@gmail.com> References: <20260812182327.53694-1-chenmiao.ku@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Translate the macOS Sphinx dependency setup added to the English documentation. Keep the translation in a separate patch so translation status tooling can track the source change correctly. Signed-off-by: Chen Miao Acked-by: Weijie Yuan --- .../translations/zh_CN/doc-guide/sphinx.rst | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Documentation/translations/zh_CN/doc-guide/sphinx.rst b/Docume= ntation/translations/zh_CN/doc-guide/sphinx.rst index 3375c6f3a..e6d42d970 100644 --- a/Documentation/translations/zh_CN/doc-guide/sphinx.rst +++ b/Documentation/translations/zh_CN/doc-guide/sphinx.rst @@ -110,6 +110,22 @@ PDF=E5=92=8CLaTeX=E6=9E=84=E5=BB=BA =20 =E4=BD=BF=E7=94=A8Sphinx=E7=9A=84=E7=B3=BB=E7=BB=9F=E6=89=93=E5=8C=85=EF= =BC=8C=E8=80=8C=E4=B8=8D=E6=98=AFPython=E8=99=9A=E6=8B=9F=E7=8E=AF=E5=A2=83= =E3=80=82 =20 +macOS =E9=BB=98=E8=AE=A4=E4=BD=BF=E7=94=A8=E4=B8=8D=E5=8C=BA=E5=88=86=E6= =96=87=E4=BB=B6=E5=90=8D=E5=A4=A7=E5=B0=8F=E5=86=99=E7=9A=84 APFS =E5=8D=B7= =EF=BC=8C=E8=80=8C=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81=E6=A0=91=E4=B8=AD=E5= =AD=98=E5=9C=A8=E4=BB=85=E5=A4=A7=E5=B0=8F=E5=86=99 +=E4=B8=8D=E5=90=8C=E7=9A=84=E6=96=87=E4=BB=B6=E3=80=82=E5=85=8B=E9=9A=86= =E6=BA=90=E7=A0=81=E5=89=8D=EF=BC=8C=E8=AF=B7=E7=94=A8 ``diskutil apfs list= `` =E6=89=BE=E5=88=B0 APFS =E5=AE=B9=E5=99=A8=E6=A0=87=E8=AF=86=E7=AC=A6=EF= =BC=8C +=E5=B0=86=E4=B8=8B=E9=9D=A2=E7=9A=84 ``diskX`` =E6=9B=BF=E6=8D=A2=E4=B8=BA= =E8=AF=A5=E6=A0=87=E8=AF=86=E7=AC=A6=EF=BC=8C=E5=B9=B6=E5=88=9B=E5=BB=BA=E4= =B8=80=E4=B8=AA=E9=A2=9D=E5=A4=96=E7=9A=84=E5=A4=A7=E5=B0=8F=E5=86=99=E6=95= =8F=E6=84=9F=E5=8D=B7:: + + diskutil apfs addVolume diskX APFSX Linux + +=E5=9C=A8 macOS =E4=B8=8A=EF=BC=8C=E8=AF=A5=E8=84=9A=E6=9C=AC=E4=BD=BF=E7= =94=A8 Homebrew =E5=AE=89=E8=A3=85=E7=B3=BB=E7=BB=9F=E4=BE=9D=E8=B5=96=EF= =BC=8C=E8=BE=93=E5=87=BA=E7=9A=84 Homebrew =E5=91=BD=E4=BB=A4=E4=B8=8D=E9= =9C=80=E8=A6=81 +``sudo``=E3=80=82PDF =E5=B7=A5=E5=85=B7=E9=93=BE=E7=94=B1 ``mactex-no-gui`= ` cask =E6=8F=90=E4=BE=9B=EF=BC=8C=E6=89=80=E9=9C=80=E7=9A=84 DejaVu =E5=92= =8C Noto CJK +=E5=AD=97=E4=BD=93=E5=88=99=E9=80=9A=E8=BF=87 Homebrew font cask =E5=AE=89= =E8=A3=85=EF=BC=9B=E5=A6=82=E6=9E=9C=E5=8F=AA=E6=9E=84=E5=BB=BA HTML =E6=96= =87=E6=A1=A3=EF=BC=8C=E8=AF=B7=E4=BD=BF=E7=94=A8 ``--no-pdf``=E3=80=82 +=E5=AE=89=E8=A3=85 MacTeX =E5=90=8E=EF=BC=8C=E8=AF=B7=E9=87=8D=E6=96=B0=E5= =90=AF=E5=8A=A8=E7=BB=88=E7=AB=AF=EF=BC=8C=E6=88=96=E8=BF=90=E8=A1=8C +``eval "$(/usr/libexec/path_helper)"`` =E4=BD=BF=E5=91=BD=E4=BB=A4=E8=A1= =8C=E5=B7=A5=E5=85=B7=E5=8F=AF=E8=A7=81=E3=80=82macOS =E7=94=A8=E6=88=B7=E5= =BB=BA=E8=AE=AE=E4=BD=BF=E7=94=A8 +=E9=BB=98=E8=AE=A4=E7=9A=84 Python =E8=99=9A=E6=8B=9F=E7=8E=AF=E5=A2=83=EF= =BC=8C=E5=9B=A0=E4=B8=BA PyYAML =E4=BC=9A=E4=BB=8E +``Documentation/sphinx/requirements.txt`` =E5=AE=89=E8=A3=85=EF=BC=8C=E8= =80=8C=E4=B8=8D=E6=98=AF=E9=80=9A=E8=BF=87 Homebrew =E5=AE=89=E8=A3=85=E3= =80=82 +=E8=AF=A5=E8=84=9A=E6=9C=AC=E8=BF=98=E4=BC=9A=E6=A3=80=E6=9F=A5 GNU Make 4= .0 =E6=88=96=E6=9B=B4=E9=AB=98=E7=89=88=E6=9C=AC=EF=BC=9B=E5=A6=82=E6=9E=9C= Homebrew =E5=B0=86=E5=85=B6=E5=AE=89=E8=A3=85=E4=B8=BA +``gmake``=EF=BC=8C=E8=AF=B7=E4=BD=BF=E7=94=A8 ``gmake htmldocs``=EF=BC=8C= =E8=80=8C=E4=B8=8D=E6=98=AF ``make htmldocs``=E3=80=82 + Sphinx=E6=9E=84=E5=BB=BA =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 @@ -409,4 +425,3 @@ Documentation/doc-guide/kernel-doc.rst =E3=80=82 ; Wed, 12 Aug 2026 11:23:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786559034; x=1787163834; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Nks8VC3vHUBzywbcvluMteExgRFIxGN8FNe5HK/cCDk=; b=phGc65GxD4GRkYuHOuImsOnVECKzTC82/hg8Wok2PNjNJbCG5lYsPSUClBxLt72BVc SjIBx1PevoiNm7cQXVznyRKHJqcOXG5O5NWD3tlMEiGHjbOXvIW4DA4pYnd6jVulwggu S9PdIDvuqbyuV+stFuPePP5vZn+hoH00XjFyjRqjaLlVZ0GqKni3lW/baB6KKOdhZoii kHy6gCRK1/NlHfhjCiNU0wyfPy6bvenh/N/0sb9ZOljIe/8OqL4opXsbMKJt7widk9Rn ZBGImg17LfEsj7OJYOyvl7oIh7erNkSLiuvcbJl7I3xEdeyftotnsTXAJopzSOQVx0ty yy1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786559034; x=1787163834; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Nks8VC3vHUBzywbcvluMteExgRFIxGN8FNe5HK/cCDk=; b=YPCDqMYp/zbj7jsBQ/zsswk1N/TCHNKWjmxJPTrkdvuB91uQiSvZuL0HQCv+mx9yxw Ejht/TVBFsc/xHm4eyLaVt1AUCpdj+hOHlvyDWScPzwHY+PVVMvGvo7XhJ7S12jkuKsx iprQr6AhGI+UHaafBawNjHWQZKkIJg/cyhopfSsLQDy4ai9ysHDz6D93BiVzZ2bbhBnI EAc8ryeWV8rml97M28KEfZI4K5jOfyH4aA2cPnrSBQw305FhwlCC3UwEwuHU9TlB8Vwd chFE79roWptfE5v94NQcuTVtL4THz+vG6kcP/cSyDdKWWZGpz30gMwi3swgzLC2271q1 VdRQ== X-Forwarded-Encrypted: i=1; AHgh+RprIbWOPWAy2hA2Zfhl9Ly4+gvFcfGS1qWTcKOrQRSoux5dufaDqdQNz28WvZp9d1GtrEBFiLwkMxW486A=@vger.kernel.org X-Gm-Message-State: AOJu0YxMNOSQIkM0Ee1FHYhVA9TfF3HrHGgF7ezzNR2bK8/eHu4/xzcI gXoldNQSk4hyjoUx8HM7wZEjPAyy+qQ0ERRAQ/Xp7N51sDIoqTMFeS/U X-Gm-Gg: AR+sD10CEREJFFyWLQ4rsQQxRHfRZnsoiO59h9NxeXTUrBvAb3n8y9oMIsPULDvAwp3 Uodidx7pp6FjJbbWa/+iv++merZz+BT1x88Xz+In+gi+fBvheTVuIuNed7OL6X9Avjl3MfAPKHs XeBiaNghL11JszOa0Knb764qOs+S6nZdP5sAHyF8rKrXz13YV4mwadMOUJE/UlgzgAOMjnj9ov4 xrGoVroSdVlKQJP8Hq4psvZQVIhmfU7C9AsGuz2zitkHyGJTJ7HA+s2iHbdW++0Xn3vNmPaz8uA cFVyvctAOnJxGQbU48CugrQy7Dpggpsb4kACapQ4jVysq8D5eXysAAW6hnr260Dhn1S+rGvGUnA 3rNHuPBTg6DvDcnG4pPR0+mg8XsPhIjki/ex2R5/qmhshE5j3gVJqPxuwVVSAUGls3MeLobacoD pVkV4V38sqz5nUCUNTaMPdXbmaG3yhTM2smtPfmL+CyvnHk4yuXdfM5wZNv85aNXMAxGnxdy4mM 8mf/veg010Uxg== X-Received: by 2002:a17:90a:d647:b0:36d:9e0b:3801 with SMTP id 98e67ed59e1d1-3931e04a995mr206514a91.8.1786559033378; Wed, 12 Aug 2026 11:23:53 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31cf3c08163sm12127695eec.7.2026.08.12.11.23.50 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 12 Aug 2026 11:23:53 -0700 (PDT) From: Chen Miao To: corbet@lwn.net, alexs@kernel.org, si.yanteng@linux.dev, skhan@linuxfoundation.org, dzm91@hust.edu.cn, mchehab@kernel.org, wy@wyuan.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Chen Miao Subject: [PATCH v3 6/6] docs/zh_CN: how-to: document case-sensitive APFS setup Date: Thu, 13 Aug 2026 02:23:23 +0800 Message-ID: <20260812182327.53694-7-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260812182327.53694-1-chenmiao.ku@gmail.com> References: <20260812182327.53694-1-chenmiao.ku@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The APFS volume used by macOS is case-insensitive by default, while the kernel tree contains file names that differ only in case. Document the diskutil commands needed to identify the APFS container and add a case-sensitive volume before cloning the tree. Signed-off-by: Chen Miao Acked-by: Weijie Yuan --- Documentation/translations/zh_CN/how-to.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/translations/zh_CN/how-to.rst b/Documentation/tr= anslations/zh_CN/how-to.rst index 9ec2384e1..e1d3d2b8b 100644 --- a/Documentation/translations/zh_CN/how-to.rst +++ b/Documentation/translations/zh_CN/how-to.rst @@ -102,6 +102,14 @@ Linux =E5=8F=91=E8=A1=8C=E7=89=88=E5=92=8C=E7=AE=80=E5= =8D=95=E5=9C=B0=E4=BD=BF=E7=94=A8 Linux =E5=91=BD=E4=BB=A4=E8=A1=8C=EF=BC= =8C=E9=82=A3=E4=B9=88=E5=8F=AF=E4=BB=A5=E8=BF=85=E9=80=9F=E5=BC=80=E5=A7=8B= =E4=BA=86 =E5=BC=80=E5=A4=B4=E7=9A=84=E5=91=BD=E4=BB=A4=E3=80=82**=E8=AF=B7=E6=B3=A8= =E6=84=8F**=EF=BC=8C=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC Sphinx =E7=9A=84= =E6=96=87=E6=A1=A3=E7=BC=96=E8=AF=91=E9=80=9F=E5=BA=A6=E6=9C=89=E6=9E=81=E5= =A4=A7=E6=8F=90=E5=8D=87=EF=BC=8C=E5=BC=BA=E7=83=88=E5=BB=BA=E8=AE=AE =E6=82=A8=E9=80=9A=E8=BF=87 pip/pypi =E5=AE=89=E8=A3=85=E6=9C=80=E6=96=B0= =E7=89=88=E6=9C=AC Sphinx=E3=80=82 =20 +macOS =E9=BB=98=E8=AE=A4=E4=BD=BF=E7=94=A8=E4=B8=8D=E5=8C=BA=E5=88=86=E6= =96=87=E4=BB=B6=E5=90=8D=E5=A4=A7=E5=B0=8F=E5=86=99=E7=9A=84 APFS =E5=8D=B7= =EF=BC=8C=E8=80=8C=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81=E6=A0=91=E4=B8=AD=E5= =AD=98=E5=9C=A8=E4=BB=85=E5=A4=A7=E5=B0=8F=E5=86=99 +=E4=B8=8D=E5=90=8C=E7=9A=84=E6=96=87=E4=BB=B6=E3=80=82=E5=9C=A8=E6=89=A7= =E8=A1=8C ``git clone`` =E5=89=8D=EF=BC=8C=E5=8F=AF=E5=9C=A8=E7=8E=B0=E6=9C= =89 APFS =E5=AE=B9=E5=99=A8=E4=B8=AD=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA=E9= =A2=9D=E5=A4=96=E7=9A=84=E5=A4=A7=E5=B0=8F=E5=86=99 +=E6=95=8F=E6=84=9F=E5=8D=B7=EF=BC=88=E5=85=88=E7=94=A8 ``diskutil apfs lis= t`` =E6=89=BE=E5=88=B0=E5=AE=B9=E5=99=A8=E6=A0=87=E8=AF=86=E7=AC=A6=EF=BC= =8C=E5=B9=B6=E5=B0=86=E4=B8=8B=E9=9D=A2=E7=9A=84 ``diskX`` =E6=9B=BF=E6=8D= =A2=E4=B8=BA=E8=AF=A5=E6=A0=87=E8=AF=86=E7=AC=A6=EF=BC=89:: + + diskutil apfs addVolume diskX APFSX Linux + +=E7=84=B6=E5=90=8E=E5=B0=86=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81=E5=85=8B= =E9=9A=86=E5=88=B0=E6=96=B0=E5=8D=B7=E4=B8=AD=E3=80=82 + =E5=A6=82=E6=9E=9C=E6=82=A8=E5=A4=84=E4=BA=8E=E4=B8=80=E4=B8=AA=E5=A4=9A= =E7=94=A8=E6=88=B7=E7=8E=AF=E5=A2=83=E4=B8=AD=EF=BC=8C=E4=B8=BA=E4=BA=86=E9= =81=BF=E5=85=8D=E5=AF=B9=E5=85=B6=E4=BB=96=E4=BA=BA=E9=80=A0=E6=88=90=E5=BD= =B1=E5=93=8D=EF=BC=8C=E5=BB=BA=E8=AE=AE=E6=82=A8=E9=85=8D=E7=BD=AE=E5=8D=95= =E7=94=A8=E6=88=B7 sphinx =E8=99=9A=E6=8B=9F=E7=8E=AF=E5=A2=83=EF=BC=8C=E5=8D=B3=E5=8F=AA=E9= =9C=80=E8=A6=81=E6=89=A7=E8=A1=8C:: =20 --=20 2.50.1 (Apple Git-155)