Модуль: OS::Mac Приватный
- Расширен модулем:
- Utils::Output::Mixin
- Определён в:
- os/mac.rb,
extend/os/mac/keg.rb,
extend/os/mac/cleaner.rb,
extend/os/mac/cleanup.rb,
extend/os/mac/formula.rb,
extend/os/mac/readall.rb,
extend/os/mac/sandbox.rb,
extend/os/mac/cask/dsl.rb,
extend/os/mac/cmd/info.rb,
extend/os/mac/hardware.rb,
extend/os/mac/test_bot.rb,
extend/os/mac/reinstall.rb,
extend/os/mac/diagnostic.rb,
extend/os/mac/api/internal.rb,
extend/os/mac/hardware/cpu.rb,
extend/os/mac/keg_relocate.rb,
extend/os/mac/utils/socket.rb,
extend/os/mac/dev-cmd/tests.rb,
extend/os/mac/language/java.rb,
extend/os/mac/system_config.rb,
extend/os/mac/utils/bottles.rb,
extend/os/mac/bundle/skipper.rb,
extend/os/mac/cask/installer.rb,
extend/os/mac/dev-cmd/bottle.rb,
extend/os/mac/extend/ENV/std.rb,
extend/os/mac/linkage_checker.rb,
extend/os/mac/missing_formula.rb,
extend/os/mac/simulate_system.rb,
extend/os/mac/extend/ENV/super.rb,
extend/os/mac/development_tools.rb,
extend/os/mac/extend/ENV/shared.rb,
extend/os/mac/formula_installer.rb,
extend/os/mac/extend/pathname/os.rb,
extend/os/mac/cask/artifact/moved.rb,
extend/os/mac/dependency_collector.rb,
extend/os/mac/formula_cellar_checks.rb,
extend/os/mac/cask/artifact/symlinked.rb,
extend/os/mac/cask/artifact/abstract_uninstall.rb,
cask/macos.rb,
os/mac/sdk.rb,
os/mac/xcode.rb
Обзор
Этот модуль является частью приватного API. Этот модуль можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Вспомогательный модуль для получения системной информации в macOS.
Определённые в пространстве имён
Модули: API, Bottles, Bundle, CLT, Cask, Cleaner, Cleanup, Cmd, DependencyCollector, DevCmd, DevelopmentTools, Diagnostic, Formula, FormulaCellarChecks, FormulaInstaller, Hardware, Keg, Language, LinkageChecker, MissingFormula, Pathname, Readall, Reinstall, Sandbox, SharedEnvExtension, SimulateSystem, Stdenv, Superenv, SystemConfig, TestBot, UNIXSocketExt, Xcode Классы: CLTSDKLocator, SDK, XcodeSDKLocator
Краткое описание методов класса свернуть
- .active_developer_dir ⇒ String приватный
- .app_with_bundle_id(*ids) ⇒ ::Pathname? приватный
- .full_version ⇒ MacOSVersion внутренний
Это значение можно сравнивать с числами, строками или символами с помощью стандартных методов Ruby модуля Comparable.
- .full_version=(version) ⇒ void приватный
- .language ⇒ String? приватный
- .languages ⇒ Array<String> приватный
- .latest_sdk_version ⇒ ::Version приватный
- .mdfind(*ids) ⇒ Array<String> приватный
- .mdfind_query(*ids) ⇒ String приватный
- .pkgutil_info(id) ⇒ String приватный
- .preferred_perl_version ⇒ String приватный
- .sdk(version = nil) ⇒ SDK? приватный
Если запрошен конкретный SDK:.
- .sdk_for_formula(formula, version = nil, check_only_runtime_requirements: false) ⇒ SDK?
Возвращает путь к SDK, необходимому согласно требованиям формулы.
- .sdk_locator ⇒ CLTSDKLocator, XcodeSDKLocator приватный
- .sdk_path(version = nil) ⇒ ::Pathname?
Возвращает путь к SDK или nil согласно правилам, заданным методом Mac.sdk.
- .sdk_path_if_needed(version = nil) ⇒ ::Pathname?
Если установлены и Xcode, и CLT, отдаёт предпочтение SDK CLT.
- .system_dir?(dir) ⇒ Boolean приватный
- .undeletable?(path) ⇒ Boolean приватный
- .version ⇒ MacOSVersion внутренний
Это значение можно сравнивать с числами, строками или символами с помощью стандартных методов Ruby модуля Comparable.
Методы, включённые из Utils::Output::Mixin
issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_upgradable, pretty_warning
Подробное описание методов класса
.active_developer_dir ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
98 99 100 101 102 103 | # File 'os/mac.rb', line 98 def self.active_developer_dir @active_developer_dir ||= T.let( Utils.popen_read("/usr/bin/xcode-select", "-print-path").strip, T.nilable(String), ) end |
.app_with_bundle_id(*ids) ⇒ ::Pathname?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
174 175 176 177 178 179 180 181 182 183 184 | # File 'os/mac.rb', line 174 def self.app_with_bundle_id(*ids) require "bundle_version" paths = mdfind(*ids).filter_map do |bundle_path| ::Pathname.new(bundle_path) if bundle_path.exclude?("/Backups.backupdb/") end return paths.first unless paths.all? { |bp| (bp/"Contents/Info.plist").exist? } # Prefer newest one, if we can find it. paths.max_by { |bundle_path| Homebrew::BundleVersion.from_info_plist(bundle_path/"Contents/Info.plist") } end |
.full_version ⇒ MacOSVersion
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Его можно сравнивать с числами, строками или символами с помощью стандартных методов Ruby модуля Comparable.
41 42 43 44 45 46 47 48 49 50 51 | # File 'os/mac.rb', line 41 def self.full_version @full_version ||= T.let(nil, T.nilable(MacOSVersion)) # HOMEBREW_FAKE_MACOS is set system-wide in the macOS 11-arm64-cross image # for building a macOS 11 Portable Ruby on macOS 12 # odisabled: remove support for Big Sur September (or later) 2027 @full_version ||= if (fake_macos = ENV.fetch("HOMEBREW_FAKE_MACOS", nil)) MacOSVersion.new(fake_macos) else MacOSVersion.new(VERSION) end end |
.full_version=(version) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
54 55 56 57 | # File 'os/mac.rb', line 54 def self.full_version=(version) @full_version = MacOSVersion.new(version.chomp) @version = nil end |
.language ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
93 94 95 | # File 'os/mac.rb', line 93 def self.language languages.first end |
.languages ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
78 79 80 81 82 83 84 85 86 87 88 89 90 | # File 'os/mac.rb', line 78 def self.languages @languages ||= T.let(nil, T.nilable(T::Array[String])) return @languages if @languages os_langs = Utils.popen_read("defaults", "read", "-g", "AppleLanguages") if os_langs.blank? # User settings don't exist so check the system-wide one. os_langs = Utils.popen_read("defaults", "read", "/Library/Preferences/.GlobalPreferences", "AppleLanguages") end os_langs = T.cast(os_langs.scan(/[^ \n"(),]+/), T::Array[String]) @languages = os_langs end |
.latest_sdk_version ⇒ ::Version
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
60 61 62 63 64 | # File 'os/mac.rb', line 60 def self.latest_sdk_version # TODO: bump version when new Xcode macOS SDK is released # NOTE: We only track the major version of the SDK. ::Version.new("26") end |
.mdfind(*ids) ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
187 188 189 190 191 192 | # File 'os/mac.rb', line 187 def self.mdfind(*ids) @mdfind ||= T.let(nil, T.nilable(T::Hash[T::Array[String], T::Array[String]])) (@mdfind ||= {}).fetch(ids) do @mdfind[ids] = Utils.popen_read("/usr/bin/mdfind", mdfind_query(*ids)).split("\n") end end |
.mdfind_query(*ids) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
203 204 205 | # File 'os/mac.rb', line 203 def self.mdfind_query(*ids) ids.map! { |id| "kMDItemCFBundleIdentifier == #{id}" }.join(" || ") end |
.pkgutil_info(id) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
195 196 197 198 199 200 | # File 'os/mac.rb', line 195 def self.pkgutil_info(id) @pkginfo ||= T.let(nil, T.nilable(T::Hash[String, String])) (@pkginfo ||= {}).fetch(id) do |key| @pkginfo[key] = Utils.popen_read("/usr/sbin/pkgutil", "--pkg-info", key).strip end end |
.preferred_perl_version ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
67 68 69 70 71 72 73 74 75 | # File 'os/mac.rb', line 67 def self.preferred_perl_version if version >= :sonoma "5.34" elsif version >= :big_sur "5.30" else "5.18" end end |
.sdk(version = nil) ⇒ SDK?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Если запрошен конкретный SDK:
1. The requested SDK is returned, if it's installed.
2. If the requested SDK is not installed, the newest SDK (if any SDKs
are available) is returned.
3. If no SDKs are available, nil is returned.
Если конкретный SDK не запрошен, возвращается SDK, соответствующий версии ОС, если он доступен. В противном случае возвращается последняя версия SDK.
124 125 126 | # File 'os/mac.rb', line 124 def self.sdk(version = nil) sdk_locator.sdk_if_applicable(version) end |
.sdk_for_formula(formula, version = nil, check_only_runtime_requirements: false) ⇒ SDK?
Возвращает путь к SDK, необходимому в соответствии с требованиями формулы.
138 139 140 141 142 143 144 145 146 147 148 149 150 | # File 'os/mac.rb', line 138 def self.sdk_for_formula(formula, version = nil, check_only_runtime_requirements: false) # If the formula requires Xcode, don't return the CLT SDK # If check_only_runtime_requirements is true, don't necessarily return the # Xcode SDK if the XcodeRequirement is only a build or test requirement. return Xcode.sdk if formula.requirements.any? do |req| next false unless req.is_a? XcodeRequirement next false if check_only_runtime_requirements && req.build? && !req.test? true end sdk(version) end |
.sdk_locator ⇒ CLTSDKLocator, XcodeSDKLocator
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
106 107 108 109 110 111 112 | # File 'os/mac.rb', line 106 def self.sdk_locator if CLT.installed? CLT.sdk_locator else Xcode.sdk_locator end end |
.sdk_path(version = nil) ⇒ ::Pathname?
Возвращает путь к SDK или nil, следуя правилам, установленным для sdk.
156 157 158 159 | # File 'os/mac.rb', line 156 def self.sdk_path(version = nil) s = sdk(version) s&.path end |
.sdk_path_if_needed(version = nil) ⇒ ::Pathname?
Если установлены и Xcode, и CLT, отдаёт предпочтение SDK CLT. Ожидаемые результаты:
- В системах только с Xcode возвращает SDK Xcode.
- В системах только с CLT возвращает SDK CLT.
168 169 170 171 | # File 'os/mac.rb', line 168 def self.sdk_path_if_needed(version = nil) odeprecated "MacOS.sdk_path_if_needed", "MacOS.sdk_path" sdk_path(version) end |
.system_dir?(dir) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
382 383 384 | # File 'cask/macos.rb', line 382 def self.system_dir?(dir) SYSTEM_DIRS.include?(::Pathname.new(dir).) end |
.undeletable?(path) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
387 388 389 | # File 'cask/macos.rb', line 387 def self.undeletable?(path) UNDELETABLE_PATHS.include?(::Pathname.new(path).) end |
.version ⇒ MacOSVersion
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Это значение можно сравнивать с числами, строками или символами с помощью стандартных методов Ruby Comparable.
32 33 34 | # File 'os/mac.rb', line 32 def self.version @version ||= T.let(full_version.strip_patch, T.nilable(MacOSVersion)) end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/OS/Mac.html