<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,7 @@
 #!/usr/bin/env ruby
 
+require 'tempfile'
+
 root = File.expand_path File.dirname(__FILE__)
 
 require File.join(root, &quot;kernel&quot;, &quot;delta&quot;, &quot;options&quot;)
@@ -13,6 +15,7 @@ class Configure
     @llvm_path = nil
     @llvm_configure = nil
     @prefix = nil
+    @defines = []
 
     @llvm_svn_dir = File.join(root, &quot;vm&quot;, &quot;external_libs&quot;, &quot;llvm&quot;)
 
@@ -177,6 +180,37 @@ class Configure
     false
   end
 
+  def has_function(name, includes=[])
+    print &quot;Checking for function '#{name}': &quot;
+    tf = Tempfile.new(&quot;rbx-test&quot;)
+    includes.each do |i|
+      tf.puts &quot;#include &lt;#{i}&gt;&quot;
+    end
+
+    tf.puts &quot;int main() { void* ptr = &amp;#{name}; }&quot;
+
+    tf.close
+
+    `#{compiler} -o /dev/null -x c #{tf.path} 2&gt;&amp;1`
+    status = ($?.exitstatus == 0)
+
+    tf.unlink
+
+    if status
+      puts &quot;found!&quot;
+    else
+      puts &quot;not found.&quot;
+    end
+
+    return status
+  end
+
+  def detect_features
+    if has_function(&quot;backtrace&quot;, &quot;execinfo.h&quot;)
+      @defines &lt;&lt; &quot;HAS_EXECINFO&quot;
+    end
+  end
+
   def process
     print &quot;Using LLVM: &quot;
     case @llvm
@@ -202,6 +236,8 @@ class Configure
     else
       puts &quot;unknown value '#{@llvm}'&quot;
     end
+
+    detect_features
   end
 
   def arch
@@ -220,7 +256,12 @@ class Configure
       f.puts &quot;  :llvm_configure =&gt; '#{@llvm_configure}',&quot;
       f.puts &quot;  :arch =&gt; '#{arch()}',&quot;
       f.puts &quot;  :prefix =&gt; #{@prefix.inspect},&quot;
-      f.puts &quot;  :compiler =&gt; '#{compiler}'&quot;
+      f.puts &quot;  :compiler =&gt; '#{compiler}',&quot;
+      if @defines.empty?
+        f.puts &quot;  :defines =&gt; []&quot;
+      else
+        f.puts &quot;  :defines =&gt; ['#{@defines.join(', ')}']&quot;
+      end
       f.puts &quot;}&quot;
       f.puts &quot;end&quot;
     end</diff>
      <filename>configure</filename>
    </modified>
    <modified>
      <diff>@@ -186,6 +186,10 @@ if LLVM_ENABLE
 =end
 end
 
+Rubinius::BUILD_CONFIG[:defines].each do |flag|
+  FLAGS &lt;&lt; &quot;-D#{flag}&quot;
+end
+
 BUILD_PRETASKS = []
 
 if ENV['DEV']</diff>
      <filename>rakelib/vm.rake</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@
 
 /** CONFIGURE */
 
-#ifndef OS_X_ANCIENT
+#ifdef HAS_EXECINFO
 #define USE_EXECINFO
 #endif
 </diff>
      <filename>vm/detection.hpp</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e3e230646aa1330c19727b3fde6bf38248733a6c</id>
    </parent>
  </parents>
  <author>
    <name>Evan Phoenix</name>
    <email>ephoenix@engineyard.com</email>
  </author>
  <url>http://github.com/evanphx/rubinius/commit/7310df71768b660072a7a202e0fffadf712b5a97</url>
  <id>7310df71768b660072a7a202e0fffadf712b5a97</id>
  <committed-date>2009-10-12T13:33:05-07:00</committed-date>
  <authored-date>2009-10-12T13:32:29-07:00</authored-date>
  <message>Do proper libc function detection

Detect if backtrace() is actually available</message>
  <tree>28d3a3eaae12ad05b1aa35487491caa7f86d70b0</tree>
  <committer>
    <name>Evan Phoenix</name>
    <email>ephoenix@engineyard.com</email>
  </committer>
</commit>
