diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb index 713c460222..e6675f14f0 100644 --- a/Library/Homebrew/env_config.rb +++ b/Library/Homebrew/env_config.rb @@ -351,6 +351,7 @@ module Homebrew end # Needs a custom implementation. + sig { returns(String) } def make_jobs jobs = ENV["HOMEBREW_MAKE_JOBS"].to_i return jobs.to_s if jobs.positive? diff --git a/Library/Homebrew/extend/ENV.rb b/Library/Homebrew/extend/ENV.rb index 17a6fd1227..d83beea7dc 100644 --- a/Library/Homebrew/extend/ENV.rb +++ b/Library/Homebrew/extend/ENV.rb @@ -1,4 +1,4 @@ -# typed: false +# typed: strict # frozen_string_literal: true require "hardware" @@ -7,11 +7,22 @@ require "extend/ENV/shared" require "extend/ENV/std" require "extend/ENV/super" -def superenv?(env) - env != "std" && Superenv.bin +module Kernel + extend T::Sig + + sig { params(env: T.nilable(String)).returns(T::Boolean) } + def superenv?(env) + return false if env == "std" + + !Superenv.bin.nil? + end + private :superenv? end module EnvActivation + extend T::Sig + + sig { params(env: T.nilable(String)).void } def activate_extensions!(env: nil) if superenv?(env) extend(Superenv) @@ -20,25 +31,41 @@ module EnvActivation end end - def with_build_environment(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) + sig do + params( + env: T.nilable(String), + cc: T.nilable(String), + build_bottle: T.nilable(T::Boolean), + bottle_arch: T.nilable(String), + _block: T.proc.returns(T.untyped), + ).returns(T.untyped) + end + def with_build_environment(env: nil, cc: nil, build_bottle: false, bottle_arch: nil, &_block) old_env = to_hash.dup tmp_env = to_hash.dup.extend(EnvActivation) - tmp_env.activate_extensions!(env: env) - tmp_env.setup_build_environment(cc: cc, build_bottle: build_bottle, bottle_arch: bottle_arch) + T.cast(tmp_env, EnvActivation).activate_extensions!(env: env) + T.cast(tmp_env, T.any(Superenv, Stdenv)) + .setup_build_environment(cc: cc, build_bottle: build_bottle, bottle_arch: bottle_arch) replace(tmp_env) - yield - ensure - replace(old_env) + + begin + yield + ensure + replace(old_env) + end end + sig { params(key: T.any(String, Symbol)).returns(T::Boolean) } def sensitive?(key) - /(cookie|key|token|password)/i =~ key + key.match?(/(cookie|key|token|password)/i) end + sig { returns(T::Hash[String, String]) } def sensitive_environment select { |key, _| sensitive?(key) } end + sig { void } def clear_sensitive_environment! each_key { |key| delete key if sensitive?(key) } end diff --git a/Library/Homebrew/extend/ENV.rbi b/Library/Homebrew/extend/ENV.rbi new file mode 100644 index 0000000000..edee664dba --- /dev/null +++ b/Library/Homebrew/extend/ENV.rbi @@ -0,0 +1,49 @@ +# typed: strict + +module EnvMethods + include Kernel + + sig { params(key: String).returns(T::Boolean) } + def key?(key); end + + sig { params(key: String).returns(T.nilable(String)) } + def [](key); end + + sig { params(key: String).returns(String) } + def fetch(key); end + + sig { params(key: String, value: T.nilable(T.any(String, PATH))).returns(T.nilable(String)) } + def []=(key, value); end + + sig { params(block: T.proc.params(arg0: [String, String]).returns(T::Boolean)).returns(T::Hash[String, String]) } + def select(&block); end + + sig { params(block: T.proc.params(arg0: String).void).void } + def each_key(&block); end + + sig { params(key: String).returns(T.nilable(String)) } + def delete(key); end + + sig do + params(other: T.any(T::Hash[String, String], Sorbet::Private::Static::ENVClass)) + .returns(Sorbet::Private::Static::ENVClass) + end + def replace(other); end + + sig { returns(T::Hash[String, String]) } + def to_hash; end +end + +module EnvActivation + include EnvMethods +end + +class Sorbet + module Private + module Static + class ENVClass + include EnvActivation + end + end + end +end diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb index ae49480479..eac0a305d4 100644 --- a/Library/Homebrew/extend/ENV/shared.rb +++ b/Library/Homebrew/extend/ENV/shared.rb @@ -1,4 +1,4 @@ -# typed: false +# typed: true # frozen_string_literal: true require "compilers" @@ -11,13 +11,16 @@ require "development_tools" # @see Stdenv # @see https://www.rubydoc.info/stdlib/Env Ruby's ENV API module SharedEnvExtension + extend T::Sig + include CompilerConstants - # @private CC_FLAG_VARS = %w[CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS].freeze - # @private + private_constant :CC_FLAG_VARS + FC_FLAG_VARS = %w[FCFLAGS FFLAGS].freeze - # @private + private_constant :FC_FLAG_VARS + SANITIZED_VARS = %w[ CDPATH CLICOLOR_FORCE CPATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH @@ -28,8 +31,16 @@ module SharedEnvExtension GOBIN GOPATH GOROOT PERL_MB_OPT PERL_MM_OPT LIBRARY_PATH LD_LIBRARY_PATH LD_PRELOAD LD_RUN_PATH ].freeze + private_constant :SANITIZED_VARS - # @private + sig do + params( + formula: T.nilable(Formula), + cc: T.nilable(String), + build_bottle: T.nilable(T::Boolean), + bottle_arch: T.nilable(T::Boolean), + ).void + end def setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_arch: nil) @formula = formula @cc = cc @@ -37,57 +48,62 @@ module SharedEnvExtension @bottle_arch = bottle_arch reset end + private :setup_build_environment - # @private + sig { void } def reset SANITIZED_VARS.each { |k| delete(k) } end + private :reset + sig { returns(T::Hash[String, String]) } def remove_cc_etc keys = %w[CC CXX OBJC OBJCXX LD CPP CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS LDFLAGS CPPFLAGS] - removed = Hash[*keys.flat_map { |key| [key, self[key]] }] - keys.each do |key| - delete(key) - end - removed + keys.map { |key| [key, delete(key)] }.to_h end + sig { params(newflags: String).void } def append_to_cflags(newflags) append(CC_FLAG_VARS, newflags) end + sig { params(val: T.any(Regexp, String)).void } def remove_from_cflags(val) remove CC_FLAG_VARS, val end + sig { params(value: String).void } def append_to_cccfg(value) append("HOMEBREW_CCCFG", value, "") end + sig { params(keys: T.any(String, T::Array[String]), value: T.untyped, separator: String).void } def append(keys, value, separator = " ") value = value.to_s Array(keys).each do |key| - old = self[key] - if old.nil? || old.empty? - self[key] = value + old_value = self[key] + self[key] = if old_value.nil? || old_value.empty? + value else - self[key] += separator + value + old_value + separator + value end end end + sig { params(keys: T.any(String, T::Array[String]), value: T.untyped, separator: String).void } def prepend(keys, value, separator = " ") value = value.to_s Array(keys).each do |key| - old = self[key] - self[key] = if old.nil? || old.empty? + old_value = self[key] + self[key] = if old_value.nil? || old_value.empty? value else - value + separator + old + value + separator + old_value end end end + sig { params(key: String, path: String).void } def append_path(key, path) self[key] = PATH.new(self[key]).append(path) end @@ -99,61 +115,78 @@ module SharedEnvExtension # Prepending a system path such as /usr/bin is a no-op so that requirements # don't accidentally override superenv shims or formulae's `bin` directories. #
ENV.prepend_path "PATH", which("emacs").dirname+ sig { params(key: String, path: String).void } def prepend_path(key, path) return if %w[/usr/bin /bin /usr/sbin /sbin].include? path.to_s self[key] = PATH.new(self[key]).prepend(path) end + sig { params(key: String, path: T.any(String, Pathname)).void } def prepend_create_path(key, path) - path = Pathname.new(path) unless path.is_a? Pathname + path = Pathname(path) path.mkpath prepend_path key, path end + sig { params(keys: T.any(String, T::Array[String]), value: T.untyped).void } def remove(keys, value) return if value.nil? Array(keys).each do |key| - next unless self[key] + old_value = self[key] + next if old_value.nil? - self[key] = self[key].sub(value, "") - delete(key) if self[key].empty? + new_value = old_value.sub(value, "") + if new_value.empty? + delete(key) + else + self[key] = new_value + end end end + sig { returns(T.nilable(String)) } def cc self["CC"] end + sig { returns(T.nilable(String)) } def cxx self["CXX"] end + sig { returns(T.nilable(String)) } def cflags self["CFLAGS"] end + sig { returns(T.nilable(String)) } def cxxflags self["CXXFLAGS"] end + sig { returns(T.nilable(String)) } def cppflags self["CPPFLAGS"] end + sig { returns(T.nilable(String)) } def ldflags self["LDFLAGS"] end + sig { returns(T.nilable(String)) } def fc self["FC"] end + sig { returns(T.nilable(String)) } def fflags self["FFLAGS"] end + sig { returns(T.nilable(String)) } def fcflags self["FCFLAGS"] end @@ -164,8 +197,7 @@ module SharedEnvExtension # # modify CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS in one go: # ENV.append_to_cflags "-I ./missing/includes" # end - # - # @return [Symbol] + sig { returns(T.any(Symbol, String)) } def compiler @compiler ||= if (cc = @cc) warn_about_non_apple_gcc(cc) if cc.match?(GNU_GCC_REGEXP) @@ -189,27 +221,31 @@ module SharedEnvExtension end end - # @private + sig { returns(T.any(String, Pathname)) } def determine_cc COMPILER_SYMBOL_MAP.invert.fetch(compiler, compiler) end + private :determine_cc COMPILERS.each do |compiler| define_method(compiler) do @compiler = compiler - self.cc = determine_cc - self.cxx = determine_cxx + + send(:cc=, send(:determine_cc)) + send(:cxx=, send(:determine_cxx)) end end # Snow Leopard defines an NCURSES value the opposite of most distros. # @see https://bugs.python.org/issue6848 # Currently only used by aalib in core. + sig { void } def ncurses_define append "CPPFLAGS", "-DNCURSES_OPAQUE=0" end # @private + sig { void } def userpaths! path = PATH.new(self["PATH"]).select do |p| # put Superenv.bin and opt path at the first @@ -228,6 +264,7 @@ module SharedEnvExtension self["PATH"] = path end + sig { void } def fortran # Ignore repeated calls to this function as it will misleadingly warn about # building with an alternative Fortran compiler without optimization flags, @@ -260,6 +297,7 @@ module SharedEnvExtension end # @private + sig { returns(Symbol) } def effective_arch if @build_bottle && @bottle_arch @bottle_arch.to_sym @@ -269,6 +307,7 @@ module SharedEnvExtension end # @private + sig { params(name: String).returns(Formula) } def gcc_version_formula(name) version = name[GNU_GCC_REGEXP, 1] gcc_version_name = "gcc@#{version}" @@ -282,6 +321,7 @@ module SharedEnvExtension end # @private + sig { params(name: String).void } def warn_about_non_apple_gcc(name) begin gcc_formula = gcc_version_formula(name) @@ -299,30 +339,40 @@ module SharedEnvExtension EOS end + sig { void } def permit_arch_flags; end # A no-op until we enable this by default again (which we may never do). + sig { void } def permit_weak_imports; end # @private + sig { params(cc: T.any(Symbol, String)).returns(T::Boolean) } def compiler_any_clang?(cc = compiler) %w[clang llvm_clang].include?(cc.to_s) end private + sig { params(_flags: T::Array[String], _map: T::Hash[Symbol, String]).void } + def set_cpu_flags(_flags, _map = {}); end + + sig { params(val: T.any(String, Pathname)).returns(String) } def cc=(val) self["CC"] = self["OBJC"] = val.to_s end + sig { params(val: T.any(String, Pathname)).returns(String) } def cxx=(val) self["CXX"] = self["OBJCXX"] = val.to_s end + sig { returns(T.nilable(String)) } def homebrew_cc self["HOMEBREW_CC"] end + sig { params(value: String, source: String).returns(Symbol) } def fetch_compiler(value, source) COMPILER_SYMBOL_MAP.fetch(value) do |other| case other @@ -334,10 +384,9 @@ module SharedEnvExtension end end + sig { void } def check_for_compiler_universal_support - return unless homebrew_cc.match?(GNU_GCC_REGEXP) - - raise "Non-Apple GCC can't build universal binaries" + raise "Non-Apple GCC can't build universal binaries" if homebrew_cc&.match?(GNU_GCC_REGEXP) end end diff --git a/Library/Homebrew/extend/ENV/shared.rbi b/Library/Homebrew/extend/ENV/shared.rbi new file mode 100644 index 0000000000..b1eac4cd3e --- /dev/null +++ b/Library/Homebrew/extend/ENV/shared.rbi @@ -0,0 +1,15 @@ +# typed: strict + +module SharedEnvExtension + include EnvMethods +end + +class Sorbet + module Private + module Static + class ENVClass + include SharedEnvExtension + end + end + end +end diff --git a/Library/Homebrew/extend/ENV/std.rb b/Library/Homebrew/extend/ENV/std.rb index bea1efc156..8a8a648d81 100644 --- a/Library/Homebrew/extend/ENV/std.rb +++ b/Library/Homebrew/extend/ENV/std.rb @@ -1,4 +1,4 @@ -# typed: false +# typed: strict # frozen_string_literal: true require "hardware" @@ -14,8 +14,16 @@ module Stdenv SAFE_CFLAGS_FLAGS = "-w -pipe" # @private - def setup_build_environment(**options) - super(**options) + sig do + params( + formula: T.nilable(Formula), + cc: T.nilable(String), + build_bottle: T.nilable(T::Boolean), + bottle_arch: T.nilable(T::Boolean), + ).void + end + def setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_arch: nil) + super self["HOMEBREW_ENV"] = "std" @@ -49,13 +57,14 @@ module Stdenv send(compiler) - return unless cc.match?(GNU_GCC_REGEXP) + return unless cc&.match?(GNU_GCC_REGEXP) gcc_formula = gcc_version_formula(cc) append_path "PATH", gcc_formula.opt_bin.to_s end alias generic_setup_build_environment setup_build_environment + sig { returns(T::Array[Pathname]) } def homebrew_extra_pkg_config_paths [] end @@ -73,10 +82,11 @@ module Stdenv # Removes the MAKEFLAGS environment variable, causing make to use a single job. # This is useful for makefiles with race conditions. # When passed a block, MAKEFLAGS is removed only for the duration of the block and is restored after its completion. - def deparallelize + sig { params(block: T.proc.returns(T.untyped)).returns(T.untyped) } + def deparallelize(&block) old = self["MAKEFLAGS"] remove "MAKEFLAGS", /-j\d+/ - if block_given? + if block begin yield ensure @@ -89,30 +99,33 @@ module Stdenv %w[O3 O2 O1 O0 Os].each do |opt| define_method opt do - remove_from_cflags(/-O./) - append_to_cflags "-#{opt}" + send(:remove_from_cflags, /-O./) + send(:append_to_cflags, "-#{opt}") end end - # @private + sig { returns(T.any(String, Pathname)) } def determine_cc s = super - DevelopmentTools.locate(s) || Pathname.new(s) + DevelopmentTools.locate(s) || Pathname(s) end + private :determine_cc - # @private + sig { returns(Pathname) } def determine_cxx - dir, base = determine_cc.split + dir, base = Pathname(determine_cc).split dir/base.to_s.sub("gcc", "g++").sub("clang", "clang++") end + private :determine_cxx GNU_GCC_VERSIONS.each do |n| define_method(:"gcc-#{n}") do super() - set_cpu_cflags + send(:set_cpu_cflags) end end + sig { void } def clang super() replace_in_cflags(/-Xarch_#{Hardware::CPU.arch_32_bit} (-march=\S*)/, '\1') @@ -124,16 +137,19 @@ module Stdenv set_cpu_cflags(map) end + sig { void } def m64 append_to_cflags "-m64" append "LDFLAGS", "-arch #{Hardware::CPU.arch_64_bit}" end + sig { void } def m32 append_to_cflags "-m32" append "LDFLAGS", "-arch #{Hardware::CPU.arch_32_bit}" end + sig { void } def universal_binary check_for_compiler_universal_support @@ -141,33 +157,38 @@ module Stdenv append "LDFLAGS", Hardware::CPU.universal_archs.as_arch_flags return if compiler_any_clang? - return unless Hardware.is_32_bit? + return unless Hardware::CPU.is_32_bit? # Can't mix "-march" for a 32-bit CPU with "-arch x86_64" replace_in_cflags(/-march=\S*/, "-Xarch_#{Hardware::CPU.arch_32_bit} \\0") end + sig { void } def cxx11 append "CXX", "-std=c++11" libcxx end + sig { void } def libcxx append "CXX", "-stdlib=libc++" if compiler == :clang end + sig { void } def libstdcxx append "CXX", "-stdlib=libstdc++" if compiler == :clang end # @private + sig { params(before: Regexp, after: String).void } def replace_in_cflags(before, after) CC_FLAG_VARS.each do |key| - self[key] = self[key].sub(before, after) if key?(key) + self[key] = fetch(key).sub(before, after) if key?(key) end end # Convenience method to set all C compiler flags in one shot. + sig { params(val: String).void } def define_cflags(val) CC_FLAG_VARS.each { |key| self[key] = val } end @@ -175,6 +196,7 @@ module Stdenv # Sets architecture-specific flags for every environment variable # given in the list `flags`. # @private + sig { params(flags: T::Array[String], map: T::Hash[Symbol, String]).void } def set_cpu_flags(flags, map = Hardware::CPU.optimization_flags) cflags =~ /(-Xarch_#{Hardware::CPU.arch_32_bit} )-march=/ xarch = Regexp.last_match(1).to_s @@ -186,19 +208,23 @@ module Stdenv append flags, map.fetch(effective_arch) end + sig { void } def x11; end # @private + sig { params(map: T::Hash[Symbol, String]).void } def set_cpu_cflags(map = Hardware::CPU.optimization_flags) # rubocop:disable Naming/AccessorMethodName set_cpu_flags(CC_FLAG_VARS, map) end + sig { returns(Integer) } def make_jobs Homebrew::EnvConfig.make_jobs.to_i end # This method does nothing in stdenv since there's no arg refurbishment # @private + sig { void } def refurbish_args; end end diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index 4b1ba40b84..5e2c1da21f 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -1,4 +1,4 @@ -# typed: false +# typed: true # frozen_string_literal: true require "extend/ENV/shared" @@ -22,6 +22,7 @@ module Superenv # @private attr_accessor :keg_only_deps, :deps, :run_time_deps, :x11 + sig { params(base: Superenv).void } def self.extended(base) base.keg_only_deps = [] base.deps = [] @@ -29,8 +30,10 @@ module Superenv end # @private + sig { returns(T.nilable(Pathname)) } def self.bin; end + sig { void } def reset super # Configure scripts generated by autoconf 2.61 or later export as_nl, which @@ -39,8 +42,16 @@ module Superenv end # @private - def setup_build_environment(**options) - super(**options) + sig do + params( + formula: T.nilable(Formula), + cc: T.nilable(String), + build_bottle: T.nilable(T::Boolean), + bottle_arch: T.nilable(T::Boolean), + ).void + end + def setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_arch: nil) + super send(compiler) self["HOMEBREW_ENV"] = "super" @@ -89,18 +100,22 @@ module Superenv private + sig { params(val: T.any(String, Pathname)).returns(String) } def cc=(val) self["HOMEBREW_CC"] = super end + sig { params(val: T.any(String, Pathname)).returns(String) } def cxx=(val) self["HOMEBREW_CXX"] = super end + sig { returns(String) } def determine_cxx determine_cc.to_s.gsub("gcc", "g++").gsub("clang", "clang++") end + sig { returns(T::Array[Pathname]) } def homebrew_extra_paths [] end @@ -115,7 +130,7 @@ module Superenv path.append("/usr/bin", "/bin", "/usr/sbin", "/sbin") begin - path.append(gcc_version_formula(homebrew_cc).opt_bin) if homebrew_cc.match?(GNU_GCC_REGEXP) + path.append(gcc_version_formula(T.must(homebrew_cc)).opt_bin) if homebrew_cc&.match?(GNU_GCC_REGEXP) rescue FormulaUnavailableError # Don't fail and don't add these formulae to the path if they don't exist. nil @@ -124,6 +139,7 @@ module Superenv path.existing end + sig { returns(T::Array[Pathname]) } def homebrew_extra_pkg_config_paths [] end @@ -143,6 +159,7 @@ module Superenv ).existing end + sig { returns(T::Array[Pathname]) } def homebrew_extra_aclocal_paths [] end @@ -156,6 +173,7 @@ module Superenv ).existing end + sig { returns(T::Array[Pathname]) } def homebrew_extra_isystem_paths [] end @@ -173,6 +191,7 @@ module Superenv PATH.new(keg_only_deps.map(&:opt_include)).existing end + sig { returns(T::Array[Pathname]) } def homebrew_extra_library_paths [] end @@ -187,6 +206,7 @@ module Superenv PATH.new(paths).existing end + sig { returns(String) } def determine_dependencies deps.map(&:name).join(",") end @@ -199,6 +219,7 @@ module Superenv ).existing end + sig { returns(T::Array[Pathname]) } def homebrew_extra_cmake_include_paths [] end @@ -208,6 +229,7 @@ module Superenv PATH.new(homebrew_extra_cmake_include_paths).existing end + sig { returns(T::Array[Pathname]) } def homebrew_extra_cmake_library_paths [] end @@ -217,6 +239,7 @@ module Superenv PATH.new(homebrew_extra_cmake_library_paths).existing end + sig { returns(T::Array[Pathname]) } def homebrew_extra_cmake_frameworks_paths [] end @@ -229,14 +252,17 @@ module Superenv ).existing end + sig { returns(String) } def determine_make_jobs Homebrew::EnvConfig.make_jobs end + sig { returns(String) } def determine_optflags Hardware::CPU.optimization_flags.fetch(effective_arch) end + sig { returns(String) } def determine_cccfg "" end @@ -246,9 +272,10 @@ module Superenv # Removes the MAKEFLAGS environment variable, causing make to use a single job. # This is useful for makefiles with race conditions. # When passed a block, MAKEFLAGS is removed only for the duration of the block and is restored after its completion. - def deparallelize + sig { params(block: T.proc.returns(T.untyped)).returns(T.untyped) } + def deparallelize(&block) old = delete("MAKEFLAGS") - if block_given? + if block begin yield ensure @@ -259,56 +286,64 @@ module Superenv old end + sig { returns(Integer) } def make_jobs self["MAKEFLAGS"] =~ /-\w*j(\d+)/ [Regexp.last_match(1).to_i, 1].max end + sig { void } def universal_binary check_for_compiler_universal_support self["HOMEBREW_ARCHFLAGS"] = Hardware::CPU.universal_archs.as_arch_flags end + sig { void } def permit_arch_flags append_to_cccfg "K" end + sig { void } def m32 append "HOMEBREW_ARCHFLAGS", "-m32" end + sig { void } def m64 append "HOMEBREW_ARCHFLAGS", "-m64" end + sig { void } def cxx11 append_to_cccfg "x" append_to_cccfg "g" if homebrew_cc == "clang" end + sig { void } def libcxx append_to_cccfg "g" if compiler == :clang end + sig { void } def libstdcxx append_to_cccfg "h" if compiler == :clang end # @private + sig { void } def refurbish_args append_to_cccfg "O" end %w[O3 O2 O1 O0 Os].each do |opt| define_method opt do - self["HOMEBREW_OPTIMIZATION_LEVEL"] = opt + send(:[]=, "HOMEBREW_OPTIMIZATION_LEVEL", opt) end end + sig { void } def set_x11_env_if_installed; end - - def set_cpu_flags(_arg0, _arg1 = "", _arg2 = {}); end end require "extend/os/extend/ENV/super" diff --git a/Library/Homebrew/extend/os/mac/extend/ENV/super.rb b/Library/Homebrew/extend/os/mac/extend/ENV/super.rb index 4e541a2be9..d797ff7484 100644 --- a/Library/Homebrew/extend/os/mac/extend/ENV/super.rb +++ b/Library/Homebrew/extend/os/mac/extend/ENV/super.rb @@ -27,7 +27,7 @@ module Superenv def homebrew_extra_paths paths = [] - paths << MacOS::XQuartz.bin.to_s if x11? + paths << MacOS::XQuartz.bin if x11? paths end diff --git a/Library/Homebrew/utils/inreplace.rb b/Library/Homebrew/utils/inreplace.rb index b414647aea..951b55148c 100644 --- a/Library/Homebrew/utils/inreplace.rb +++ b/Library/Homebrew/utils/inreplace.rb @@ -34,7 +34,7 @@ module Utils # @api public sig do params( - paths: T.any(T::Array[T.untyped], String), + paths: T.any(T::Array[T.untyped], String, Pathname), before: T.nilable(T.any(Regexp, String)), after: T.nilable(T.any(String, Symbol)), audit_result: T::Boolean,