From nobody Mon Sep 28 23:53:31 2026 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 42BC83EDAA0 for ; Fri, 14 Aug 2026 21:44:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743872; cv=none; b=hbUziu0Fqefd7FRTQYGhoDmjpKJuBtZ+nIb/x9WhxVy5nklZPK3GBvaNjxca4iolFePVH1nShjUXQE1bIaX24SQghcnr6PCAj7IWej6eSBprUVk2DQ440er+5osRvTCkyvZtywpKC9UjQn1B1W8V4081c2BynawqKcr3z4L84d0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743872; c=relaxed/simple; bh=N/WYdi0aZIV7rxmg17mdmDrh2LsBZrC3Wc9QskuYJDw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nm+x44eqvnFXhsC31IYFeF1xA2AFUw7IgEnSLXno95FJbfarx4qqbNcKHL3dJlxUQpEbSxAQphGCui4uR6OADn5XG2XPZ//xxZFzij4TzNWZDIizRIrimDRcPh3E/IMEMSurFzxE1Wl4ccT80ZS85Jy1ZHb4/3gja7mTzQEkxlQ= 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=JeHtSUCb; arc=none smtp.client-ip=209.85.214.177 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="JeHtSUCb" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2ceb096e675so18660195ad.0 for ; Fri, 14 Aug 2026 14:44:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786743871; x=1787348671; 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=JeHtSUCb9HEL3nxRfJ86gXFmTUyjoxSSAgywNlUpaid56XcTyZNoCzk4mWUdM/8H0A Iq/MqrDZ0A0g+U9+pGPA/aWKsXazhwf5xsPqjmDP0mv31mCjBSOWqtKt/QQiIX8n573C chAVsQgMV+m+utcE8l3wmsI8seFAqvpQalJOH+uT2fKbPtXtAMt4+EbQ765vyAXfajUE 5CxEDgq5NAPsJhm8qsUxqzVFd+iRhWzY3CkjVvwqPy4JYa74M6QK1SHzUDNmv804+V3S UaRaXUdHrLULQxJeT6b9i5UH4g8uW5HOLlCDdwpXc1K03Ew90e9Qrf0SM0oTKZNrPfva oHQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786743871; x=1787348671; 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=AaqW4C90J6b6U6aEfe6Y1AQkQeFXNWRiJCJTL6Hereano0srNq2kA6SWijIO2yEYxJ JUk0oWUsSJA1coIkK+Fycs56mgAjJWPFHln+chpeUBJTSY228GhIwPWdHJD8rnGF4N1Q q8hAdmkQIeGilIk1q2pQgyII3KGVOR6ls5J0O3qFGiQJruJHhkaGYd1C4jHhuKPLzCdt qviBigxtUKXax+hraziOjo2mHfI6gwgE6I5jNj5qrmEkD3RYa/c8URucNvnHJB9KR0Lf MoIkRMgfcyhlYcJUEClyPvURe6REJUJq4C2WrEJ6j/BIGWmKe0P2OkMc+2ljEWX231Bf JD9A== X-Forwarded-Encrypted: i=1; AHgh+Ro0O6PHD7IXYLX6XATKx2B+bsrbtmJZ58XUColjSRcqFgw/Z9sV52U3zoplFhgNEBI9OwwQJrBN/CavP0U=@vger.kernel.org X-Gm-Message-State: AOJu0Yzm8l8xqNsMCFczbDJ+mXnRFgq2qSK4QiND4iNH93NnGsbssJlD iIbtPzT405q1EphZGVEHoLhWFm5q1QfevyH0YqHGrrTLwzUOsU+fBZyZ X-Gm-Gg: AR+sD12Sxi6K+3d5HzAOkDk4wQsqK/9RXXhvb4t0xUsLzUxx9kiaBr0uPQiTDlyPqq1 nULA4LZuZvRTcsdo8KovRvcrezY47NnzEXLknn8+Nuz3FOei9RaOj9TUf6rWeoRZGbCiRzsR7jz Uvj2nvGBCTAi2Lbb2UVZoacUwyHwVUYf71QfNS+r3MoC/yWIZA6smVagUnKDhvFJHwrZJBDig5N ztLoJ8SyHxJvXh0ljLM5G3hlyUB2irkz++8sii3z26RuJlj9kD24dRd9agheZHBordWV9ZulQHx M97eGOoEvtOyPj7svpOhy9CV4lajDAmbcXeLa/rygi3I50eA2VaYjcivBQZuswxE2wpclBcSufY t0H8TCo6GJFsf9ZBt/31SwRyua1uF/4UAtpkwgjzoPfL5uxkFlIbjdbqEQAX1YlgE1cPFTAgjGJ kANfZ0C4GHK8s99IFGlm8T5AmVq7zEc9Cu91kpFO1eq9eX4EHTEpQy5H3geiILsgybQQlnqvm7O JE= X-Received: by 2002:a05:6a21:7004:b0:3c3:875d:c538 with SMTP id adf61e73a8af0-3cc71af16fbmr11589781637.8.1786743870615; Fri, 14 Aug 2026 14:44:30 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d5bd918fsm8083617eec.2.2026.08.14.14.44.28 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Aug 2026 14:44:30 -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 v4 1/6] docs: kdoc: add GNU Make detection Date: Sat, 15 Aug 2026 05:44:13 +0800 Message-ID: <20260814214419.49925-2-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260814214419.49925-1-chenmiao.ku@gmail.com> References: <20260814214419.49925-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 Mon Sep 28 23:53:31 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 569A33EC6B2 for ; Fri, 14 Aug 2026 21:44:34 +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=1786743875; cv=none; b=VhDvjUKM73ca2AryquFGr0M8xkfFsFGA232digQOXCjPdAbcV0E/KHMZkOtdjuSabQ2cXUFwcZ9JHYO5DRgsMGjpIdU5sviGSAIEocN+kwiqZtb3atM+pwwyvEDmxfG1d7/G5FUuM22DCjjF2p2dgDJMwaYhLttAsJMLS8CI9+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743875; c=relaxed/simple; bh=jHQTrHx9cRtuPQJEUfGJd5bfvC7k+OVYc4Z8SEzo/rc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dWOUNqirTFoAA6WIH+cI3yCFvnqM+tCUy8Z9DARhOjuMO2SWIB3aaAP0R+BJjBOyt8YfKBThKOgBS/xxALFl53Cac3gZG2su52SeV+j0ukV/QnYj8DMlKqta+jhfEvIhljLjMKgOXKfILxlk7wHZqiz3/YZSWqv4enLkzydWGE8= 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=dFpuW9WU; 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="dFpuW9WU" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2cacb8416a1so15549695ad.1 for ; Fri, 14 Aug 2026 14:44:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786743874; x=1787348674; 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=XkVVrdAK9iWpv+mtoFZiSwPkYIpP4oPpqC5PfGzOJMk=; b=dFpuW9WUEKJHX3E7NTDSZZnkPX/nGj2lqGCyPsaNwtNj+3xPBPYR2kfjDqAIQGs1zs BLUeaZ77maGNkzR9jE3VrEIAwzJhKB06lYl/Gf57heiJdZMD6pQ9CYPV+mcrAfk0Le0i tk4n0qrWebEGzed9F9BPRIHEdyFOoo5+5JZZLubMla+4RvqFuCJBicnciZZpzlEe8xKz mgAbkFtnjyTqPJdnzqBHFGyH4nFOsvj69zgkOjs2en8iCxu6irpHj7hHjhVz7GPrOUgM UbJVsCzxo5jH0k6P+HpIJZfeWGfRNKBMVCZX9z24Wa1nQp4fTv0me10tB3Mcq/RkAQRJ Uljw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786743874; x=1787348674; 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=XkVVrdAK9iWpv+mtoFZiSwPkYIpP4oPpqC5PfGzOJMk=; b=QB5Mv9kEr41O+mdQUpRHNukxb4pW0RdRJgr7Rded5t1GHkbPzU0QAOqt3Rj4sKIrUg dCA1lfDoI+8+WSHgp7yviUZDGVBJIaXlu8/6ctVJSqogH5ocZ/ph5hQ/s579OOfXKtHh ISHRciiElLvJ3kW5kRFxCrInb5yx4+jeUsG1vT+G5+kFly801BKgvRdCQW+me0cqLSRm WKYA5Df4KQHiAzTmprPEVtWAeUgTkt9jYTKvoguTXUIVNGpfioHhq8HpOnWg/tIHxJLb pmZ/JML+OW2IlZoTKEFsS7ET7ze8YiQKk8G18c2NtBvkNGUO64jppEWi1poeClA8wfqo x1eQ== X-Forwarded-Encrypted: i=1; AHgh+RoyJqMihr+tCYv7c0tRNFyVmn6HFYGFj6CJYAYI6jIoJUS66RQV5l5L/h015wEBPqoM7nPk6craG94EWnk=@vger.kernel.org X-Gm-Message-State: AOJu0YwQobpFO4MnkQv53ZuhnJpJKAqxbiKLYDqYnUnHh2TfuzgE/VfE 0rdtY1tRsstJvQIV+jVlSnsUPJOVS91PUJgEOSvMUuuw0mC3YWM37tpB X-Gm-Gg: AR+sD11KHupMQht+qOfRGnOYm2EdyU9QktUbF5ut6HpOT/5lrUn1CG2xv+PTsv1rd71 iKtcK9bK3iErK0Z2Q9N7JEEqwi8QJ6qVisVh1yq2xXelne9LGxzdpkSp5Du/ZY5lAiPlTtOyKti v5TiDsKUknfL0JsADqRfR52BGmJ5MA3CDzlvxMXPxbQs3KCECLTEANdoZvlmJTss1OTAZ9ZaHmm StYNqUyHuq3jCGuyvUh3TXwEdN7lFf9yzJKTtiX4lJag+mSooCkCm/JYAoSBnyOonjOtDbCxotM 06pJdqkCfKTggyCAnEkfvXoic2KIWztBvHulw5NkRp1TlVIB1Ax7oGQ1MmWiFPDC7rLiD5ETHAS 1gneLamPTzouFvh+AdheUArM4O10wUuItqMT0LvZ2taYL5IwGyqXAx3zIUgAAt0Peu+ilXvkbSR d8+Ydk1j0IlQ+h9sA+tsytwp8L7G0MuTkRf/l4hfPlhWMnxxzC7oYYPiBXGgXLmJ4q+0lsbbN7Z BA= X-Received: by 2002:a05:6a21:339f:b0:3bf:a624:decb with SMTP id adf61e73a8af0-3cc71cfc71cmr10066558637.27.1786743873567; Fri, 14 Aug 2026 14:44:33 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d5bd918fsm8083617eec.2.2026.08.14.14.44.30 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Aug 2026 14:44:33 -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 , Mauro Carvalho Chehab Subject: [PATCH v4 2/6] docs: sphinx-pre-install: add macOS Homebrew support Date: Sat, 15 Aug 2026 05:44:14 +0800 Message-ID: <20260814214419.49925-3-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260814214419.49925-1-chenmiao.ku@gmail.com> References: <20260814214419.49925-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 Mon Sep 28 23:53:31 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 62D723EC83B for ; Fri, 14 Aug 2026 21:44:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743878; cv=none; b=JxQ9R8JVatje80uNXBhscAiVcN/M3/DuQi3JWDCvuFY17i23FPXA3tswGvtaGdQ1J2E4W7/t5pmri2p/jRcwwFLauhnW/rHy62/SP0eiXgTEFqrnfY3aaORr0YH0OgNCyvruX98rWfihjppayjvwxl7LVBkDJ0c+98MfKkMyiwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743878; c=relaxed/simple; bh=xKFZ9Vz8OJAAmvPW1EGN8mwA1pKRyL+4q+f5g03vOI0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kgN7UeUwYMt9B37shGgWBTaakZSWD/nEktXAG5e3lbksFFnHwbK8VqM6VQsPKw322l8MoJKuiZNJFgKSeRFa0/ddEwzEbWk8tVi2GJqzczCkYetgCQs8YT5c5qp4z1lq/k9s5I2ff1of0rmWbSLyyqtC3M6cMobnhnejqlAGr6k= 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=YsZt6QNy; arc=none smtp.client-ip=209.85.216.52 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="YsZt6QNy" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-38759bcd877so1956479a91.2 for ; Fri, 14 Aug 2026 14:44:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786743877; x=1787348677; 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=Fsj/ChwjVSroo4iHvgI4/yCeHJiG8xSqz51KIR6jdP0=; b=YsZt6QNyg0P5lH8WNlyT8fRiVEbOfiAW5heHOsxOJ8wDXLRNu+5BuMy9oT0qqFR5Tx 0hkkjigJjaPcMGL1tHz9snu0dfEHGKYZlJz1aowUTaNhCF3SiawkmnL2FH2SzQBYFc7P O4ewsyILdIqwrJATIic3qsljy4R2yAgJlDh1YMA8MWQ0MGPDsVoNacKz/FzcUijH3o07 92Z8MpQAJqLO7lnaswgFi6lGEQUpLaY2q7OebZ5EuWtGnh/Yn0schYSWLdRwQzs8XTeP q/uX1Y3N7ykovRECV9N65wCp/WOr43QoVrgohjUtdPDoy2h1LTPNU4BdEkJx0AD8cBH5 Ga3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786743877; x=1787348677; 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=Fsj/ChwjVSroo4iHvgI4/yCeHJiG8xSqz51KIR6jdP0=; b=pcXRAbwBM9ouzuBduO6W4Tt0ZK6Ob7GkYgIFPj0I1i6p7oODfcYTRruikJhUlaPZNL gKU/f5kuEYhtRDuEu4NCplwbIn1bjpgZrdYmV3gfidp9s8HdCtgz3e35kWI+fk7KFqcn XBKrFeFfpgf8jjg8ZJhzMBbBXm12xjIj8B8QqY9sMBanWcskkUKuL8mau4gI6Vh9j9Ev 2rZoDP7lwXpy2eUI08pNURZwnkuc8EpEkAKV+AOHJ93dlimOlbUlz18GFLHrGKX4JzIp GPClt3D16fUcQXjGDa82XpkhEfztC52PyipSIrwkDlklaGvCK7y2WgxatGnYsfPtAHDT BH7w== X-Forwarded-Encrypted: i=1; AHgh+Rpln40zZlzd2Vkw4OdQX4tOBIG+x4ro/kCE9hWbaSurPO7zE47kIugjPREmR/9WEhmgv0rdIGMWbLdw1qw=@vger.kernel.org X-Gm-Message-State: AOJu0YyiNJy7dc2d2UQqf3vC2QW+dRU4XLcGtaHhxmmx4GzUZepXH8lx Jb0UtrcWlcfCC4wiQYSr/cP35OHra2WwJQn7TNEJqKGxq6EvsgQ/kDGo X-Gm-Gg: AR+sD109eBDWDBXqRl6RWqxecr3//yD8NaemEqKSngJYzD2GO6qwylzcCDrUy3/7s+c LSjpP4lk93/JUsJDW/DILIfnLM8knCUTM6IrGrD6hYtvWfqk88o3G2P3TuiTzKGqBrIeHz7Wh5b 0+AfZ7+10Abw5QV/x+kWluM/ZpdLfSMb68DBxgWriY095pEqhNmlulZpo6XU1+8S2Rg6HQGz6CH ix/XX8hJNyr97iShaOn3EeXyufFFI8LAP3nxSwiVrA3cuDaoL7wkZP7XdrS7OdNKnwvtoarDzxm hcOsaYXo18FfnwIXjOjDlNO5fU/F0gt0mEd/pOeoufpHqWnlkTuRjvyf1Eg//sA2VW2OMZgN6lV rFb8gEY3lJoPTqkwPzup3o4ogZKNSRzMDi/wpGI/Rw/APKDQ8KqFdW9MaFRHsJ5Wk0tqy6+InNl iaC0JIZWaaDfwcJBiUik2Pdzchke+VJSf0mi6I4i0VZfQw1PAoLnI5ZCE6OIOaksmG6oJYk73wi DI= X-Received: by 2002:a05:6a20:a11d:b0:3b4:e4f6:4f15 with SMTP id adf61e73a8af0-3cc71d5545dmr9768406637.5.1786743876482; Fri, 14 Aug 2026 14:44:36 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d5bd918fsm8083617eec.2.2026.08.14.14.44.33 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Aug 2026 14:44:36 -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 , Mauro Carvalho Chehab Subject: [PATCH v4 3/6] docs: sphinx-pre-install: check GNU Make version Date: Sat, 15 Aug 2026 05:44:15 +0800 Message-ID: <20260814214419.49925-4-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260814214419.49925-1-chenmiao.ku@gmail.com> References: <20260814214419.49925-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 --- 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 Mon Sep 28 23:53:31 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 2ACF63ECBE4 for ; Fri, 14 Aug 2026 21:44:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743882; cv=none; b=J3QvsLZo9H8c9wEeXV3k/kT9aAj1w68vNmfY5qNpOWEEffl24ko7v113VW1eUzO8AEAxkoj00H2g/mi2ryjV6L/Zj8l+u0T3b3DvfXhgP4kztM1s4+M5gYbVmJ5kMe4N/BcSO5F2vOhyhoM7eoV6D9XmKVul4MXhYlSzy07JPgo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743882; c=relaxed/simple; bh=fAZZJUGfOXQNREoNQcCQIt84VLl0GenjAyfp+zuvKYk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UYMhQB1EQk8/lHLGq3bGtOHGp7vSw6xg6ypZH8sbVL631MUfvYUFtdt43Npj5zIgxHgxShdeYUIzJsyM00ka827iM7CvoOuUqRLzt9dyoSxLO4AzJ7D+CxHtd3dTSjkfSWWxy+HM9bfqhUz+lkc+N5pZmHx45o3ZULP+ZzRbqB0= 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=CzHt3yUZ; arc=none smtp.client-ip=209.85.216.50 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="CzHt3yUZ" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-38e7109321dso1073262a91.3 for ; Fri, 14 Aug 2026 14:44:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786743879; x=1787348679; 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=5vjL0bcfCflpI7YejqKq7wVBmJ4etwCcXdP9FLIbDHQ=; b=CzHt3yUZkR0WUE4UgydEcn1OlSEtMjDJfU5FiOVfXcICu+zvpOAUzHte6bJTmz3RTo DKdLX3lyj0TKwPRcn/5XkKoxEMJSdCF6Eg7ZL3ei3BaVxIo37GE4HhFTjc/FcVz6IpSC t2kD0Hh7CwpQql3zf9gPn5P+GG/k5ZxsQkwzdWDjcKogFw8DEqsa+TAEcOSXSl2fhp0A 2rOgJTD64DpFPNAdBS7TpgLZVLeJ7vlUykXZB2Yb47SJV+RO0SvEj3d6JCy6eCAMgOEO 0XoMYs2mN/Q/zSRev7+n+aEuV1OpBIqYjvQOCr8eK2pA0BYvtJ3VqvXVvq8S9XoOkryn xCQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786743879; x=1787348679; 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=5vjL0bcfCflpI7YejqKq7wVBmJ4etwCcXdP9FLIbDHQ=; b=Wk68qthr8f8kmZM2ismk1kO8erYVQTA7kjMdPaW/ZSV6vWGQ/6Twxv7OV7sHsON79v eCG9hho5A//NvgrZn4+5ELFRQntGbM2QX0uYFG4Qd4BoBM3DAjJ3G7Oc7o0A9mu3xMh0 T2w931/q8gWmrXqN2r8rL1E8iUGXRDRUU6xsTq6IwGp9xBvu7kfeZcaDQSj+iWNuSH3R 0HZUryc+0/GEDjoFcpttnHqkn9JWvHhCQ14F88tUDNqQRUCixj2pI3MuQzzGptUOWlou USIAA4nEs/llCDERV5lWuQa2iNwiVXBIZoQ4eUWZWP9oRafeHM+EHrfo+TyXaVUY8tbL RBlA== X-Forwarded-Encrypted: i=1; AHgh+RoL4ghF2iQr13mlkIgctzJjor34m9zYXmcEXOsecEhMDGpFfJAXNXIeUd9rk9x7MzG272K9GZ1gDMuh/Us=@vger.kernel.org X-Gm-Message-State: AOJu0Yxkmk2nq0iwTkAFUlbf4/xxE40T52R1l5J8rVnXePbYE3iAd/6D fmX+OjRvNfx6HEpp/QtKsGzNT4uMmsyL4hRMZ2ypiBrcFQIVMb7re8oL X-Gm-Gg: AR+sD10ra2S5XcweSgiW/1vFTaaUQR5u0QW6vQfHAddD+qzgLFoO8F/kEYJbRX1KxaT 4FhKt5DR21n2F4W+J8sPGoATLK5iyAABHGoJyeBrO9E/XX2ACQ0acMXEVTYULR/GdAXERGmTX8b CzTDVDWmuRZFa3flWSXYGsPlxYf27evXOSUzofLKk3jDDCVuXFfRpAcGlaXNFh6cvfmnyS2ITB3 TtnY16OwXrXW7kiJXsb3IYvSk4iZGCTCwFsp1Vknk65uYHD1VM8Qg/f2KFnRj//fIUXsgozjmcS Y03UEvC+flWHD1N4I1bomsTKEVo1/sph/V3OgFDUErwIvQMjw3CbRajTJpML9iTdUxSxA4Eyk3/ U5vif8eaY1m4XJ6myMFEWbGc6CcVVv8KVAGPQe4KqHMQf3ecs/hVzHSWd92UmPg/w6xfG2t3Wel 8VTAKkyQz+EkvlgThXZUtvPsU8Va3Pl6V/5JOoIP8Zbu1aSqO1V0RCqLWMLHvPiw+Gl43KT+ScI ltuSXH/og7bSw== X-Received: by 2002:a17:90a:ec87:b0:38e:485c:ebd3 with SMTP id 98e67ed59e1d1-3933ba79ea4mr10017141a91.15.1786743879368; Fri, 14 Aug 2026 14:44:39 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d5bd918fsm8083617eec.2.2026.08.14.14.44.36 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Aug 2026 14:44:38 -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 v4 4/6] docs: sphinx-build-wrapper: prefer gmake Date: Sat, 15 Aug 2026 05:44:16 +0800 Message-ID: <20260814214419.49925-5-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260814214419.49925-1-chenmiao.ku@gmail.com> References: <20260814214419.49925-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 | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tools/docs/sphinx-build-wrapper b/tools/docs/sphinx-build-wrap= per index 1bb962202..994e5f7da 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,8 @@ 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, "LLVM=3D1", "rustdoc"] if self.verbose: print(" ".join(cmd)) =20 --=20 2.50.1 (Apple Git-155) From nobody Mon Sep 28 23:53:31 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 E01313EB104 for ; Fri, 14 Aug 2026 21:44:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743884; cv=none; b=dDmWuzs89yTfqIH7IlubQp8FFH9Q8fw+6FnWtk6VnD7GicPqV9lErTCs6Y39LbgCMYYkn1eyAjTEd15SGlKyGTnnp+Fu0dJCNC9oRCN4h6KlmFngF8ioFOY3BbO2Mkm/7zbCMT05XNEzWEHZ+ladDDsN052VoNycufp/vS3Z6N0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786743884; c=relaxed/simple; bh=Hhb4cef1MAEpu4PLBU4LkZ2I1C8LkMuNPL4aX8GslHk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GSOBsr6bQp2WZrCNiL/7rGrETepDKs4+AWAlfuJYoXcrf/guI/jsZ4drGsB+t7sxFapFuJRkTcMK3vGnf4o7AXn1QS7eHxad3JPGYgtGF/qgXf+yjxtQMjXvX8B1yBLAfkG1t3lOWQZSEzA7EbvN3WgDFkqcOVzaraMY8QFT0qw= 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=JS8PGTTu; arc=none smtp.client-ip=209.85.214.170 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="JS8PGTTu" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2cace91f112so18982125ad.0 for ; Fri, 14 Aug 2026 14:44:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786743882; x=1787348682; 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=V6GZvfEAijGaqhtKPQUOnz0gSt4IZk38gRWPOnznvfc=; b=JS8PGTTucFlURb+Ts7KhpMEDCvdHioKbIyx9nSKpCGYlih95IuCBv8CON4K55gvccb V1phV4+Lj5abaevKSAi8zvw8sy0TWPvfpsJh7GsKLjOEFRzfbm9O+W9ygxb3Y/Z6eJ5r AtdVOe4V1MU4AhfkSTcqeyr6AnCrH63j5lk7PxYkkhad3nhHe0rsRUhMNlBZLaB2hDo8 vXdiWjeZJ1ise3jRQVlGDyuHThf9RpVDOEuov+d/MMKogjcVrAF7o+5JpWf8FtU7Eh4I VCwkbHDNRGWKlCBsc6ZT/BCtcCxJCtOgetTF5J0t2Ue6fvLah5ON2J4IvHXuEkTZuLpL +x7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786743882; x=1787348682; 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=V6GZvfEAijGaqhtKPQUOnz0gSt4IZk38gRWPOnznvfc=; b=iPMUTDw2XxQJm0d//FESIPtcnY/dIIForc7s9KoChVLGG5/lM0g1X3ryh6mHr1GS1b DAvk8UcwP5pZxt+pJ6g1wLsLkG5RXGGi3O4+wI8xNQC58waAl1xikT6xdxmc7Jqc9+fT O0xWhHjgiUN+ZOrSHK4vOLCN81cscd3HyH78Fga7jp01veNPOTPv+DPMwToAYhQWSNxJ SRMNFi6MFRR4hdn8cjqsNkd2dbaNX1zmtsf2HJfjz6PIaJvDZcHN7mL0jQUiBxeSzTv1 NSlBqXi2tyXTKxSq/TVpmZCQ4mipUH1dHzprFcaEQr0/T27tBavwQ/cVoimM9FLDhCu0 f+eQ== X-Forwarded-Encrypted: i=1; AHgh+RqGgzkfF3bYbH8aPzrT67BuP7oeePx1loYcpiAnf0riYruYh2kwkwPFqqaXNP94AtPonjlgLnthlrUz+U0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+xSidxhTPfuSV8Wl83Q27EAiXqVc7YG9+S5ucg7P9sRqvsTVS 6KITl5tweoCkXPDZ/TCNT6MyFh5YrAuCk6vegB84bSRqIIj7rnTvXpyw X-Gm-Gg: AR+sD10Q1Ry6j4EmhW4yGk08bcaRNTs1uDaykhOMYHkMQbQedXoX6NSkH6XSOnMJcDK MB+6vosT1tRevWvkCQppp9PKk49LRYrM0p+b+l4gNvKLAwQjMcvm5H2ejA0aQiWZpBu2MaoPwKB CF+tz6vcRc6tNaAF3HRUq+0lvxPijLNUFp3GiDdY2Ppf7k6vEAEHiT+zH+aytjGN18qE8GGonbj W3GUwz10MX7EbVUuIDOEDKRQTEhHCzuFEa1ZMheoMaN0k7tvBYKczXIDLwxEo8PVMl1jL6zQNwn yWBvy8Mu8ADbKqq20fKDT8V2xozmK6lI89eLkJCI31jbiJJhPicgiLItGr3oIGtvBpvsH3v4Q85 dJtU+f0NV+ZZgBL2qZYbAa1ZdDyLn17Oxck9l3KzFYdnRD/LqaOtuesup833dOM+dUUPpFUt1LL zvMdbujaGVz16EE1ccN4NAXKJjD5kogfiamZZ+hXrB83yTgplpVAF19uR8F4bS0NEst3Coh8NZ0 Bo= X-Received: by 2002:a17:903:4b50:b0:2c9:a5e9:c26e with SMTP id d9443c01a7336-2d3b0eec2e4mr109964725ad.13.1786743882137; Fri, 14 Aug 2026 14:44:42 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d5bd918fsm8083617eec.2.2026.08.14.14.44.39 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Aug 2026 14:44:41 -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 v4 5/6] docs/zh_CN: doc-guide: document macOS Sphinx setup Date: Sat, 15 Aug 2026 05:44:17 +0800 Message-ID: <20260814214419.49925-6-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260814214419.49925-1-chenmiao.ku@gmail.com> References: <20260814214419.49925-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 ; Fri, 14 Aug 2026 14:44:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786743885; x=1787348685; 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=oEv+Se2gHn9GJtitJ1A6lizvRqVoiP8jcMPlwHRZirs=; b=cB3aN48ow6EvJ7B29ua3cHNA/a5Kr7zEyewrvdU+CgymqiXri0er7TN4dYCkcqQnFu rbGakpoZkAMxn929SftU1rk58vaMFiOhAxLsxs9Mc7mT4uVZYjnS3PPoc6Pg2PJCnSG2 WZ1ZltqzrludgW9TRE/rBJ+mCfhC0FKQ6WiskXnHrPGwfBXiRzqduSlgHsMEQVLdSGMZ ttxZpAwNBu7UuuBC57ZQiaQligfverSCGeC6/YSHN+2wDiYDenqsvucPVLrKLZJFsqB5 D5f3rYgJnZf0ZyIpR3TIK7o9NA3VwLr3NrawCEI91E6Qq2UzUFbLgG5rnKQD3vLlgu8M CrUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786743885; x=1787348685; 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=oEv+Se2gHn9GJtitJ1A6lizvRqVoiP8jcMPlwHRZirs=; b=fFTVN0sHpHePIYquDa/5XE9T5xfnUpvHCBRkVbyMeAOkIM5OBf5hgSpq01/f1GxARg 2yOYLSQcBPXwiWDpZRzFp3PVfBqtX1mi15PAZ1se7qjd3/4xmISpAsXUGUr/mbuJtdGs NpRYoP/UbOkcMuQtMyg0B+OCO57mFlEDlrNCH8A+/bpniyKA0Ug7EI5JumtE4tgD06aE Zx55oiBQTAtcSjjbPkCaBBh9gOFpk0kPA4hq7nsAlgBKM8m0C9SuBRcBvcmpaMsaCPlG IwY6QAgyesVhrpB+5dsLTP2YC7GjBrR/oAbxobfsCs34rYghvEwDvBpPHi1fuDkJqn/+ +xQw== X-Forwarded-Encrypted: i=1; AHgh+RpoaEjcHg+ntfP/DDCEZe9FqNg5EPoD6RsV5/aWi6UTzaJmozKXxmV6XAboG3yncFKSYuMBxRfWFvCmCZw=@vger.kernel.org X-Gm-Message-State: AOJu0YzYEfWS2pyzvYzukqX+J/pOfDlLbBeKKbdlrR9xOqJ1IS4OahcM P0yajUaBiLJEmAqBLB2jYCKOKhoGIoY3MvGFMgsehA6E5yjqMyTw+9qiipIdexjHOePb5g== X-Gm-Gg: AR+sD10TqEF0NgqnFiY8UBOcvvBkTtfFtg8gc0m4CQ6KFZJXW6xhiaGndrSzrrORBKN wz1mYj2yXizc5ORKGMnaLf+/5JiLnXTUoDnEtHBTSPo+u6lcO4AimwAo6tXg/AnnW/544GzE/wC Y41jfQMM9WJAgbV9R+R6odPfZHvfg0U7RhELLQqhAyuq6G6fyweJne21ghR/GiSEROZ4tNMcJ2i btgcNOw3WdXioHe9ByOVeTZ7TtfHtgTGsN7lpdK+mK4zHE5P8wsrRROg2apoG74uMtBBXTaYgoI yDLieir5Qc7LCCfjLp9wrmBa1cP4N9Mg2AqdIdL+nOYAg5dRPPT9aVclomD9+SrWmYmD0ppjpTE K1GIxl/bEfo3on74rnEUDtqCF5euu9DjHZOzpq5cXbdANOIT78HbMdY60rDFe8cf59xTsGtohAl i5lBgZ+Yw5Ih8NlcTS8VpuTRsnnTE8T6trZAdEkbbOA8ewv9LNN6c5ERoLeFVIQYnGTqaV/HEnv eI= X-Received: by 2002:a05:6a21:10e:b0:3bf:7994:ddca with SMTP id adf61e73a8af0-3cc71d5074cmr10967453637.29.1786743884911; Fri, 14 Aug 2026 14:44:44 -0700 (PDT) Received: from localhost.localdomain ([64.186.250.142]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d5bd918fsm8083617eec.2.2026.08.14.14.44.42 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Aug 2026 14:44: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 v4 6/6] docs/zh_CN: how-to: document case-sensitive APFS setup Date: Sat, 15 Aug 2026 05:44:18 +0800 Message-ID: <20260814214419.49925-7-chenmiao.ku@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260814214419.49925-1-chenmiao.ku@gmail.com> References: <20260814214419.49925-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 Reviewed-by: Dongliang Mu --- 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)