aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/requirements/java_requirement.rb
diff options
context:
space:
mode:
authorBob W. Hogg2016-12-04 18:43:46 -0800
committerBob W. Hogg2017-02-15 21:35:26 -0800
commit5a214de68d52eef0bbf99f740dc22c721dd02233 (patch)
tree6f52771110b75e6c4dbb1bf61cc65b8bf6dfc032 /Library/Homebrew/requirements/java_requirement.rb
parent5a2a0638028ee49991e404c1bd6397c10659474b (diff)
downloadbrew-5a214de68d52eef0bbf99f740dc22c721dd02233.tar.bz2
java_requirement: port to Linux and refactor
Split the core requirement class into generic, Linux-specific, and macOS-specific parts. Additionally, the Linux version is now able to detect Java versions (the previous Linuxbrew implementation was only able to detect if Java was present at all.)
Diffstat (limited to 'Library/Homebrew/requirements/java_requirement.rb')
-rw-r--r--Library/Homebrew/requirements/java_requirement.rb104
1 files changed, 79 insertions, 25 deletions
diff --git a/Library/Homebrew/requirements/java_requirement.rb b/Library/Homebrew/requirements/java_requirement.rb
index 33fc01229..fa9b6439e 100644
--- a/Library/Homebrew/requirements/java_requirement.rb
+++ b/Library/Homebrew/requirements/java_requirement.rb
@@ -2,28 +2,12 @@ require "language/java"
class JavaRequirement < Requirement
fatal true
- cask "java"
download "http://www.oracle.com/technetwork/java/javase/downloads/index.html"
satisfy build_env: false do
- next false unless File.executable? "/usr/libexec/java_home"
-
- args = %w[--failfast]
- args << "--version" << @version.to_s if @version
- @java_home = Utils.popen_read("/usr/libexec/java_home", *args).chomp
- $?.success?
- end
-
- env do
- java_home = Pathname.new(@java_home)
- ENV["JAVA_HOME"] = java_home
- ENV.prepend_path "PATH", java_home/"bin"
- if (java_home/"include").exist? # Oracle JVM
- ENV.append_to_cflags "-I#{java_home}/include"
- ENV.append_to_cflags "-I#{java_home}/include/darwin"
- else # Apple JVM
- ENV.append_to_cflags "-I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/"
- end
+ setup_java
+ next false unless @java
+ next true
end
def initialize(tags)
@@ -45,16 +29,86 @@ class JavaRequirement < Requirement
def display_s
if @version
- if @version[-1] == "+"
- op = ">="
- version = @version[0, @version.length-1]
- else
+ if exact_version?
op = "="
- version = @version
+ else
+ op = ">="
end
- "#{name} #{op} #{version}"
+ "#{name} #{op} #{version_without_plus}"
else
name
end
end
+
+ private
+
+ def version_without_plus
+ if exact_version?
+ @version
+ else
+ @version[0, @version.length-1]
+ end
+ end
+
+ def exact_version?
+ @version && @version.to_s.chars.last != "+"
+ end
+
+ def setup_java
+ java = preferred_java
+ return unless java
+ @java = java
+ @java_home = java.parent.parent
+ end
+
+ def possible_javas
+ javas = []
+ javas << Pathname.new(ENV["JAVA_HOME"])/"bin/java" if ENV["JAVA_HOME"]
+ jdk = begin
+ Formula["jdk"]
+ rescue FormulaUnavailableError
+ nil
+ end
+ javas << jdk.bin/"java" if jdk && jdk.installed?
+ javas << which("java")
+ javas
+ end
+
+ def preferred_java
+ possible_javas.detect do |java|
+ next false unless java && java.executable?
+ next true unless @version
+ next true if satisfies_version(java)
+ end
+ end
+
+ def env_java_common
+ java_home = Pathname.new(@java_home)
+ ENV["JAVA_HOME"] = java_home
+ ENV.prepend_path "PATH", java_home/"bin"
+ end
+
+ def env_oracle_jdk
+ java_home = Pathname.new(@java_home)
+ ENV.append_to_cflags "-I#{java_home}/include"
+ ENV.append_to_cflags "-I#{java_home}/include/#{oracle_java_os}"
+ end
+
+ def oracle_java_os
+ nil
+ end
+
+ def satisfies_version(java)
+ java_version_s = Utils.popen_read("#{java} -version 2>&1")[/1.\d/]
+ return false unless java_version_s
+ java_version = Version.create(java_version_s)
+ needed_version = Version.create(version_without_plus)
+ if exact_version?
+ java_version == needed_version
+ else
+ java_version >= needed_version
+ end
+ end
end
+
+require "extend/os/requirements/java_requirement"