From 8dd11e4e4c2b98aa93517b3a1ebcd5f7ca6f44cc Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Tue, 14 Sep 2021 04:06:40 +0100 Subject: [PATCH] Set uses_from_macos_elements in all cases --- .../Homebrew/extend/os/mac/software_spec.rb | 20 ++++++++++--------- Library/Homebrew/formula.rb | 3 +-- Library/Homebrew/formula_auditor.rb | 3 +-- Library/Homebrew/language/perl.rb | 6 +++--- Library/Homebrew/software_spec.rb | 6 +++++- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Library/Homebrew/extend/os/mac/software_spec.rb b/Library/Homebrew/extend/os/mac/software_spec.rb index c5f5d6cb72..1be80083e2 100644 --- a/Library/Homebrew/extend/os/mac/software_spec.rb +++ b/Library/Homebrew/extend/os/mac/software_spec.rb @@ -7,19 +7,21 @@ class SoftwareSpec undef uses_from_macos def uses_from_macos(deps, bounds = {}) - @uses_from_macos_elements ||= [] - if deps.is_a?(Hash) bounds = deps.dup - deps = bounds.shift + deps = [bounds.shift].to_h end + @uses_from_macos_elements << deps + bounds = bounds.transform_values { |v| MacOS::Version.from_symbol(v) } - if MacOS.version >= bounds[:since] || - (Homebrew::EnvConfig.simulate_macos_on_linux? && !bounds.key?(:since)) - @uses_from_macos_elements << deps - else - depends_on deps - end + + # Linux simulating macOS. Assume oldest macOS version. + return if Homebrew::EnvConfig.simulate_macos_on_linux? && !bounds.key?(:since) + + # macOS new enough for dependency to not be required. + return if MacOS.version >= bounds[:since] + + depends_on deps end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 72abd45433..cea4bed176 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1903,7 +1903,6 @@ class Formula # @private def to_hash dependencies = deps - uses_from_macos = uses_from_macos_elements || [] hsh = { "name" => name, @@ -1941,7 +1940,7 @@ class Formula "optional_dependencies" => dependencies.select(&:optional?) .map(&:name) .uniq, - "uses_from_macos" => uses_from_macos.uniq, + "uses_from_macos" => uses_from_macos_elements.uniq, "requirements" => [], "conflicts_with" => conflicts.map(&:name), "caveats" => caveats&.gsub(HOMEBREW_PREFIX, "$(brew --prefix)"), diff --git a/Library/Homebrew/formula_auditor.rb b/Library/Homebrew/formula_auditor.rb index 819c30c8d0..c46a8cc94e 100644 --- a/Library/Homebrew/formula_auditor.rb +++ b/Library/Homebrew/formula_auditor.rb @@ -264,8 +264,7 @@ module Homebrew next unless @core_tap # we want to allow uses_from_macos for aliases but not bare dependencies - if self.class.aliases.include?(dep.name) && - (spec.uses_from_macos_elements.blank? || spec.uses_from_macos_elements.exclude?(dep.name)) + if self.class.aliases.include?(dep.name) && spec.uses_from_macos_elements.exclude?(dep.name) problem "Dependency '#{dep.name}' is an alias; use the canonical name '#{dep.to_formula.full_name}'." end diff --git a/Library/Homebrew/language/perl.rb b/Library/Homebrew/language/perl.rb index bfff1072e4..f65e9c1685 100644 --- a/Library/Homebrew/language/perl.rb +++ b/Library/Homebrew/language/perl.rb @@ -11,10 +11,10 @@ module Language module_function def detected_perl_shebang(formula = self) - perl_path = if formula.uses_from_macos_elements&.include? "perl" - "/usr/bin/perl#{MacOS.preferred_perl_version}" - elsif formula.deps.map(&:name).include? "perl" + perl_path = if formula.deps.map(&:name).include? "perl" Formula["perl"].opt_bin/"perl" + elsif formula.uses_from_macos_elements.include? "perl" + "/usr/bin/perl#{MacOS.preferred_perl_version}" else raise ShebangDetectionError.new("Perl", "formula does not depend on Perl") end diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb index 392296ebad..5f774a65ac 100644 --- a/Library/Homebrew/software_spec.rb +++ b/Library/Homebrew/software_spec.rb @@ -47,6 +47,7 @@ class SoftwareSpec @deprecated_options = [] @build = BuildOptions.new(Options.create(@flags), options) @compiler_failures = [] + @uses_from_macos_elements = [] @bottle_disable_reason = nil end @@ -178,7 +179,10 @@ class SoftwareSpec end def uses_from_macos(spec, _bounds = {}) - spec = spec.dup.shift if spec.is_a?(Hash) + spec = [spec.dup.shift].to_h if spec.is_a?(Hash) + + @uses_from_macos_elements << spec + depends_on(spec) end