Spec-Zone.ru › Homebrew

Модуль: OS::Mac::CLT Закрытый

Расширен модулем:
Utils::Output::Mixin
Определён в:
os/mac/xcode.rb

Обзор

Этот модуль является частью закрытого API. Этот модуль можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.

Вспомогательный модуль для получения сведений о Command Line Tools в macOS.

Краткое описание констант свернуть

EXECUTABLE_PKG_ID =

Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.

"com.apple.pkg.CLTools_Executables"
PKG_PATH =

Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.

"/Library/Developer/CommandLineTools"

Краткое описание методов класса свернуть

  • .below_minimum_version? ⇒ Boolean закрытый
  • .detect_clang_version ⇒ String? закрытый
  • .detect_version ⇒ String? закрытый
  • .detect_version_from_clang_version ⇒ String? закрытый
  • .installation_instructions ⇒ String закрытый
  • .installation_then_reinstall_instructions ⇒ String закрытый
  • .installed? ⇒ Boolean закрытый

    Возвращает true, даже если установлены устаревшие инструменты.

  • .latest_clang_version ⇒ String закрытый

    Обновляйте эти значения, когда новая версия распространяется через Software Update и наши системы CI обновлены.

  • .minimum_version ⇒ String закрытый

    Обновляйте эти значения, если без этого возникают серьёзные проблемы (например, отсутствие SDK для этой версии macOS).

  • .outdated? ⇒ Boolean закрытый
  • .reinstall_instructions(reason: "resolve your issues") ⇒ String закрытый
  • .sdk(version = nil) ⇒ SDK? закрытый
  • .sdk_locator ⇒ CLTSDKLocator закрытый
  • .sdk_path(version = nil) ⇒ ::Pathname? закрытый
  • .update_instructions ⇒ String закрытый
  • .version ⇒ ::Version внутренний

    Строка версии пакета CLT (довольно длинная).

Методы, подключённые из 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

Подробное описание методов класса

.below_minimum_version? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


356
357
358
359
360
# File 'os/mac/xcode.rb', line 356

def self.below_minimum_version?
  return false unless installed?

  version < minimum_version
end

.detect_clang_version ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


371
372
373
374
# File 'os/mac/xcode.rb', line 371

def self.detect_clang_version
  version_output = Utils.popen_read("#{PKG_PATH}/usr/bin/clang", "--version")
  version_output[/clang-(\d+(\.\d+)+)/, 1]
end

.detect_version ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


399
400
401
402
403
404
405
406
407
# File 'os/mac/xcode.rb', line 399

def self.detect_version
  version = T.let(nil, T.nilable(String))
  if File.exist?("#{PKG_PATH}/usr/bin/clang")
    version = MacOS.pkgutil_info(EXECUTABLE_PKG_ID)[/version: (.+)$/, 1]
    return version if version
  end

  detect_version_from_clang_version
end

.detect_version_from_clang_version ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


377
378
379
380
381
382
# File 'os/mac/xcode.rb', line 377

def self.detect_version_from_clang_version
  clang_version = detect_clang_version&.sub(/\A(\d+)(\d)(\d)\..*/, "\\1.\\2.\\3")
  return if clang_version.nil?

  MacOS::Xcode.detect_version_from_clang_version(Version.new(clang_version))
end

.installation_instructions ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


270
271
272
273
274
275
276
277
278
279
280
281
282
# File 'os/mac/xcode.rb', line 270

def self.installation_instructions
  if OS::Mac.version.prerelease?
    <<~EOS
      Install the Command Line Tools for Xcode #{minimum_version.split(".").first} from:
#{Formatter.url(MacOS::Xcode::APPLE_DEVELOPER_DOWNLOAD_URL)}    EOS
  else
    <<~EOS
      Install the Command Line Tools:
        xcode-select --install
    EOS
  end
end

.installation_then_reinstall_instructions ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


315
316
317
318
319
320
# File 'os/mac/xcode.rb', line 315

def self.installation_then_reinstall_instructions
  <<~EOS
#{installation_instructions}#{reinstall_instructions}  EOS
end

.installed? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает true, даже если установлены устаревшие инструменты.

Возвращает:

  • (Boolean)


250
251
252
# File 'os/mac/xcode.rb', line 250

def self.installed?
  !version.null?
end

.latest_clang_version ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Обновляйте эти значения, когда новая версия распространяется через Software Update и наши системы CI обновлены.

Возвращает:

  • (String)


325
326
327
328
329
330
331
332
333
334
335
# File 'os/mac/xcode.rb', line 325

def self.latest_clang_version
  case MacOS.version
  when "27" then "2100.3.20.102"
  when "26", "15" then "1700.6.4.2"
  when "14" then "1600.0.26.6"
  when "13" then "1500.1.0.2.5"
  when "12" then "1400.0.29.202"
  when "11" then "1300.0.29.30"
  else           "1200.0.32.29"
  end
end

.minimum_version ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Обновляйте эти значения, если без этого возникают серьёзные проблемы (например, отсутствие SDK для этой версии macOS). Как правило, это будет первый стабильный выпуск CLT для этой версии macOS.

Возвращает:

  • (String)


341
342
343
344
345
346
347
348
349
350
351
352
353
# File 'os/mac/xcode.rb', line 341

def self.minimum_version
  macos = MacOS.version
  case macos
  when "15" then "16.0.0"
  when "14" then "15.0.0"
  when "13" then "14.0.0"
  when "12" then "13.0.0"
  when "11" then "12.5.0"
  when "10.15" then "11.0.0"
  else
    "#{macos}.0.0"
  end
end

.outdated? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


363
364
365
366
367
368
# File 'os/mac/xcode.rb', line 363

def self.outdated?
  clang_version = detect_clang_version
  return false unless clang_version

  ::Version.new(clang_version) < latest_clang_version
end

.reinstall_instructions(reason: "resolve your issues") ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • reason (String) (по умолчанию: "resolve your issues")

Возвращает:

  • (String)


285
286
287
288
289
290
291
292
293
294
295
# File 'os/mac/xcode.rb', line 285

def self.reinstall_instructions(reason: "resolve your issues")
  <<~EOS
    If that doesn't #{reason}, run:
      sudo rm -rf /Library/Developer/CommandLineTools
      sudo xcode-select --install
    Alternatively, manually download them from:
#{Formatter.url(MacOS::Xcode::APPLE_DEVELOPER_DOWNLOAD_URL)}.
    You should download the Command Line Tools for Xcode #{MacOS::Xcode.latest_version}.
  EOS
end

.sdk(version = nil) ⇒ SDK?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • version (MacOSVersion, nil) (по умолчанию: nil)

Возвращает:

  • (SDK, nil)


260
261
262
# File 'os/mac/xcode.rb', line 260

def self.sdk(version = nil)
  sdk_locator.sdk_if_applicable(version)
end

.sdk_locator ⇒ CLTSDKLocator

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (CLTSDKLocator)


255
256
257
# File 'os/mac/xcode.rb', line 255

def self.sdk_locator
  @sdk_locator ||= T.let(CLTSDKLocator.new, T.nilable(OS::Mac::CLTSDKLocator))
end

.sdk_path(version = nil) ⇒ ::Pathname?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • version (MacOSVersion, nil) (по умолчанию: nil)

Возвращает:

  • (::Pathname, nil)


265
266
267
# File 'os/mac/xcode.rb', line 265

def self.sdk_path(version = nil)
  sdk(version)&.path
end

.update_instructions ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
# File 'os/mac/xcode.rb', line 298

def self.update_instructions
  return installation_instructions if OS::Mac.version.prerelease?

  software_update_location = if MacOS.version >= "13"
    "System Settings"
  else
    "System Preferences"
  end

  <<~EOS
    Update them from Software Update in #{software_update_location}.
#{reinstall_instructions(reason: "show you any updates")}  EOS
end

.version ⇒ ::Version

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Строка версии пакета CLT (довольно длинная). Обратите внимание, что разные способы установки CLT приводят к разным номерам версий.

Возвращает:

  • (::Version)


390
391
392
393
394
395
396
# File 'os/mac/xcode.rb', line 390

def self.version
  if @version ||= T.let(detect_version, T.nilable(String))
    ::Version.new @version
  else
    ::Version::NULL
  end
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/OS/Mac/CLT.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API