Set uses_from_macos_elements in all cases

This commit is contained in:
Bo Anderson 2021-09-14 04:06:40 +01:00
parent 4a64d59141
commit 8dd11e4e4c
No known key found for this signature in database
GPG Key ID: 3DB94E204E137D65
5 changed files with 21 additions and 17 deletions

View File

@ -7,19 +7,21 @@ class SoftwareSpec
undef uses_from_macos undef uses_from_macos
def uses_from_macos(deps, bounds = {}) def uses_from_macos(deps, bounds = {})
@uses_from_macos_elements ||= []
if deps.is_a?(Hash) if deps.is_a?(Hash)
bounds = deps.dup bounds = deps.dup
deps = bounds.shift deps = [bounds.shift].to_h
end end
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 @uses_from_macos_elements << deps
else
bounds = bounds.transform_values { |v| MacOS::Version.from_symbol(v) }
# 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 depends_on deps
end end
end end
end

View File

@ -1903,7 +1903,6 @@ class Formula
# @private # @private
def to_hash def to_hash
dependencies = deps dependencies = deps
uses_from_macos = uses_from_macos_elements || []
hsh = { hsh = {
"name" => name, "name" => name,
@ -1941,7 +1940,7 @@ class Formula
"optional_dependencies" => dependencies.select(&:optional?) "optional_dependencies" => dependencies.select(&:optional?)
.map(&:name) .map(&:name)
.uniq, .uniq,
"uses_from_macos" => uses_from_macos.uniq, "uses_from_macos" => uses_from_macos_elements.uniq,
"requirements" => [], "requirements" => [],
"conflicts_with" => conflicts.map(&:name), "conflicts_with" => conflicts.map(&:name),
"caveats" => caveats&.gsub(HOMEBREW_PREFIX, "$(brew --prefix)"), "caveats" => caveats&.gsub(HOMEBREW_PREFIX, "$(brew --prefix)"),

View File

@ -264,8 +264,7 @@ module Homebrew
next unless @core_tap next unless @core_tap
# we want to allow uses_from_macos for aliases but not bare dependencies # we want to allow uses_from_macos for aliases but not bare dependencies
if self.class.aliases.include?(dep.name) && if self.class.aliases.include?(dep.name) && spec.uses_from_macos_elements.exclude?(dep.name)
(spec.uses_from_macos_elements.blank? || spec.uses_from_macos_elements.exclude?(dep.name))
problem "Dependency '#{dep.name}' is an alias; use the canonical name '#{dep.to_formula.full_name}'." problem "Dependency '#{dep.name}' is an alias; use the canonical name '#{dep.to_formula.full_name}'."
end end

View File

@ -11,10 +11,10 @@ module Language
module_function module_function
def detected_perl_shebang(formula = self) def detected_perl_shebang(formula = self)
perl_path = if formula.uses_from_macos_elements&.include? "perl" perl_path = if formula.deps.map(&:name).include? "perl"
"/usr/bin/perl#{MacOS.preferred_perl_version}"
elsif formula.deps.map(&:name).include? "perl"
Formula["perl"].opt_bin/"perl" Formula["perl"].opt_bin/"perl"
elsif formula.uses_from_macos_elements.include? "perl"
"/usr/bin/perl#{MacOS.preferred_perl_version}"
else else
raise ShebangDetectionError.new("Perl", "formula does not depend on Perl") raise ShebangDetectionError.new("Perl", "formula does not depend on Perl")
end end

View File

@ -47,6 +47,7 @@ class SoftwareSpec
@deprecated_options = [] @deprecated_options = []
@build = BuildOptions.new(Options.create(@flags), options) @build = BuildOptions.new(Options.create(@flags), options)
@compiler_failures = [] @compiler_failures = []
@uses_from_macos_elements = []
@bottle_disable_reason = nil @bottle_disable_reason = nil
end end
@ -178,7 +179,10 @@ class SoftwareSpec
end end
def uses_from_macos(spec, _bounds = {}) 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) depends_on(spec)
end end