summaryrefslogtreecommitdiff
path: root/lib/bundler/gem_helpers.rb
blob: 2af87c94d94c38fad97a95ec217673228e0a356d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module Bundler
  module GemHelpers

    GENERIC_CACHE = {}
    GENERICS = [
      [Gem::Platform.new('java'), Gem::Platform.new('java')],
      [Gem::Platform.new('mswin32'), Gem::Platform.new('mswin32')],
      [Gem::Platform.new('mswin64'), Gem::Platform.new('mswin64')],
      [Gem::Platform.new('universal-mingw32'), Gem::Platform.new('universal-mingw32')],
      [Gem::Platform.new('x64-mingw32'), Gem::Platform.new('x64-mingw32')],
      [Gem::Platform.new('x86_64-mingw32'), Gem::Platform.new('x64-mingw32')],
      [Gem::Platform.new('mingw32'), Gem::Platform.new('x86-mingw32')]
    ]

    def generic(p)
      return p if p == Gem::Platform::RUBY

      GENERIC_CACHE[p] ||= begin
        _, found = GENERICS.find do |match, _generic|
          p.os == match.os && (!match.cpu || p.cpu == match.cpu)
        end
        found || Gem::Platform::RUBY
      end
    end
  end
end