| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  | class BuildOptions | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |   # (which isn't named `with-*` or `without-*`). | 
					
						
							|  |  |  |   # @deprecated | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def include?(name) | 
					
						
							| 
									
										
										
										
											2014-08-11 17:48:30 -05:00
										 |  |  |     @args.include?("--#{name}") | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							|  |  |  |   # <pre>args << "--i-want-spam" if build.with? "spam" | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # args << "--qt-gui" if build.with? "qt" # "--with-qt" ==> build.with? "qt" | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # # If a formula presents a user with a choice, but the choice must be fulfilled: | 
					
						
							|  |  |  |   # if build.with? "example2" | 
					
						
							|  |  |  |   #   args << "--with-example2" | 
					
						
							|  |  |  |   # else | 
					
						
							|  |  |  |   #   args << "--with-example1" | 
					
						
							|  |  |  |   # end</pre> | 
					
						
							| 
									
										
										
										
											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}" | 
					
						
							|  |  |  |         include? "with-#{name}" | 
					
						
							|  |  |  |       elsif option_defined? "without-#{name}" | 
					
						
							|  |  |  |         !include? "without-#{name}" | 
					
						
							|  |  |  |       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. | 
					
						
							| 
									
										
										
										
											2016-09-01 16:39:05 +01:00
										 |  |  |   # <pre>args << "--no-spam-plz" if build.without? "spam"</pre> | 
					
						
							| 
									
										
										
										
											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? | 
					
						
							| 
									
										
										
										
											2014-07-31 16:32:04 -05: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}. | 
					
						
							|  |  |  |   # <pre>args << "--some-new-stuff" if build.head?</pre> | 
					
						
							|  |  |  |   # <pre># If there are multiple conditional arguments use a block instead of lines. | 
					
						
							|  |  |  |   #  if build.head? | 
					
						
							|  |  |  |   #    args << "--i-want-pizza" | 
					
						
							|  |  |  |   #    args << "--and-a-cold-beer" if build.with? "cold-beer" | 
					
						
							|  |  |  |   #  end</pre> | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def head? | 
					
						
							| 
									
										
										
										
											2014-07-31 16:32:04 -05:00
										 |  |  |     include? "HEAD" | 
					
						
							| 
									
										
										
										
											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 {Formula.devel} instead of {Formula.stable}. | 
					
						
							|  |  |  |   # <pre>args << "--some-beta" if build.devel?</pre> | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def devel? | 
					
						
							| 
									
										
										
										
											2014-07-31 16:32:04 -05:00
										 |  |  |     include? "devel" | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-02 16:15:09 +01:00
										 |  |  |   # True if a {Formula} is being built with {Formula.stable} instead of {Formula.devel} | 
					
						
							|  |  |  |   # or {Formula.head}. This is the default. | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # <pre>args << "--some-beta" if build.devel?</pre> | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def stable? | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     !(head? || devel?) | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # True if a {Formula} is being built universally. | 
					
						
							|  |  |  |   # e.g. on newer Intel Macs this means a combined x86_64/x86 binary/library. | 
					
						
							|  |  |  |   # <pre>args << "--universal-binary" if build.universal?</pre> | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def universal? | 
					
						
							| 
									
										
										
										
											2014-08-16 01:33:41 -05:00
										 |  |  |     include?("universal") && option_defined?("universal") | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # True if a {Formula} is being built in C++11 mode. | 
					
						
							| 
									
										
										
										
											2013-10-07 00:40:32 -07:00
										 |  |  |   def cxx11? | 
					
						
							| 
									
										
										
										
											2014-07-31 19:37:39 -05:00
										 |  |  |     include?("c++11") && option_defined?("c++11") | 
					
						
							| 
									
										
										
										
											2013-10-07 00:40:32 -07: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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 |