Skip to content

Commit

Permalink
Failures during ./configure should mention config.log.
Browse files Browse the repository at this point in the history
  • Loading branch information
adamv committed Jun 10, 2010
1 parent 281a08e commit 7a12e2c
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 3 deletions.
6 changes: 6 additions & 0 deletions Library/Homebrew/formula.rb
Expand Up @@ -205,6 +205,12 @@ def brew
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:"
Expand Down
7 changes: 6 additions & 1 deletion Library/Homebrew/global.rb
Expand Up @@ -44,13 +44,18 @@


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
Expand Down
Binary file added Library/Homebrew/test/configure_fails.tar.gz
Binary file not shown.
12 changes: 12 additions & 0 deletions Library/Homebrew/test/test_formula_install.rb
Expand Up @@ -21,6 +21,18 @@ def initialize
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
Expand Down
15 changes: 15 additions & 0 deletions Library/Homebrew/test/testball.rb
Expand Up @@ -12,3 +12,18 @@ def install
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
16 changes: 14 additions & 2 deletions Library/Homebrew/test/testing_env.rb
Expand Up @@ -26,15 +26,21 @@
# 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
Expand All @@ -49,6 +55,12 @@ def pretty args
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
7 changes: 7 additions & 0 deletions bin/brew
Expand Up @@ -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
Expand Down

0 comments on commit 7a12e2c

Please sign in to comment.