title: gem install pg doesn't work on OSX Lion
body: <p>There are variations of this question bouncing around SO, but none of them seem to have an answer that solves my problem.</p>
  
  <p>I am running OSX Lion (10.7.3). The latest XCode is installed.</p>
  
  <p>I've installed Postgres using the Postgres.app package from postgresapp.com. </p>
  
  <p>But when I try to install the pg gem, I get a failure:</p>
  
  <pre><code>$ gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
  Building native extensions.  This could take a while...
  ERROR:  Error installing pg:
      ERROR: Failed to build gem native extension.
  
          /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
  Using config values from /Applications/Postgres.app/Contents/MacOS/bin/pg_config
  checking for libpq-fe.h... *** extconf.rb failed ***
  Could not create Makefile due to some reason, probably lack of
  necessary libraries and/or headers.  Check the mkmf.log file for more
  details.  You may need configuration options.
  
  Provided configuration options:
      --with-opt-dir
      --with-opt-include
      --without-opt-include=${opt-dir}/include
      --with-opt-lib
      --without-opt-lib=${opt-dir}/lib
      --with-make-prog
      --without-make-prog
      --srcdir=.
      --curdir
      --ruby=/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/bin/ruby
      --with-pg
      --without-pg
      --with-pg-dir
      --without-pg-dir
      --with-pg-include
      --without-pg-include=${pg-dir}/include
      --with-pg-lib
      --without-pg-lib=${pg-dir}/lib
      --with-pg-config
  /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
  You have to install development tools first.
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:506:in `try_cpp'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:970:in `block in find_header'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:280:in `postpone'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for'
      from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:969:in `find_header'
      from extconf.rb:40:in `&lt;main&gt;'
  
  
  Gem files will remain installed in /Users/disaacs/.rvm/gems/ruby-1.9.3-p125/gems/pg-0.13.2 for inspection.
  Results logged to /Users/disaacs/.rvm/gems/ruby-1.9.3-p125/gems/pg-0.13.2/ext/gem_make.out
  </code></pre>
  
  <p>The output of the <code>/Applications/Postgres.app/Contents/MacOS/bin/pg_config</code> command is:</p>
  
  <pre><code>$ /Applications/Postgres.app/Contents/MacOS/bin/pg_config
  BINDIR = /Applications/Postgres.app/Contents/MacOS/bin
  DOCDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
  HTMLDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
  INCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
  PKGINCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
  INCLUDEDIR-SERVER = /Applications/Postgres.app/Contents/MacOS/include/server
  LIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
  PKGLIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
  LOCALEDIR = /Applications/Postgres.app/Contents/MacOS/share/locale
  MANDIR = /Applications/Postgres.app/Contents/MacOS/share/man
  SHAREDIR = /Applications/Postgres.app/Contents/MacOS/share
  SYSCONFDIR = /Applications/Postgres.app/Contents/MacOS/etc
  PGXS = /Applications/Postgres.app/Contents/MacOS/lib/pgxs/src/makefiles/pgxs.mk
  CONFIGURE = '--prefix=/Users/mattt/Code/heroku/Postgres/Postgres/Vendor/postgres' '--enable-thread-safety' '--with-openssl' '--with-gssapi' '--with-bonjour' '--with-krb5' '--with-libxml' '--with-libxslt' '--with-ossp-uuid' '--with-perl' '--with-python'
  CC = gcc
  CPPFLAGS = -I/usr/include/libxml2
  CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
  CFLAGS_SL = 
  LDFLAGS = -Wl,-dead_strip_dylibs
  LDFLAGS_EX = 
  LDFLAGS_SL = 
  LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lgssapi_krb5 -lz -lreadline -lm 
  VERSION = PostgreSQL 9.1.3
  </code></pre>
  
  <p>All those setting appear to be correct, except for the CONFIGURE variable (which seems to be referring to some other computer --I have no user named mattt).</p>
  
  <p>The contents of the mkmf.log file are</p>
  
  <pre><code>"/usr/bin/gcc-4.2 -o conftest -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/x86_64-darwin10.8.0 -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby/backward -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1 -I. -I/Users/disaacs/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -I/Applications/Postgres.app/Contents/MacOS/include  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration  -fno-common -pipe conftest.c  -L. -L/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib -L/Users/disaacs/.rvm/usr/lib -L. -L/usr/local/lib -L/Applications/Postgres.app/Contents/MacOS/lib     -lruby.1.9.1  -lpthread -ldl -lobjc "
  checked program was:
  /* begin */
  1: #include "ruby.h"
  2:
  3: int main() {return 0;}
  /* end */
  </code></pre>
  
  <p>Any suggestions would be appreciated.</p>
  
  <p>I've looked at the extconf.rb file, and after some debugging I've found that it is a call to </p>
  
  <pre><code>find_header ('libpq-fe.h')
  </code></pre>
  
  <p>that is failing. Not because libpq-fe.h is not there, but because the <code>find_header</code> method itself is failing. I tried running find_header using irb, and got the same error:</p>
  
  <pre><code>$ irb
  1.9.3-p125 :001 &gt; require 'mkmf'
   =&gt; true 
  1.9.3-p125 :002 &gt; find_header 'libpq-fe.h'
  checking for libpq-fe.h... RuntimeError: The compiler failed to generate an executable file.
  You have to install development tools first.
  </code></pre>
  
  <p><strong>EDIT:</strong></p>
  
  <p>Found out my computer must be even more borked than I thought. I was doing bundle install for another project, and I got a very similar failure installing the sqlite3 gem.</p>
  
  <pre><code>checking for sqlite3.h... *** extconf.rb failed ***
  </code></pre>
  
  <p>I've never had problems with the sqlite3 gem in the past.</p>