| 
									
										
										
										
											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:26:29 +02:00
										 |  |  | # Settings for the build environment. | 
					
						
							| 
									
										
										
										
											2012-09-14 07:54:14 -07:00
										 |  |  | class BuildEnvironment | 
					
						
							| 
									
										
										
										
											2020-11-19 07:46:52 +01:00
										 |  |  |   sig { params(settings: Symbol).void } | 
					
						
							| 
									
										
										
										
											2012-12-23 19:43:10 -06:00
										 |  |  |   def initialize(*settings) | 
					
						
							| 
									
										
										
										
											2020-11-19 07:46:52 +01:00
										 |  |  |     @settings = Set.new(settings) | 
					
						
							| 
									
										
										
										
											2012-09-14 07:54:14 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-19 07:46:52 +01:00
										 |  |  |   sig { params(args: T::Enumerable[Symbol]).returns(T.self_type) } | 
					
						
							| 
									
										
										
										
											2014-07-07 09:15:56 -05:00
										 |  |  |   def merge(*args) | 
					
						
							|  |  |  |     @settings.merge(*args) | 
					
						
							| 
									
										
										
										
											2014-07-07 20:03:15 -05:00
										 |  |  |     self | 
					
						
							| 
									
										
										
										
											2014-07-07 09:15:56 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-11 00:06:09 +00:00
										 |  |  |   sig { params(option: Symbol).returns(T.self_type) } | 
					
						
							|  |  |  |   def <<(option) | 
					
						
							|  |  |  |     @settings << option | 
					
						
							| 
									
										
										
										
											2012-12-23 19:43:10 -06:00
										 |  |  |     self | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-19 07:46:52 +01:00
										 |  |  |   sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2012-09-14 07:54:14 -07:00
										 |  |  |   def std? | 
					
						
							|  |  |  |     @settings.include? :std | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-14 02:26:29 +02:00
										 |  |  |   # DSL for specifying build environment settings. | 
					
						
							| 
									
										
										
										
											2017-05-09 23:00:51 +02:00
										 |  |  |   module DSL | 
					
						
							| 
									
										
										
										
											2022-08-24 23:53:35 +01:00
										 |  |  |     # Initialise @env for each class which may use this DSL (e.g. each formula subclass). | 
					
						
							| 
									
										
										
										
											2024-04-30 11:10:23 +02:00
										 |  |  |     # `env` may never be called and it needs to be initialised before the class is frozen. | 
					
						
							| 
									
										
										
										
											2022-08-24 23:53:35 +01:00
										 |  |  |     def inherited(child) | 
					
						
							|  |  |  |       super | 
					
						
							|  |  |  |       child.instance_eval do | 
					
						
							|  |  |  |         @env = BuildEnvironment.new | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-19 07:46:52 +01:00
										 |  |  |     sig { params(settings: Symbol).returns(BuildEnvironment) } | 
					
						
							| 
									
										
										
										
											2017-05-09 23:00:51 +02:00
										 |  |  |     def env(*settings) | 
					
						
							|  |  |  |       @env.merge(settings) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-01-19 20:45:57 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-11-13 16:43:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-14 02:26:29 +02:00
										 |  |  |   KEYS = %w[
 | 
					
						
							|  |  |  |     CC CXX LD OBJC OBJCXX | 
					
						
							|  |  |  |     HOMEBREW_CC HOMEBREW_CXX | 
					
						
							|  |  |  |     CFLAGS CXXFLAGS CPPFLAGS LDFLAGS SDKROOT MAKEFLAGS | 
					
						
							|  |  |  |     CMAKE_PREFIX_PATH CMAKE_INCLUDE_PATH CMAKE_LIBRARY_PATH CMAKE_FRAMEWORK_PATH | 
					
						
							|  |  |  |     MACOSX_DEPLOYMENT_TARGET PKG_CONFIG_PATH PKG_CONFIG_LIBDIR | 
					
						
							|  |  |  |     HOMEBREW_DEBUG HOMEBREW_MAKE_JOBS HOMEBREW_VERBOSE | 
					
						
							| 
									
										
										
										
											2025-01-13 19:35:31 +00:00
										 |  |  |     all_proxy ftp_proxy http_proxy https_proxy no_proxy | 
					
						
							| 
									
										
										
										
											2020-08-14 02:26:29 +02:00
										 |  |  |     HOMEBREW_SVN HOMEBREW_GIT | 
					
						
							|  |  |  |     HOMEBREW_SDKROOT | 
					
						
							|  |  |  |     MAKE GIT CPP | 
					
						
							|  |  |  |     ACLOCAL_PATH PATH CPATH | 
					
						
							|  |  |  |     LD_LIBRARY_PATH LD_RUN_PATH LD_PRELOAD LIBRARY_PATH | 
					
						
							|  |  |  |   ].freeze | 
					
						
							|  |  |  |   private_constant :KEYS | 
					
						
							| 
									
										
										
										
											2016-09-26 01:44:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-11 09:35:02 +02:00
										 |  |  |   sig { params(env: T::Hash[String, T.nilable(T.any(String, Pathname))]).returns(T::Array[String]) } | 
					
						
							| 
									
										
										
										
											2020-08-14 02:26:29 +02:00
										 |  |  |   def self.keys(env) | 
					
						
							|  |  |  |     KEYS & env.keys | 
					
						
							| 
									
										
										
										
											2015-11-13 16:43:43 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-10 23:46:07 +00:00
										 |  |  |   sig { params(env: T::Hash[String, T.nilable(T.any(String, Pathname))], out: IO).void } | 
					
						
							|  |  |  |   def self.dump(env, out = $stdout) | 
					
						
							| 
									
										
										
										
											2020-08-14 02:26:29 +02:00
										 |  |  |     keys = self.keys(env) | 
					
						
							| 
									
										
										
										
											2015-11-13 16:43:43 +01:00
										 |  |  |     keys -= %w[CC CXX OBJC OBJCXX] if env["CC"] == env["HOMEBREW_CC"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     keys.each do |key| | 
					
						
							| 
									
										
										
										
											2020-11-19 07:46:52 +01:00
										 |  |  |       value = env.fetch(key) | 
					
						
							| 
									
										
										
										
											2022-08-11 09:35:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-04 10:05:50 -07:00
										 |  |  |       string = "#{key}: #{value}" | 
					
						
							| 
									
										
										
										
											2015-11-13 16:43:43 +01:00
										 |  |  |       case key | 
					
						
							|  |  |  |       when "CC", "CXX", "LD" | 
					
						
							| 
									
										
										
										
											2023-03-10 23:46:07 +00:00
										 |  |  |         string << " => #{Pathname.new(value).realpath}" if value.present? && File.symlink?(value) | 
					
						
							| 
									
										
										
										
											2015-11-13 16:43:43 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2023-03-10 23:46:07 +00:00
										 |  |  |       string.freeze | 
					
						
							|  |  |  |       out.puts string | 
					
						
							| 
									
										
										
										
											2015-11-13 16:43:43 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |