| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-20 05:50:33 +02:00
										 |  |  | require "delegate" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-21 18:36:00 +01:00
										 |  |  | require "requirements/macos_requirement" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | module Cask | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |   class DSL | 
					
						
							| 
									
										
										
										
											2020-08-24 23:09:43 +02:00
										 |  |  |     # Class corresponding to the `depends_on` stanza. | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # @api private | 
					
						
							| 
									
										
										
										
											2020-09-20 05:50:33 +02:00
										 |  |  |     class DependsOn < SimpleDelegator | 
					
						
							| 
									
										
										
										
											2019-04-19 21:46:20 +09:00
										 |  |  |       VALID_KEYS = Set.new([ | 
					
						
							| 
									
										
										
										
											2021-02-11 13:24:19 +00:00
										 |  |  |         :formula, | 
					
						
							|  |  |  |         :cask, | 
					
						
							|  |  |  |         :macos, | 
					
						
							|  |  |  |         :arch, | 
					
						
							|  |  |  |         :x11, | 
					
						
							|  |  |  |         :java, | 
					
						
							|  |  |  |       ]).freeze | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       VALID_ARCHES = { | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |         intel:  { type: :intel, bits: 64 }, | 
					
						
							| 
									
										
										
										
											2016-10-14 20:33:16 +02:00
										 |  |  |         # specific | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |         x86_64: { type: :intel, bits: 64 }, | 
					
						
							| 
									
										
										
										
											2020-11-06 15:29:15 +01:00
										 |  |  |         arm64:  { type: :arm, bits: 64 }, | 
					
						
							| 
									
										
										
										
											2016-10-14 20:33:16 +02:00
										 |  |  |       }.freeze | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-15 14:19:45 +00:00
										 |  |  |       attr_reader :arch, :cask, :formula, :java, :macos, :x11 | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def initialize | 
					
						
							| 
									
										
										
										
											2017-11-06 21:13:39 +01:00
										 |  |  |         super({}) | 
					
						
							| 
									
										
										
										
											2017-06-28 17:53:59 +02:00
										 |  |  |         @cask ||= [] | 
					
						
							|  |  |  |         @formula ||= [] | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-06 21:13:39 +01:00
										 |  |  |       def load(**pairs) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         pairs.each do |key, value| | 
					
						
							|  |  |  |           raise "invalid depends_on key: '#{key.inspect}'" unless VALID_KEYS.include?(key) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-06 21:13:39 +01:00
										 |  |  |           self[key] = send(:"#{key}=", *value) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def formula=(*args) | 
					
						
							|  |  |  |         @formula.concat(args) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def cask=(*args) | 
					
						
							|  |  |  |         @cask.concat(args) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def macos=(*args) | 
					
						
							| 
									
										
										
										
											2021-01-26 15:21:24 -05:00
										 |  |  |         raise "Only a single 'depends_on macos' is allowed." if defined?(@macos) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-15 10:14:10 +02:00
										 |  |  |         begin | 
					
						
							|  |  |  |           @macos = if args.count > 1
 | 
					
						
							|  |  |  |             MacOSRequirement.new([args], comparator: "==") | 
					
						
							|  |  |  |           elsif MacOS::Version::SYMBOLS.key?(args.first) | 
					
						
							|  |  |  |             MacOSRequirement.new([args.first], comparator: "==") | 
					
						
							|  |  |  |           elsif /^\s*(?<comparator><|>|[=<>]=)\s*:(?<version>\S+)\s*$/ =~ args.first | 
					
						
							|  |  |  |             MacOSRequirement.new([version.to_sym], comparator: comparator) | 
					
						
							|  |  |  |           elsif /^\s*(?<comparator><|>|[=<>]=)\s*(?<version>\S+)\s*$/ =~ args.first | 
					
						
							|  |  |  |             MacOSRequirement.new([version], comparator: comparator) | 
					
						
							| 
									
										
										
										
											2020-11-13 10:57:20 -05:00
										 |  |  |           else # rubocop:disable Lint/DuplicateBranch | 
					
						
							| 
									
										
										
										
											2019-08-15 10:14:10 +02:00
										 |  |  |             MacOSRequirement.new([args.first], comparator: "==") | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2020-10-05 14:46:43 +02:00
										 |  |  |         rescue MacOSVersionError => e | 
					
						
							|  |  |  |           raise "invalid 'depends_on macos' value: #{e}" | 
					
						
							| 
									
										
										
										
											2016-10-14 20:11:33 +02:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def arch=(*args) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         @arch ||= [] | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |         arches = args.map do |elt| | 
					
						
							| 
									
										
										
										
											2016-12-29 18:56:19 +00:00
										 |  |  |           elt.to_s.downcase.sub(/^:/, "").tr("-", "_").to_sym | 
					
						
							| 
									
										
										
										
											2016-10-23 14:44:14 +02:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         invalid_arches = arches - VALID_ARCHES.keys | 
					
						
							|  |  |  |         raise "invalid 'depends_on arch' values: #{invalid_arches.inspect}" unless invalid_arches.empty? | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         @arch.concat(arches.map { |arch| VALID_ARCHES[arch] }) | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-15 14:19:45 +00:00
										 |  |  |       def java=(arg) | 
					
						
							| 
									
										
										
										
											2021-01-25 09:18:10 +00:00
										 |  |  |         odisabled "depends_on :java", "depends_on a specific Java formula" | 
					
						
							| 
									
										
										
										
											2020-12-15 14:19:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         @java = arg | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def x11=(arg) | 
					
						
							|  |  |  |         raise "invalid 'depends_on x11' value: #{arg.inspect}" unless [true, false].include?(arg) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-25 09:18:10 +00:00
										 |  |  |         odisabled "depends_on :x11", "depends_on specific X11 formula(e)" | 
					
						
							| 
									
										
										
										
											2020-12-15 14:19:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         @x11 = arg | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |