formula_installer: accumulate inherited options
When a given dependency appears multiple times in a formula's dependency tree, the inherited options for that dependency should accumulate rather than being overwritten each time that dependency is considered by expand_dependencies. In particular, this impacts "universal" since the dependency should be built with universal unless all of its instances in the dependency tree don't have "universal" as opposed to only if the last instance considered has "universal." Closes Homebrew/homebrew-core#1604. Closes #308. Signed-off-by: ilovezfs <ilovezfs@icloud.com>
This commit is contained in:
parent
5b1372e758
commit
b2c9625d78
@ -341,10 +341,10 @@ class FormulaInstaller
|
||||
end
|
||||
|
||||
def expand_dependencies(deps)
|
||||
inherited_options = {}
|
||||
inherited_options = Hash.new { |hash, key| hash[key] = Options.new }
|
||||
|
||||
expanded_deps = Dependency.expand(formula, deps) do |dependent, dep|
|
||||
options = inherited_options[dep.name] = inherited_options_for(dep)
|
||||
inherited_options[dep.name] |= inherited_options_for(dep)
|
||||
build = effective_build_options_for(
|
||||
dependent,
|
||||
inherited_options.fetch(dependent.name, [])
|
||||
@ -354,7 +354,7 @@ class FormulaInstaller
|
||||
Dependency.prune
|
||||
elsif dep.build? && install_bottle_for?(dependent, build)
|
||||
Dependency.prune
|
||||
elsif dep.satisfied?(options)
|
||||
elsif dep.satisfied?(inherited_options[dep.name])
|
||||
Dependency.skip
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user