Class: MacOSVersion Private

Inherits:
Version show all
Defined in:
macos_version.rb

Overview

This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.

A macOS version.

Defined Under Namespace

Classes: Error

Constant Summary collapse

SYMBOLS =

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.

Note:

When removing symbols here, ensure that they are added to DEPRECATED_MACOS_VERSIONS in MacOSRequirement.

Note:

Changes to this list must match macos_version_name in cmd/update.sh.

T.let({ tahoe: "26", sequoia: "15", sonoma: "14", ventura: "13", monterey: "12", # odisabled: remove support for Big Sur and macOS x86_64 September (or later) 2027  big_sur: "11", # odisabled: remove support for Catalina September (or later) 2026  catalina: "10.15", }.freeze, T::Hash[Symbol, String])
NULL =

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.

Note:

Constructor needs to called with an arbitrary macOS-like version which is then set to nil.

Represents the absence of a version.

T.let(MacOSVersion.new("10.0").tap do |v| T.let(v, MacOSVersion).instance_variable_set(:@version, nil) end.freeze, MacOSVersion)

Constants inherited from Version

Version::NULL_TOKEN

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Version

#commit, #compare, detect, #detected_from_url?, formula_optionally_versioned_regex, #freeze, #head?, #major, #major_minor, #major_minor_patch, #minor, #null?, parse, #patch, #respond_to?, #to_f, #to_i, #to_json, #to_str, #update_commit

Constructor Details

#initialize(version) ⇒ void

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.

Parameters:

Raises:

 55 56 57 58 59 60 61 62 63
# File 'macos_version.rb', line 55 def initialize(version) raise MacOSVersion::Error, version unless /\A\d{2,}(?:\.\d+){0,2}\z/.match?(version) super(T.must(version)) @comparison_cache = T.let({}, T::Hash[T.untyped, T.nilable(Integer)]) @pretty_name = T.let(nil, T.nilable(String)) @sym = T.let(nil, T.nilable(Symbol)) end

Class Method Details

.from_symbol(version) ⇒ T.attached_class

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.

Parameters:

Returns:

  • (T.attached_class)
 49 50 51 52
# File 'macos_version.rb', line 49 def self.from_symbol(version) str = SYMBOLS.fetch(version) { raise MacOSVersion::Error, version } new(str) end

.kernel_major_version(macos_version) ⇒ Version

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.

Parameters:

Returns:

 36 37 38 39 40 41 42 43 44 45 46
# File 'macos_version.rb', line 36 def self.kernel_major_version(macos_version) version_major = macos_version.major.to_i if version_major >= 26 Version.new((version_major - 1).to_s) elsif version_major > 10 Version.new((version_major + 9).to_s) else version_minor = macos_version.minor.to_i Version.new((version_minor + 4).to_s) end end

Instance Method Details

#outdated_release?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.

Returns:

  • (Boolean)
 126 127 128
# File 'macos_version.rb', line 126 def outdated_release? self < HOMEBREW_MACOS_OLDEST_SUPPORTED end

#prerelease?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.

Returns:

  • (Boolean)
 131 132 133
# File 'macos_version.rb', line 131 def prerelease? self >= HOMEBREW_MACOS_NEWEST_UNSUPPORTED end

#pretty_nameString

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.

Returns:

 110 111 112 113 114 115 116 117 118
# File 'macos_version.rb', line 110 def pretty_name return @pretty_name if @pretty_name pretty_name = to_sym.to_s.split("_").map(&:capitalize).join(" ").freeze @pretty_name = pretty_name unless frozen? pretty_name end

#requires_nehalem_cpu?Boolean Also known as: requires_sse4?, requires_sse41?, requires_sse42?, requires_popcnt?

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.

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)
 141 142 143 144 145 146 147 148 149
# File 'macos_version.rb', line 141 def requires_nehalem_cpu? return false if null? require "hardware" return Hardware.oldest_cpu(self) == :nehalem if Hardware::CPU.intel? raise ArgumentError, "Unexpected architecture: #{Hardware::CPU.arch}. This only works with Intel architecture." end

#strip_patchT.self_type

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.

Returns:

  • (T.self_type)
 87 88 89 90 91 92 93 94 95 96
# File 'macos_version.rb', line 87 def strip_patch return self if null? # Big Sur is 11.x but Catalina is 10.15.x.  if T.must(major) >= 11 self.class.new(major.to_s) else major_minor end end

#to_symSymbol

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.

Returns:

 99 100 101 102 103 104 105 106 107
# File 'macos_version.rb', line 99 def to_sym return @sym if @sym sym = SYMBOLS.invert.fetch(strip_patch.to_s, :dunno) @sym = sym unless frozen? sym end

#unsupported_release?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.

Returns:

  • (Boolean)
 136 137 138
# File 'macos_version.rb', line 136 def unsupported_release? outdated_release? || prerelease? end