language/java: add support for OpenJDK formula

This commit is contained in:
Bo Anderson 2020-06-19 11:46:31 +01:00
parent 67c843b91e
commit cd93d4e38a
2 changed files with 34 additions and 2 deletions

View File

@ -4,17 +4,25 @@ module Language
module Java module Java
def self.system_java_home_cmd(version = nil) def self.system_java_home_cmd(version = nil)
version_flag = " --version #{version}" if version version_flag = " --version #{version}" if version
"/usr/libexec/java_home#{version_flag}" "/usr/libexec/java_home#{version_flag} --failfast 2>/dev/null"
end end
private_class_method :system_java_home_cmd private_class_method :system_java_home_cmd
def self.java_home(version = nil) def self.java_home(version = nil)
f = find_openjdk_formula(version)
return f.opt_libexec/"openjdk.jdk/Contents/Home" if f
cmd = system_java_home_cmd(version) cmd = system_java_home_cmd(version)
Pathname.new Utils.popen_read(cmd).chomp path = Utils.popen_read(cmd).chomp
Pathname.new path if path.present?
end end
# @private # @private
def self.java_home_shell(version = nil) def self.java_home_shell(version = nil)
f = find_openjdk_formula(version)
return (f.opt_libexec/"openjdk.jdk/Contents/Home").to_s if f
"$(#{system_java_home_cmd(version)})" "$(#{system_java_home_cmd(version)})"
end end
end end

View File

@ -2,7 +2,31 @@
module Language module Language
module Java module Java
def self.find_openjdk_formula(version = nil)
can_be_newer = version&.end_with?("+")
version = version.to_i
openjdk = Formula["openjdk"]
[openjdk, *openjdk.versioned_formulae].find do |f|
next false unless f.any_version_installed?
unless version.zero?
major = f.version.to_s[/\d+/].to_i
next false if major < version
next false if major > version && !can_be_newer
end
true
end
rescue FormulaUnavailableError
nil
end
private_class_method :find_openjdk_formula
def self.java_home(version = nil) def self.java_home(version = nil)
f = find_openjdk_formula(version)
return f.opt_libexec if f
req = JavaRequirement.new [*version] req = JavaRequirement.new [*version]
raise UnsatisfiedRequirements, req.message unless req.satisfied? raise UnsatisfiedRequirements, req.message unless req.satisfied?