Undeclared dependencies in runtime_dependencies
Fixes https://github.com/Homebrew/brew/issues/2173.
This commit is contained in:
parent
021fe22e3c
commit
8386e6a8c1
@ -1487,10 +1487,7 @@ class Formula
|
|||||||
# Returns a list of Dependency objects that are required at runtime.
|
# Returns a list of Dependency objects that are required at runtime.
|
||||||
# @private
|
# @private
|
||||||
def runtime_dependencies
|
def runtime_dependencies
|
||||||
recursive_dependencies do |_, dependency|
|
declared_runtime_dependencies | undeclared_runtime_dependencies
|
||||||
Dependency.prune if dependency.build?
|
|
||||||
Dependency.prune if !dependency.required? && build.without?(dependency)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a list of formulae depended on by this formula that aren't
|
# Returns a list of formulae depended on by this formula that aren't
|
||||||
@ -1835,6 +1832,23 @@ class Formula
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def declared_runtime_dependencies
|
||||||
|
recursive_dependencies do |_, dependency|
|
||||||
|
Dependency.prune if dependency.build?
|
||||||
|
Dependency.prune if !dependency.required? && build.without?(dependency)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def undeclared_runtime_dependencies
|
||||||
|
return [] unless optlinked?
|
||||||
|
|
||||||
|
keg = Keg.new(opt_prefix)
|
||||||
|
linkage_checker = LinkageChecker.new(keg, self)
|
||||||
|
dylib_formula_names = linkage_checker.brewed_dylibs.keys
|
||||||
|
linked_formulae_names = dylib_formula_names - [name]
|
||||||
|
linked_formulae_names.map { |n| Dependency.new(n) }
|
||||||
|
end
|
||||||
|
|
||||||
# Returns the prefix for a given formula version number.
|
# Returns the prefix for a given formula version number.
|
||||||
# @private
|
# @private
|
||||||
def versioned_prefix(v)
|
def versioned_prefix(v)
|
||||||
|
|||||||
@ -685,6 +685,7 @@ describe Formula do
|
|||||||
expect(f5.runtime_dependencies.map(&:name)).to eq(["f1", "f4"])
|
expect(f5.runtime_dependencies.map(&:name)).to eq(["f1", "f4"])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#runtime_dependencies" do
|
||||||
specify "runtime dependencies with optional deps from tap" do
|
specify "runtime dependencies with optional deps from tap" do
|
||||||
tap_loader = double
|
tap_loader = double
|
||||||
|
|
||||||
@ -707,6 +708,23 @@ describe Formula do
|
|||||||
expect(f3.runtime_dependencies.map(&:name)).to eq(["foo/bar/f1", "baz/qux/f2"])
|
expect(f3.runtime_dependencies.map(&:name)).to eq(["foo/bar/f1", "baz/qux/f2"])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "includes non-declared direct dependencies" do
|
||||||
|
formula = Class.new(Testball).new
|
||||||
|
dependency = formula("dependency") { url "f-1.0" }
|
||||||
|
|
||||||
|
formula.brew { formula.install }
|
||||||
|
keg = Keg.for(formula.prefix)
|
||||||
|
keg.link
|
||||||
|
|
||||||
|
brewed_dylibs = { dependency.name => Set["some.dylib"] }
|
||||||
|
linkage_checker = double("linkage checker", brewed_dylibs: brewed_dylibs)
|
||||||
|
allow(LinkageChecker).to receive(:new).with(keg, any_args)
|
||||||
|
.and_return(linkage_checker)
|
||||||
|
|
||||||
|
expect(formula.runtime_dependencies).to include an_object_having_attributes(name: dependency.name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
specify "requirements" do
|
specify "requirements" do
|
||||||
f1 = formula "f1" do
|
f1 = formula "f1" do
|
||||||
url "f1-1"
|
url "f1-1"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user