Method: Gem::Platform#===

Defined in:
lib/rubygems/platform.rb

#===(other) ⇒ Object

Does other match this platform? Two platforms match if they have the same CPU, or either has a CPU of ‘universal’, they have the same OS, and they have the same version, or either one has no version

Additionally, the platform will match if the local CPU is ‘arm’ and the other CPU starts with “armv” (for generic 32-bit ARM family support).

Of note, this method is not commutative. Indeed the OS ‘linux’ has a special case: the version is the libc name, yet while “no version” stands as a wildcard for a binary gem platform (as for other OSes), for the runtime platform “no version” stands for ‘gnu’. To be able to distinguish these, the method receiver is the gem platform, while the argument is the runtime platform.

– NOTE: Until it can be removed, changes to this method must also be reflected in bundler/lib/bundler/rubygems_ext.rb



192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# File 'lib/rubygems/platform.rb', line 192

def ===(other)
  return nil unless Gem::Platform === other

  # universal-mingw32 matches x64-mingw-ucrt
  return true if (@cpu == "universal" || other.cpu == "universal") &&
                 @os.start_with?("mingw") && other.os.start_with?("mingw")

  # cpu
  ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
  (@cpu == "arm" && other.cpu.start_with?("armv"))) &&

    # os
    @os == other.os &&

    # version
    (
      (@os != "linux" && (@version.nil? || other.version.nil?)) ||
      (@os == "linux" && (normalized_linux_version == other.normalized_linux_version || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
      @version == other.version
    )
end