diff --git a/Library/Homebrew/build_environment.rb b/Library/Homebrew/build_environment.rb index 6b4e7f0529..4f80b74adb 100644 --- a/Library/Homebrew/build_environment.rb +++ b/Library/Homebrew/build_environment.rb @@ -1,34 +1,44 @@ -# typed: false +# typed: true # frozen_string_literal: true # Settings for the build environment. # # @api private class BuildEnvironment + extend T::Sig + + sig { params(settings: Symbol).void } def initialize(*settings) - @settings = Set.new(*settings) + @settings = Set.new(settings) end + sig { params(args: T::Enumerable[Symbol]).returns(T.self_type) } def merge(*args) @settings.merge(*args) self end + sig { params(o: Symbol).returns(T.self_type) } def <<(o) @settings << o self end + sig { returns(T::Boolean) } def std? @settings.include? :std end + sig { returns(T::Boolean) } def userpaths? @settings.include? :userpaths end # DSL for specifying build environment settings. module DSL + extend T::Sig + + sig { params(settings: Symbol).returns(BuildEnvironment) } def env(*settings) @env ||= BuildEnvironment.new @env.merge(settings) @@ -50,16 +60,18 @@ class BuildEnvironment ].freeze private_constant :KEYS + sig { params(env: T.untyped).returns(T::Array[String]) } def self.keys(env) KEYS & env.keys end + sig { params(env: T.untyped, f: IO).void } def self.dump(env, f = $stdout) keys = self.keys(env) keys -= %w[CC CXX OBJC OBJCXX] if env["CC"] == env["HOMEBREW_CC"] keys.each do |key| - value = env[key] + value = env.fetch(key) s = +"#{key}: #{value}" case key when "CC", "CXX", "LD" diff --git a/Library/Homebrew/cmd/--env.rb b/Library/Homebrew/cmd/--env.rb index b4448f573e..a7eec71143 100644 --- a/Library/Homebrew/cmd/--env.rb +++ b/Library/Homebrew/cmd/--env.rb @@ -47,11 +47,10 @@ module Homebrew Utils::Shell.from_path(args.shell) end - env_keys = BuildEnvironment.keys(ENV) if shell.nil? BuildEnvironment.dump ENV else - env_keys.each do |key| + BuildEnvironment.keys(ENV).each do |key| puts Utils::Shell.export_value(key, ENV[key], shell) end end