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.

T.let({
  tahoe:       "26",
  sequoia:     "15",
  sonoma:      "14",
  ventura:     "13",
  monterey:    "12",
  big_sur:     "11",
  catalina:    "10.15",
  mojave:      "10.14",
  high_sierra: "10.13",
  sierra:      "10.12",
  el_capitan:  "10.11",
}.freeze, T::Hash[Symbol, String])
VERSIONS_TO_ANALYTICS_PRETTY_NAMES =

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.

TODO:

can be replaced with a call to #pretty_name once we remove support

for El Capitan.

T.let({
  "26"    => "macOS Tahoe (26)",
  "15"    => "macOS Sequoia (15)",
  "14"    => "macOS Sonoma (14)",
  "13"    => "macOS Ventura (13)",
  "12"    => "macOS Monterey (12)",
  "11"    => "macOS Big Sur (11)",
  "10.16" => "macOS Big Sur (11)",
  "10.15" => "macOS Catalina (10.15)",
  "10.14" => "macOS Mojave (10.14)",
  "10.13" => "macOS High Sierra (10.13)",
  "10.12" => "macOS Sierra (10.12)",
  "10.11" => "OS X El Capitan (10.11)",
}.freeze, T::Hash[String, 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:



82
83
84
85
86
87
88
89
90
# File 'macos_version.rb', line 82

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

.analytics_pretty_name(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.

Parameters:

Returns:



54
55
56
57
58
59
60
# File 'macos_version.rb', line 54

def self.analytics_pretty_name(version)
  VERSIONS_TO_ANALYTICS_PRETTY_NAMES.fetch(version) do
    VERSIONS_TO_ANALYTICS_PRETTY_NAMES.find do |v, _|
      version.start_with?(v)
    end&.last
  end
end

.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)


76
77
78
79
# File 'macos_version.rb', line 76

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:



63
64
65
66
67
68
69
70
71
72
73
# File 'macos_version.rb', line 63

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)


153
154
155
# File 'macos_version.rb', line 153

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)


158
159
160
# File 'macos_version.rb', line 158

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:



137
138
139
140
141
142
143
144
145
# File 'macos_version.rb', line 137

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)


168
169
170
171
172
173
174
175
176
# File 'macos_version.rb', line 168

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)


114
115
116
117
118
119
120
121
122
123
# File 'macos_version.rb', line 114

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:



126
127
128
129
130
131
132
133
134
# File 'macos_version.rb', line 126

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)


163
164
165
# File 'macos_version.rb', line 163

def unsupported_release?
  outdated_release? || prerelease?
end