summaryrefslogtreecommitdiff
path: root/lib/rake/compiler_config.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rake/compiler_config.rb')
-rw-r--r--lib/rake/compiler_config.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/rake/compiler_config.rb b/lib/rake/compiler_config.rb
new file mode 100644
index 0000000..e9832dc
--- /dev/null
+++ b/lib/rake/compiler_config.rb
@@ -0,0 +1,38 @@
+module Rake
+ class CompilerConfig
+ def initialize(config_path)
+ require "yaml"
+ @config = YAML.load_file(config_path)
+ end
+
+ def find(ruby_version, gem_platform)
+ gem_platform = Gem::Platform.new(gem_platform)
+
+ @config.each do |config_name, config_location|
+ # There are two variations we might find in the rake-compiler config.yml
+ #
+ # 1. config_name: rbconfig-x86_64-linux-3.0.0
+ # runtime_platform_name: x86_64-linux
+ # runtime_version: 3.0.0
+ #
+ # 2. config_name: rbconfig-x86_64-linux-gnu-3.0.0
+ # runtime_platform_name: x86_64-linux-gnu
+ # runtime_version: 3.0.0
+ #
+ # With rubygems < 3.3.21, both variations will be present (two entries pointing at the same
+ # installation).
+ #
+ # With rubygems >= 3.3.21, only the second variation will be present.
+ runtime_platform_name = config_name.split("-")[1..-2].join("-")
+ runtime_version = config_name.split("-").last
+ runtime_platform = Gem::Platform.new(runtime_platform_name)
+
+ if (ruby_version == runtime_version) && (gem_platform =~ runtime_platform)
+ return config_location
+ end
+ end
+
+ nil
+ end
+ end
+end