2020-11-19 07:46:52 +01:00
|
|
|
# typed: true
|
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
|
|
|
|
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
|
|
|
|
2023-03-10 23:46:07 +00: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
|