Module: OS::Mac::CLT Private
- Defined in:
- os/mac/xcode.rb,
os/linux.rb
Overview
This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.
Helper module for querying macOS Command Line Tools information.
Constant Summary collapse
- EXECUTABLE_PKG_ID =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
The original Mavericks CLT package ID
"com.apple.pkg.CLTools_Executables"
- MAVERICKS_NEW_PKG_ID =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
obsolete
"com.apple.pkg.CLTools_Base"
- PKG_PATH =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
"/Library/Developer/CommandLineTools"
Class Method Summary collapse
-
.below_minimum_version? ⇒ Boolean
private
-
.detect_clang_version ⇒ String?
private
-
.detect_version ⇒ String?
private
-
.detect_version_from_clang_version ⇒ String?
private
-
.installation_instructions ⇒ String
private
-
.installed? ⇒ Boolean
-
.latest_clang_version ⇒ String
private
Bump these when the new version is distributed through Software Update and our CI systems have been updated.
-
.minimum_version ⇒ String
private
Bump these if things are badly broken (e.g. no SDK for this macOS) without this.
-
.outdated? ⇒ Boolean
private
-
.provides_sdk? ⇒ Boolean
private
-
.sdk(v = nil) ⇒ SDK?
private
-
.sdk_locator ⇒ CLTSDKLocator
private
-
.sdk_path(v = nil) ⇒ Pathname?
private
-
.separate_header_package? ⇒ Boolean
private
-
.update_instructions ⇒ String
private
-
.version ⇒ ::Version
Class Method Details
.below_minimum_version? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
374 375 376 377 378 |
# File 'os/mac/xcode.rb', line 374 def below_minimum_version? return false unless installed? version < minimum_version end |
.detect_clang_version ⇒ String?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
389 390 391 392 |
# File 'os/mac/xcode.rb', line 389 def detect_clang_version version_output = Utils.popen_read("#{PKG_PATH}/usr/bin/clang", "--version") version_output[/clang-(\d+(\.\d+)+)/, 1] end |
.detect_version ⇒ String?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
412 413 414 415 416 417 418 419 420 421 422 |
# File 'os/mac/xcode.rb', line 412 def detect_version version = T.let(nil, T.nilable(String)) [EXECUTABLE_PKG_ID, MAVERICKS_NEW_PKG_ID].each do |id| next unless File.exist?("#{PKG_PATH}/usr/bin/clang") version = MacOS.pkgutil_info(id)[/version: (.+)$/, 1] return version if version end detect_version_from_clang_version end |
.detect_version_from_clang_version ⇒ String?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
395 396 397 |
# File 'os/mac/xcode.rb', line 395 def detect_version_from_clang_version detect_clang_version&.sub(/^(\d+)0(\d)\./, "\\1.\\2.") end |
.installation_instructions ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
304 305 306 307 308 309 310 311 312 313 314 315 316 317 |
# File 'os/mac/xcode.rb', line 304 def installation_instructions if MacOS.version == "10.14" # This is not available from `xcode-select` <<~EOS Install the Command Line Tools for Xcode 11.3.1 from: #{Formatter.url(MacOS::Xcode::APPLE_DEVELOPER_DOWNLOAD_URL)} EOS else <<~EOS Install the Command Line Tools: xcode-select --install EOS end end |
.installed? ⇒ Boolean
85 86 87 |
# File 'os/linux.rb', line 85 def installed? false end |
.latest_clang_version ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Bump these when the new version is distributed through Software Update and our CI systems have been updated.
343 344 345 346 347 348 349 350 351 352 353 354 |
# File 'os/mac/xcode.rb', line 343 def latest_clang_version case MacOS.version when "13" then "1400.0.29.202" when "12" then "1316.0.21.2.5" when "11" then "1300.0.29.30" when "10.15" then "1200.0.32.29" when "10.14" then "1100.0.33.17" when "10.13" then "1000.10.44.2" when "10.12" then "900.0.39.2" else "800.0.42.1" end end |
.minimum_version ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Bump these if things are badly broken (e.g. no SDK for this macOS) without this. Generally this will be the first stable CLT release on that macOS version.
360 361 362 363 364 365 366 367 368 369 370 371 |
# File 'os/mac/xcode.rb', line 360 def minimum_version case MacOS.version 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" when "10.14" then "10.0.0" when "10.13" then "9.0.0" when "10.12" then "8.0.0" else "1.0.0" end end |
.outdated? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
381 382 383 384 385 386 |
# File 'os/mac/xcode.rb', line 381 def outdated? clang_version = detect_clang_version return false unless clang_version ::Version.new(clang_version) < latest_clang_version end |
.provides_sdk? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
284 285 286 |
# File 'os/mac/xcode.rb', line 284 def provides_sdk? version >= "8" end |
.sdk(v = nil) ⇒ SDK?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
294 295 296 |
# File 'os/mac/xcode.rb', line 294 def sdk(v = nil) sdk_locator.sdk_if_applicable(v) end |
.sdk_locator ⇒ CLTSDKLocator
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
289 290 291 |
# File 'os/mac/xcode.rb', line 289 def sdk_locator @sdk_locator ||= CLTSDKLocator.new end |
.sdk_path(v = nil) ⇒ Pathname?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
299 300 301 |
# File 'os/mac/xcode.rb', line 299 def sdk_path(v = nil) sdk(v)&.path end |
.separate_header_package? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
279 280 281 |
# File 'os/mac/xcode.rb', line 279 def separate_header_package? version >= "10" && MacOS.version >= "10.14" end |
.update_instructions ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 |
# File 'os/mac/xcode.rb', line 320 def update_instructions software_update_location = if MacOS.version >= "10.14" "System Preferences" else "the App Store" end <<~EOS Update them from Software Update in #{software_update_location}. If that doesn't show you any updates, 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 |