brew/Library/Homebrew/extend/os/mac/requirements/java_requirement.rb

55 lines
1.5 KiB
Ruby
Raw Normal View History

class JavaRequirement < Requirement
env do
env_java_common
2017-02-15 21:47:08 -08:00
env_oracle_jdk || env_apple
end
# A strict Java 8 requirement (1.8) should prompt the user to install
2018-03-07 08:20:24 +10:00
# the legacy java8 cask because versions newer than Java 8 are not
# completely backwards compatible, and contain breaking changes such as
# strong encapsulation of JDK-internal APIs and a modified version scheme
2018-03-07 19:55:23 +10:00
# (*.0 not 1.*).
def cask
if @version.nil? || @version.to_s.end_with?("+") ||
@version.to_f >= JAVA_CASK_MAP.keys.max.to_f
JAVA_CASK_MAP.fetch(JAVA_CASK_MAP.keys.max)
else
JAVA_CASK_MAP.fetch("1.8")
end
end
private
JAVA_CASK_MAP = {
"1.8" => "caskroom/versions/java8",
2018-03-07 08:20:24 +10:00
"10.0" => "java",
}.freeze
def possible_javas
javas = []
javas << Pathname.new(ENV["JAVA_HOME"])/"bin/java" if ENV["JAVA_HOME"]
javas << java_home_cmd
which_java = which("java")
# /usr/bin/java is a stub on macOS
javas << which_java if which_java.to_s != "/usr/bin/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 $CHILD_STATUS.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