From cd93d4e38a4a850680cde1edef63448633a9f1dd Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Fri, 19 Jun 2020 11:46:31 +0100 Subject: [PATCH] language/java: add support for OpenJDK formula --- .../Homebrew/extend/os/mac/language/java.rb | 12 ++++++++-- Library/Homebrew/language/java.rb | 24 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/extend/os/mac/language/java.rb b/Library/Homebrew/extend/os/mac/language/java.rb index b552027a9a..4661652c0b 100644 --- a/Library/Homebrew/extend/os/mac/language/java.rb +++ b/Library/Homebrew/extend/os/mac/language/java.rb @@ -4,17 +4,25 @@ module Language module Java def self.system_java_home_cmd(version = nil) version_flag = " --version #{version}" if version - "/usr/libexec/java_home#{version_flag}" + "/usr/libexec/java_home#{version_flag} --failfast 2>/dev/null" end private_class_method :system_java_home_cmd 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) - Pathname.new Utils.popen_read(cmd).chomp + path = Utils.popen_read(cmd).chomp + + Pathname.new path if path.present? end # @private 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)})" end end diff --git a/Library/Homebrew/language/java.rb b/Library/Homebrew/language/java.rb index 612ab32c8d..610c73a5b5 100644 --- a/Library/Homebrew/language/java.rb +++ b/Library/Homebrew/language/java.rb @@ -2,7 +2,31 @@ module Language 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) + f = find_openjdk_formula(version) + return f.opt_libexec if f + req = JavaRequirement.new [*version] raise UnsatisfiedRequirements, req.message unless req.satisfied?