| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-26 22:36:04 +08:00
										 |  |  | module Language | 
					
						
							|  |  |  |   module Java | 
					
						
							| 
									
										
										
										
											2020-06-19 11:46:31 +01:00
										 |  |  |     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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-27 11:52:30 -08:00
										 |  |  |     def self.java_home(version = nil) | 
					
						
							| 
									
										
										
										
											2020-06-19 11:46:31 +01:00
										 |  |  |       f = find_openjdk_formula(version) | 
					
						
							|  |  |  |       return f.opt_libexec if f | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-27 11:52:30 -08:00
										 |  |  |       req = JavaRequirement.new [*version] | 
					
						
							|  |  |  |       raise UnsatisfiedRequirements, req.message unless req.satisfied? | 
					
						
							| 
									
										
										
										
											2019-02-19 13:12:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-27 11:52:30 -08:00
										 |  |  |       req.java_home | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def self.java_home_shell(version = nil) | 
					
						
							|  |  |  |       java_home(version).to_s | 
					
						
							| 
									
										
										
										
											2015-03-12 23:35:24 +08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-06-19 11:55:05 +01:00
										 |  |  |     private_class_method :java_home_shell | 
					
						
							| 
									
										
										
										
											2015-03-12 23:35:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     def self.java_home_env(version = nil) | 
					
						
							| 
									
										
										
										
											2018-11-27 11:52:30 -08:00
										 |  |  |       { JAVA_HOME: java_home_shell(version) } | 
					
						
							| 
									
										
										
										
											2015-03-12 23:35:24 +08:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     def self.overridable_java_home_env(version = nil) | 
					
						
							| 
									
										
										
										
											2018-11-27 11:52:30 -08:00
										 |  |  |       { JAVA_HOME: "${JAVA_HOME:-#{java_home_shell(version)}}" } | 
					
						
							| 
									
										
										
										
											2015-02-26 22:36:04 +08:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2018-11-27 11:52:30 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | require "extend/os/language/java" |