Failures during ./configure should mention config.log.

This commit is contained in:
Adam Vandenberg 2010-04-03 08:44:41 -07:00
parent 914a068dc8
commit 1761ba66bf
7 changed files with 60 additions and 3 deletions

View File

@ -205,6 +205,12 @@ class Formula
onoe e.inspect
puts e.backtrace
ohai "Rescuing build..."
if (e.was_running_configure? rescue false) and File.exist? 'config.log'
puts "It looks like an autotools configure failed."
puts "Gist 'config.log' and any error output when reporting an issue."
puts
end
puts "When you exit this shell Homebrew will attempt to finalise the installation."
puts "If nothing is installed or the shell exits with a non-zero error code,"
puts "Homebrew will abort. The installation prefix is:"

View File

@ -44,13 +44,18 @@ RECOMMENDED_GCC_42 = (MACOS_VERSION >= 10.6) ? 5646 : 5577
class ExecutionError <RuntimeError
attr :exit_status
attr :exit_status, :command
def initialize cmd, args = [], es = nil
@command = cmd
super "Failure while executing: #{cmd} #{pretty(args)*' '}"
@exit_status = es.exitstatus rescue 1
end
def was_running_configure?
@command == './configure'
end
private
def pretty args

Binary file not shown.

View File

@ -21,6 +21,18 @@ class TestScriptFileFormula <ScriptFileFormula
end
class ConfigureTests < Test::Unit::TestCase
def test_detect_failed_configure
f=ConfigureFails.new
begin
f.brew { f.install }
rescue ExecutionError => e
assert e.was_running_configure?
end
end
end
class InstallTests < Test::Unit::TestCase
def temporary_install f
# Brew and install the given formula

View File

@ -12,3 +12,18 @@ class TestBall <Formula
prefix.install "libexec"
end
end
class ConfigureFails <Formula
# name parameter required for some Formula::factory
def initialize name=nil
@url="file:///#{TEST_FOLDER}/configure_fails.tar.gz"
@homepage = 'http://example.com/'
@version = '1.0.0'
@md5 = '9385e1b68ab8af68ac2c35423443159b'
super "configurefails"
end
def install
system "./configure"
end
end

View File

@ -26,15 +26,21 @@ at_exit { HOMEBREW_PREFIX.parent.rmtree }
# Test fixtures and files can be found relative to this path
TEST_FOLDER = Pathname.new(ABS__FILE__).parent.realpath
# Note: These exceptions duplicate those defined in globals.
# Perhaps the same definitions should be used in both places.
class ExecutionError <RuntimeError
attr :exit_status
attr :exit_status, :command
def initialize cmd, args = [], es = nil
@command = cmd
super "Failure while executing: #{cmd} #{pretty(args)*' '}"
@exit_status = es.exitstatus rescue 1
end
def was_running_configure?
@command == './configure'
end
private
def pretty args
@ -49,6 +55,12 @@ class ExecutionError <RuntimeError
end
class BuildError <ExecutionError
attr :env
def initialize cmd, args = [], es = nil
super
@env = ENV.to_hash
end
end
require 'test/unit' # must be after at_exit

View File

@ -434,6 +434,13 @@ rescue BuildError => e
# then replace that string with the following when the github api returns
issues = issues_for_formula(formula_name)
puts "These existing issues may help you:", *issues unless issues.empty?
if e.was_running_configure?
puts "It looks like an autotools configure failed."
puts "Consider re-running the install with '-vd' to keep 'config.log' around:"
puts " brew install -vd formula_name"
puts "Gist 'config.log' and any error output when reporting an issue."
end
puts
puts "Consider running `brew doctor` if a large number of installs are failing."
exit 1
rescue RuntimeError, SystemCallError => e