From bbb269674270b145614780dbaa2258f6c770ff65 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Wed, 10 Jun 2020 16:10:33 +0100 Subject: [PATCH 1/2] 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? From 07547e8cae3d28fc7eefbf5ec9d2865a6daff3fd Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Wed, 10 Jun 2020 16:11:04 +0100 Subject: [PATCH 2/2] extend/pathname: use Java.overridable_java_home_env in write_jar_script --- Library/Homebrew/compat/language/java.rb | 3 ++- Library/Homebrew/extend/os/mac/language/java.rb | 2 +- Library/Homebrew/extend/pathname.rb | 8 ++------ Library/Homebrew/language/java.rb | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/compat/language/java.rb b/Library/Homebrew/compat/language/java.rb index 3ad89ebc74..2bcf485e2f 100644 --- a/Library/Homebrew/compat/language/java.rb +++ b/Library/Homebrew/compat/language/java.rb @@ -5,7 +5,8 @@ module Language class << self module Compat def java_home_cmd(version = nil) - odeprecated "Language::Java::java_home_cmd", "Language::Java::java_home" + odeprecated "Language::Java.java_home_cmd", + "Language::Java.java_home or Language::Java.overridable_java_home_env" # macOS provides /usr/libexec/java_home, but Linux does not. return system_java_home_cmd(version) if OS.mac? diff --git a/Library/Homebrew/extend/os/mac/language/java.rb b/Library/Homebrew/extend/os/mac/language/java.rb index 4661652c0b..a92b386ece 100644 --- a/Library/Homebrew/extend/os/mac/language/java.rb +++ b/Library/Homebrew/extend/os/mac/language/java.rb @@ -18,12 +18,12 @@ module Language 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 + private_class_method :java_home_shell end end diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index e0c331f4dd..c5b9760659 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -370,12 +370,8 @@ class Pathname # Writes an exec script that invokes a Java jar def write_jar_script(target_jar, script_name, java_opts = "", java_version: nil) - mkpath - java_home = ("JAVA_HOME=\"#{Language::Java.java_home_shell(java_version)}\" " if java_version) - join(script_name).write <<~SH - #!/bin/bash - #{java_home}exec java #{java_opts} -jar #{target_jar} "$@" - SH + (self/script_name).write_env_script "java #{java_opts} -jar #{target_jar}", + Language::Java.overridable_java_home_env(java_version) end def install_metafiles(from = Pathname.pwd) diff --git a/Library/Homebrew/language/java.rb b/Library/Homebrew/language/java.rb index 610c73a5b5..77bddccf5f 100644 --- a/Library/Homebrew/language/java.rb +++ b/Library/Homebrew/language/java.rb @@ -33,10 +33,10 @@ module Language req.java_home end - # @private def self.java_home_shell(version = nil) java_home(version).to_s end + private_class_method :java_home_shell def self.java_home_env(version = nil) { JAVA_HOME: java_home_shell(version) }