Merge pull request #1815 from MikeMcQuaid/dependency_to_formula
requirement: get formula from satisfy.
This commit is contained in:
commit
eece7706d1
@ -48,7 +48,7 @@ class Build
|
||||
Requirement.prune
|
||||
elsif req.build? && dependent != formula
|
||||
Requirement.prune
|
||||
elsif req.satisfied? && req.default_formula? && (dep = req.to_dependency).installed?
|
||||
elsif req.satisfied? && (dep = req.to_dependency) && dep.installed?
|
||||
deps << dep
|
||||
Requirement.prune
|
||||
end
|
||||
|
@ -1519,10 +1519,15 @@ class Formula
|
||||
# Returns a list of Dependency objects that are required at runtime.
|
||||
# @private
|
||||
def runtime_dependencies
|
||||
recursive_dependencies do |_dependent, dependency|
|
||||
runtime_dependencies = recursive_dependencies do |_, dependency|
|
||||
Dependency.prune if dependency.build?
|
||||
Dependency.prune if !dependency.required? && build.without?(dependency)
|
||||
end
|
||||
runtime_requirement_deps = recursive_requirements do |_, requirement|
|
||||
Requirement.prune if requirement.build?
|
||||
Requirement.prune if !requirement.required? && build.without?(requirement)
|
||||
end.map(&:to_dependency).compact
|
||||
runtime_dependencies + runtime_requirement_deps
|
||||
end
|
||||
|
||||
# Returns a list of formulae depended on by this formula that aren't
|
||||
|
@ -370,8 +370,8 @@ class FormulaInstaller
|
||||
raise UnsatisfiedRequirements, fatals
|
||||
end
|
||||
|
||||
def install_requirement_default_formula?(req, dependent, build)
|
||||
return false unless req.default_formula?
|
||||
def install_requirement_formula?(req, dependent, build)
|
||||
return false unless req.to_dependency
|
||||
return true unless req.satisfied?
|
||||
return false if req.run?
|
||||
install_bottle_for?(dependent, build) || build_bottle?
|
||||
@ -390,7 +390,7 @@ class FormulaInstaller
|
||||
Requirement.prune
|
||||
elsif req.build? && install_bottle_for?(dependent, build)
|
||||
Requirement.prune
|
||||
elsif install_requirement_default_formula?(req, dependent, build)
|
||||
elsif install_requirement_formula?(req, dependent, build)
|
||||
dep = req.to_dependency
|
||||
deps.unshift(dep)
|
||||
formulae.unshift(dep.to_formula)
|
||||
|
@ -15,6 +15,7 @@ class Requirement
|
||||
@default_formula = self.class.default_formula
|
||||
@cask ||= self.class.cask
|
||||
@download ||= self.class.download
|
||||
@formula = nil
|
||||
tags.each do |tag|
|
||||
next unless tag.is_a? Hash
|
||||
@cask ||= tag[:cask]
|
||||
@ -56,7 +57,14 @@ class Requirement
|
||||
def satisfied?
|
||||
result = self.class.satisfy.yielder { |p| instance_eval(&p) }
|
||||
@satisfied_result = result
|
||||
result ? true : false
|
||||
return false unless result
|
||||
|
||||
if parent = satisfied_result_parent
|
||||
parent.to_s =~ %r{(#{Regexp.escape(HOMEBREW_CELLAR)}|#{Regexp.escape(HOMEBREW_PREFIX)}/opt)/([\w+-.@]+)}
|
||||
@formula = $2
|
||||
end
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
# Overriding #fatal? is deprecated.
|
||||
@ -69,6 +77,11 @@ class Requirement
|
||||
self.class.default_formula || false
|
||||
end
|
||||
|
||||
def satisfied_result_parent
|
||||
return unless @satisfied_result.is_a?(Pathname)
|
||||
@satisfied_result.resolved_path.parent
|
||||
end
|
||||
|
||||
# Overriding #modify_build_environment is deprecated.
|
||||
# Pass a block to the env DSL method instead.
|
||||
# Note: #satisfied? should be called before invoking this method
|
||||
@ -81,11 +94,8 @@ class Requirement
|
||||
# satisfy { which("executable") }
|
||||
# work, even under superenv where "executable" wouldn't normally be on the
|
||||
# PATH.
|
||||
# This is undocumented magic and it should be removed, but we need to add
|
||||
# a way to declare path-based requirements that work with superenv first.
|
||||
return unless @satisfied_result.is_a?(Pathname)
|
||||
parent = @satisfied_result.parent
|
||||
|
||||
parent = satisfied_result_parent
|
||||
return unless parent
|
||||
return if ENV["PATH"].split(File::PATH_SEPARATOR).include?(parent.to_s)
|
||||
ENV.append_path("PATH", parent)
|
||||
end
|
||||
@ -111,13 +121,15 @@ class Requirement
|
||||
"#<#{self.class.name}: #{name.inspect} #{tags.inspect}>"
|
||||
end
|
||||
|
||||
def formula
|
||||
@formula || self.class.default_formula
|
||||
end
|
||||
|
||||
def to_dependency
|
||||
f = self.class.default_formula
|
||||
raise "No default formula defined for #{inspect}" if f.nil?
|
||||
if f =~ HOMEBREW_TAP_FORMULA_REGEX
|
||||
TapDependency.new(f, tags, method(:modify_build_environment), name)
|
||||
else
|
||||
Dependency.new(f, tags, method(:modify_build_environment), name)
|
||||
if formula =~ HOMEBREW_TAP_FORMULA_REGEX
|
||||
TapDependency.new(formula, tags, method(:modify_build_environment), name)
|
||||
elsif formula
|
||||
Dependency.new(formula, tags, method(:modify_build_environment), name)
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user