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
# 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"

View File

@ -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