linkage: fix edge cases for undeclared_deps

* take requirements into account.
* handle full qualified formula name.
* filter out build time or unused optional deps/requirements.

Closes #424.

Signed-off-by: Xu Cheng <xucheng@me.com>
This commit is contained in:
Xu Cheng 2016-07-02 03:42:58 +08:00
parent 080ddd8804
commit 9167fbf876
No known key found for this signature in database
GPG Key ID: C2A3860FA0B459CE

View File

@ -72,7 +72,13 @@ module Homebrew
begin
f = Formulary.from_rack(keg.rack)
@undeclared_deps = @brewed_dylibs.keys - f.deps.map(&:name)
f.build = Tab.for_keg(keg)
filter_out = proc do |dep|
dep.build? || (dep.optional? && !dep.option_names.any? { |n| f.build.with?(n) })
end
declared_deps = f.deps.reject { |dep| filter_out.call(dep) }.map(&:name) +
f.requirements.reject { |req| filter_out.call(req) }.map(&:default_formula).compact
@undeclared_deps = @brewed_dylibs.keys - declared_deps.map { |dep| dep.split("/").last }
@undeclared_deps -= [f.name]
rescue FormulaUnavailableError
opoo "Formula unavailable: #{keg.name}"