| 
									
										
										
										
											2024-08-12 10:30:59 +01:00
										 |  |  | # typed: true # rubocop:todo Sorbet/StrictSigil | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-14 02:55:39 +02:00
										 |  |  | # Options for a formula build. | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  | class BuildOptions | 
					
						
							| 
									
										
										
										
											2014-07-31 19:37:39 -05:00
										 |  |  |   def initialize(args, options) | 
					
						
							| 
									
										
										
										
											2014-08-13 11:09:57 -05:00
										 |  |  |     @args = args | 
					
						
							| 
									
										
										
										
											2014-07-31 19:37:39 -05:00
										 |  |  |     @options = options | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # True if a {Formula} is being built with a specific option. | 
					
						
							|  |  |  |   # | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # ### Examples | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # ```ruby | 
					
						
							|  |  |  |   # args << "--i-want-spam" if build.with? "spam" | 
					
						
							|  |  |  |   # ``` | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # ```ruby | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # args << "--qt-gui" if build.with? "qt" # "--with-qt" ==> build.with? "qt" | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # ``` | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # If a formula presents a user with a choice, but the choice must be fulfilled: | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # ```ruby | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # if build.with? "example2" | 
					
						
							|  |  |  |   #   args << "--with-example2" | 
					
						
							|  |  |  |   # else | 
					
						
							|  |  |  |   #   args << "--with-example1" | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # end | 
					
						
							|  |  |  |   # ``` | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def with?(val) | 
					
						
							| 
									
										
										
										
											2015-12-14 19:47:19 +00:00
										 |  |  |     option_names = val.respond_to?(:option_names) ? val.option_names : [val] | 
					
						
							| 
									
										
										
										
											2013-12-09 14:36:10 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-14 19:47:19 +00:00
										 |  |  |     option_names.any? do |name| | 
					
						
							|  |  |  |       if option_defined? "with-#{name}" | 
					
						
							| 
									
										
										
										
											2020-12-18 14:17:23 +00:00
										 |  |  |         include? "with-#{name}" | 
					
						
							| 
									
										
										
										
											2015-12-14 19:47:19 +00:00
										 |  |  |       elsif option_defined? "without-#{name}" | 
					
						
							| 
									
										
										
										
											2023-03-01 09:13:42 -08:00
										 |  |  |         !include? "without-#{name}" | 
					
						
							| 
									
										
										
										
											2015-12-14 19:47:19 +00:00
										 |  |  |       else | 
					
						
							|  |  |  |         false | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:26 -06:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # True if a {Formula} is being built without a specific option. | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # | 
					
						
							|  |  |  |   # ### Example | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # ```ruby | 
					
						
							|  |  |  |   # args << "--no-spam-plz" if build.without? "spam" | 
					
						
							|  |  |  |   # ``` | 
					
						
							| 
									
										
										
										
											2015-12-14 19:47:19 +00:00
										 |  |  |   def without?(val) | 
					
						
							|  |  |  |     !with?(val) | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:26 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # True if a {Formula} is being built as a bottle (i.e. binary package). | 
					
						
							| 
									
										
										
										
											2013-10-08 10:12:44 +01:00
										 |  |  |   def bottle? | 
					
						
							| 
									
										
										
										
											2020-12-18 14:17:23 +00:00
										 |  |  |     include? "build-bottle" | 
					
						
							| 
									
										
										
										
											2013-10-08 10:12:44 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # True if a {Formula} is being built with {Formula.head} instead of {Formula.stable}. | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # | 
					
						
							|  |  |  |   # ### Examples | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # ```ruby | 
					
						
							|  |  |  |   # args << "--some-new-stuff" if build.head? | 
					
						
							|  |  |  |   # ``` | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # If there are multiple conditional arguments use a block instead of lines. | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # ```ruby | 
					
						
							| 
									
										
										
										
											2020-11-03 16:36:48 -05:00
										 |  |  |   # if build.head? | 
					
						
							|  |  |  |   #   args << "--i-want-pizza" | 
					
						
							|  |  |  |   #   args << "--and-a-cold-beer" if build.with? "cold-beer" | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # end | 
					
						
							|  |  |  |   # ``` | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def head? | 
					
						
							| 
									
										
										
										
											2020-12-18 14:17:23 +00:00
										 |  |  |     include? "HEAD" | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-03 10:34:22 +01:00
										 |  |  |   # True if a {Formula} is being built with {Formula.stable} instead of {Formula.head}. | 
					
						
							|  |  |  |   # This is the default. | 
					
						
							| 
									
										
										
										
											2024-04-26 20:55:51 +02:00
										 |  |  |   # | 
					
						
							|  |  |  |   # ### Example | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # ```ruby | 
					
						
							|  |  |  |   # args << "--some-beta" if build.head? | 
					
						
							|  |  |  |   # ``` | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def stable? | 
					
						
							| 
									
										
										
										
											2020-09-03 10:34:22 +01:00
										 |  |  |     !head? | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-01 14:01:34 +01:00
										 |  |  |   # True if the build has any arguments or options specified. | 
					
						
							|  |  |  |   def any_args_or_options? | 
					
						
							|  |  |  |     !@args.empty? || !@options.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def used_options | 
					
						
							| 
									
										
										
										
											2014-08-13 11:09:57 -05:00
										 |  |  |     @options & @args | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def unused_options | 
					
						
							| 
									
										
										
										
											2014-08-13 11:09:57 -05:00
										 |  |  |     @options - @args | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-07-31 19:37:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-18 14:17:23 +00:00
										 |  |  |   def include?(name) | 
					
						
							| 
									
										
										
										
											2020-09-03 10:34:22 +01:00
										 |  |  |     @args.include?("--#{name}") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def option_defined?(name) | 
					
						
							| 
									
										
										
										
											2014-07-31 19:37:39 -05:00
										 |  |  |     @options.include? name | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  | end |