Fixed error handling in Rake::ConfigureTask::FooConfigTest#lookup_flags.
[ruby-vorbistagger.git] / rake / configuretask.rb
index d0e0983fe07d092d975657c0e3de83b84e2d019b..b673c84a8b45fa770a75b23fc999443a76b1d24a 100644 (file)
@@ -23,7 +23,6 @@
 require "rake/tasklib"
 require "rake/clean"
 require "yaml"
-require "tempfile"
 require "fileutils"
 
 module Rake
@@ -140,22 +139,19 @@ module Rake
                        protected
                        def can_exec_binary?(bin)
                                fork do
-                                       tf = Tempfile.open("configuretask")
-                                       STDOUT.reopen(tf)
-                                       STDERR.reopen(tf)
+                                       STDOUT.reopen("/dev/null")
+                                       STDERR.reopen("/dev/null")
 
                                        begin
                                                exec(bin)
                                        rescue SystemCallError
-                                               exit 0xb00bface
-                                       ensure
-                                               tf.close
+                                               exit 255
                                        end
                                end
 
                                Process.wait
 
-                               $?.exitstatus != 0xb00bface
+                               $?.exitstatus != 255
                        end
                end
 
@@ -182,17 +178,23 @@ module Rake
                        def invoke
                                return false unless can_exec_command?
 
-                               [:version, :cflags, :libs].each do |f|
-                                       @result[f] = lookup_flags(f)
+                               begin
+                                       [:version, :cflags, :libs].each do |f|
+                                               @result[f] = lookup_flags(f)
+                                       end
+                               rescue Exception
+                                       @result.clear
                                end
 
-                               true
+                               !@result.empty?
                        end
 
                        protected
                        def lookup_flags(f)
                                tmp = `#{@command} --#{f}`.strip
-                               $?.exitstatus.zero? ? tmp : nil
+
+                               raise unless $?.exitstatus.zero?
+                               tmp
                        end
 
                        private
@@ -205,15 +207,18 @@ module Rake
                        def initialize(name, opts = {})
                                super
 
-                               @command = "pkg-config --silence-errors"
+                               @command = "pkg-config"
                        end
 
                        protected
                        def lookup_flags(f)
                                f = :modversion if f == :version
 
-                               tmp = `#{@command} --#{f} #{@name}`.strip.tr("\n", "/")
-                               $?.exitstatus.zero? ? tmp : nil
+                               tmp = `#{@command} --silence-errors --#{f} #{@name}`.
+                                     strip.tr("\n", "/")
+
+                               raise unless $?.exitstatus.zero?
+                               tmp
                        end
                end