Merge pull request #1632 from rwhogg/make-java-req-portable
java_requirement: port to Linux and refactor
This commit is contained in:
commit
fe4b2e97a1
@ -0,0 +1,16 @@
|
||||
require "language/java"
|
||||
|
||||
class JavaRequirement < Requirement
|
||||
default_formula "jdk"
|
||||
|
||||
env do
|
||||
env_java_common
|
||||
env_oracle_jdk
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def oracle_java_os
|
||||
:linux
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,35 @@
|
||||
class JavaRequirement
|
||||
cask "java"
|
||||
|
||||
env do
|
||||
env_java_common
|
||||
env_oracle_jdk || env_apple
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def possible_javas
|
||||
javas = []
|
||||
javas << Pathname.new(ENV["JAVA_HOME"])/"bin/java" if ENV["JAVA_HOME"]
|
||||
javas << java_home_cmd
|
||||
javas << which("java")
|
||||
javas
|
||||
end
|
||||
|
||||
def java_home_cmd
|
||||
return nil 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
|
||||
return nil unless $?.success?
|
||||
Pathname.new(java_home)/"bin/java"
|
||||
end
|
||||
|
||||
def env_apple
|
||||
ENV.append_to_cflags "-I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/"
|
||||
end
|
||||
|
||||
def oracle_java_os
|
||||
:darwin
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,7 @@
|
||||
require "requirements/java_requirement"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/requirements/java_requirement"
|
||||
elsif OS.linux?
|
||||
require "extend/os/linux/requirements/java_requirement"
|
||||
end
|
||||
@ -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,90 @@ 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
|
||||
return unless @java_home
|
||||
java_home = Pathname.new(@java_home)
|
||||
ENV["JAVA_HOME"] = java_home
|
||||
ENV.prepend_path "PATH", java_home/"bin"
|
||||
end
|
||||
|
||||
def env_oracle_jdk
|
||||
return unless @java_home
|
||||
java_home = Pathname.new(@java_home)
|
||||
return unless (java_home/"include").exist?
|
||||
ENV.append_to_cflags "-I#{java_home}/include"
|
||||
ENV.append_to_cflags "-I#{java_home}/include/#{oracle_java_os}"
|
||||
true
|
||||
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"
|
||||
|
||||
50
Library/Homebrew/test/java_requirement_test.rb
Normal file
50
Library/Homebrew/test/java_requirement_test.rb
Normal file
@ -0,0 +1,50 @@
|
||||
require "testing_env"
|
||||
require "requirements/java_requirement"
|
||||
|
||||
class JavaRequirementTests < Homebrew::TestCase
|
||||
def setup
|
||||
super
|
||||
ENV["JAVA_HOME"] = nil
|
||||
end
|
||||
|
||||
def test_message
|
||||
a = JavaRequirement.new([])
|
||||
assert_match(/Java is required to install this formula./, a.message)
|
||||
end
|
||||
|
||||
def test_inspect
|
||||
a = JavaRequirement.new(%w[1.7+])
|
||||
assert_equal a.inspect, '#<JavaRequirement: "java" [] version="1.7+">'
|
||||
end
|
||||
|
||||
def test_display_s
|
||||
x = JavaRequirement.new([])
|
||||
assert_equal x.display_s, "java"
|
||||
y = JavaRequirement.new(%w[1.8])
|
||||
assert_equal y.display_s, "java = 1.8"
|
||||
z = JavaRequirement.new(%w[1.8+])
|
||||
assert_equal z.display_s, "java >= 1.8"
|
||||
end
|
||||
|
||||
def test_satisfied?
|
||||
a = JavaRequirement.new(%w[1.8])
|
||||
File.stubs(:executable?).returns(false)
|
||||
refute_predicate a, :satisfied?
|
||||
|
||||
b = JavaRequirement.new([])
|
||||
b.stubs(:preferred_java).returns(Pathname.new("/usr/bin/java"))
|
||||
assert_predicate b, :satisfied?
|
||||
|
||||
c = JavaRequirement.new(%w[1.7+])
|
||||
c.stubs(:possible_javas).returns([Pathname.new("/usr/bin/java")])
|
||||
Utils.stubs(:popen_read).returns('java version "1.6.0_5"')
|
||||
refute_predicate c, :satisfied?
|
||||
Utils.stubs(:popen_read).returns('java version "1.8.0_5"')
|
||||
assert_predicate c, :satisfied?
|
||||
|
||||
d = JavaRequirement.new(%w[1.7])
|
||||
d.stubs(:possible_javas).returns([Pathname.new("/usr/bin/java")])
|
||||
Utils.stubs(:popen_read).returns('java version "1.8.0_5"')
|
||||
refute_predicate d, :satisfied?
|
||||
end
|
||||
end
|
||||
31
Library/Homebrew/test/os/mac/java_requirement_test.rb
Normal file
31
Library/Homebrew/test/os/mac/java_requirement_test.rb
Normal file
@ -0,0 +1,31 @@
|
||||
require "testing_env"
|
||||
require "requirements/java_requirement"
|
||||
require "fileutils"
|
||||
|
||||
class OSMacJavaRequirementTests < Homebrew::TestCase
|
||||
def setup
|
||||
super
|
||||
@java_req = JavaRequirement.new(%w[1.8])
|
||||
@tmp_java_home = mktmpdir
|
||||
@tmp_pathname = Pathname.new(@tmp_java_home)
|
||||
FileUtils.mkdir @tmp_pathname/"bin"
|
||||
FileUtils.touch @tmp_pathname/"bin/java"
|
||||
@java_req.stubs(:preferred_java).returns(@tmp_pathname/"bin/java")
|
||||
@java_req.satisfied?
|
||||
end
|
||||
|
||||
def test_java_env_apple
|
||||
ENV.expects(:prepend_path)
|
||||
ENV.expects(:append_to_cflags)
|
||||
@java_req.modify_build_environment
|
||||
assert_equal ENV["JAVA_HOME"], @tmp_java_home
|
||||
end
|
||||
|
||||
def test_java_env_oracle
|
||||
FileUtils.mkdir @tmp_pathname/"include"
|
||||
ENV.expects(:prepend_path)
|
||||
ENV.expects(:append_to_cflags).twice
|
||||
@java_req.modify_build_environment
|
||||
assert_equal ENV["JAVA_HOME"], @tmp_java_home
|
||||
end
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user