diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index ef74a1942e..5a7fee4fa9 100755 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -56,7 +56,7 @@ at_exit do end def install f - f.external_deps.each { |dep| dep.modify_build_environment } + f.requirements.each { |dep| dep.modify_build_environment } f.recursive_deps.uniq.each do |dep| dep = Formula.factory dep diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index 5af3311d58..38308c0870 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -19,11 +19,11 @@ class DependencyCollector :chicken, :jruby, :lua, :node, :perl, :python, :rbx, :ruby ].freeze - attr_reader :deps, :external_deps + attr_reader :deps, :requirements def initialize @deps = Dependencies.new - @external_deps = Set.new + @requirements = Set.new end def add spec @@ -35,7 +35,7 @@ class DependencyCollector # dependency needed for the current platform. return if dep.nil? # Add dep to the correct bucket - (dep.is_a?(Requirement) ? @external_deps : @deps) << dep + (dep.is_a?(Requirement) ? @requirements : @deps) << dep end private diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index 6ebc40e1cc..9ed6646f1f 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -65,12 +65,15 @@ class FormulaInstallationAlreadyAttemptedError < Homebrew::InstallationError end end -class UnsatisfiedRequirement < Homebrew::InstallationError - attr :dep +class UnsatisfiedRequirements < Homebrew::InstallationError + attr :reqs - def initialize formula, dep - @dep = dep - super formula, "An unsatisfied requirement failed this build." + def initialize formula, reqs + @reqs = reqs + message = (reqs.length == 1) \ + ? "An unsatisfied requirement failed this build." \ + : "Unsatisifed requirements failed this build." + super formula, message end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 061fa5bd40..166e30cb27 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -422,8 +422,8 @@ class Formula HOMEBREW_REPOSITORY+"Library/Formula/#{name.downcase}.rb" end - def deps; self.class.dependencies.deps; end - def external_deps; self.class.dependencies.external_deps; end + def deps; self.class.dependencies.deps; end + def requirements; self.class.dependencies.requirements; end # deps are in an installable order # which means if a depends on b then b will be ordered before a in this list diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index cd32eff9fb..a2768f7a10 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -43,7 +43,8 @@ class FormulaInstaller f.recursive_deps.each do |dep| if dep.installed? and not dep.keg_only? and not dep.linked_keg.directory? - raise CannotInstallFormulaError, "You must `brew link #{dep}' before #{f} can be installed" + raise CannotInstallFormulaError, + "You must `brew link #{dep}' before #{f} can be installed" end end unless ignore_deps @@ -66,15 +67,25 @@ class FormulaInstaller EOS end - f.external_deps.each do |dep| - unless dep.satisfied? - puts dep.message - if dep.fatal? and not ignore_deps - raise UnsatisfiedRequirement.new(f, dep) + # Build up a list of unsatisifed fatal requirements + first_message = true + unsatisfied_fatals = [] + f.requirements.each do |req| + unless req.satisfied? + # Newline between multiple messages + puts unless first_message + puts req.message + first_message = false + if req.fatal? and not ignore_deps + unsatisfied_fatals << req end end end + unless unsatisfied_fatals.empty? + raise UnsatisfiedRequirements.new(f, unsatisfied_fatals) + end + unless ignore_deps needed_deps = f.recursive_deps.reject{ |d| d.installed? } unless needed_deps.empty? diff --git a/Library/Homebrew/test/test_external_deps.rb b/Library/Homebrew/test/test_external_deps.rb index f36eac9b07..b4ca0f6e6a 100644 --- a/Library/Homebrew/test/test_external_deps.rb +++ b/Library/Homebrew/test/test_external_deps.rb @@ -12,9 +12,9 @@ class ExternalDepsTests < Test::Unit::TestCase end # Should have found a dep - assert d.external_deps.size == 1 + assert d.requirements.size == 1 - d.external_deps do |dep| + d.requirements do |req| assert !d.satisfied? end end @@ -26,9 +26,9 @@ class ExternalDepsTests < Test::Unit::TestCase end # Should have found a dep - assert d.external_deps.size == 1 + assert d.requirements.size == 1 - d.external_deps do |dep| + d.requirements do |req| assert d.satisfied? end end