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:
ilovezfs 2016-06-02 02:09:35 -07:00
parent 5b1372e758
commit b2c9625d78

View File

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