aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/requirements/java_requirement.rb
diff options
context:
space:
mode:
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"