Add type signatures to BuildEnvironment.

This commit is contained in:
Markus Reiter 2020-11-19 07:46:52 +01:00
parent 220b4606ca
commit 70dd41cfd8
2 changed files with 16 additions and 5 deletions

View File

@ -1,34 +1,44 @@
# typed: false # typed: true
# frozen_string_literal: true # frozen_string_literal: true
# Settings for the build environment. # Settings for the build environment.
# #
# @api private # @api private
class BuildEnvironment class BuildEnvironment
extend T::Sig
sig { params(settings: Symbol).void }
def initialize(*settings) def initialize(*settings)
@settings = Set.new(*settings) @settings = Set.new(settings)
end end
sig { params(args: T::Enumerable[Symbol]).returns(T.self_type) }
def merge(*args) def merge(*args)
@settings.merge(*args) @settings.merge(*args)
self self
end end
sig { params(o: Symbol).returns(T.self_type) }
def <<(o) def <<(o)
@settings << o @settings << o
self self
end end
sig { returns(T::Boolean) }
def std? def std?
@settings.include? :std @settings.include? :std
end end
sig { returns(T::Boolean) }
def userpaths? def userpaths?
@settings.include? :userpaths @settings.include? :userpaths
end end
# DSL for specifying build environment settings. # DSL for specifying build environment settings.
module DSL module DSL
extend T::Sig
sig { params(settings: Symbol).returns(BuildEnvironment) }
def env(*settings) def env(*settings)
@env ||= BuildEnvironment.new @env ||= BuildEnvironment.new
@env.merge(settings) @env.merge(settings)
@ -50,16 +60,18 @@ class BuildEnvironment
].freeze ].freeze
private_constant :KEYS private_constant :KEYS
sig { params(env: T.untyped).returns(T::Array[String]) }
def self.keys(env) def self.keys(env)
KEYS & env.keys KEYS & env.keys
end end
sig { params(env: T.untyped, f: IO).void }
def self.dump(env, f = $stdout) def self.dump(env, f = $stdout)
keys = self.keys(env) keys = self.keys(env)
keys -= %w[CC CXX OBJC OBJCXX] if env["CC"] == env["HOMEBREW_CC"] keys -= %w[CC CXX OBJC OBJCXX] if env["CC"] == env["HOMEBREW_CC"]
keys.each do |key| keys.each do |key|
value = env[key] value = env.fetch(key)
s = +"#{key}: #{value}" s = +"#{key}: #{value}"
case key case key
when "CC", "CXX", "LD" when "CC", "CXX", "LD"

View File

@ -47,11 +47,10 @@ module Homebrew
Utils::Shell.from_path(args.shell) Utils::Shell.from_path(args.shell)
end end
env_keys = BuildEnvironment.keys(ENV)
if shell.nil? if shell.nil?
BuildEnvironment.dump ENV BuildEnvironment.dump ENV
else else
env_keys.each do |key| BuildEnvironment.keys(ENV).each do |key|
puts Utils::Shell.export_value(key, ENV[key], shell) puts Utils::Shell.export_value(key, ENV[key], shell)
end end
end end