Skip to content

Instantly share code, notes, and snippets.

@jschoolcraft
Forked from ryanwood/postgresql.rb
Created April 11, 2012 20:04
Show Gist options
  • Save jschoolcraft/2362062 to your computer and use it in GitHub Desktop.
Save jschoolcraft/2362062 to your computer and use it in GitHub Desktop.

Revisions

  1. @ryanwood ryanwood revised this gist Dec 30, 2011. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion postgresql.rb
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    require 'formula'
    require 'hardware'

    class Postgresql <Formula
    class Postgresql < Formula
    homepage 'http://www.postgresql.org/'
    url 'http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2'
    md5 'fcc3daaf2292fa6bf1185ec45e512db6'
  2. @kbrock kbrock renamed this gist Feb 15, 2011. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. @kbrock kbrock created this gist Feb 15, 2011.
    162 changes: 162 additions & 0 deletions postgres.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,162 @@
    require 'formula'
    require 'hardware'

    class Postgresql <Formula
    homepage 'http://www.postgresql.org/'
    url 'http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2'
    md5 'fcc3daaf2292fa6bf1185ec45e512db6'

    depends_on 'readline'
    depends_on 'libxml2' if MACOS_VERSION < 10.6 # Leopard libxml is too old
    depends_on 'ossp-uuid'

    def options
    [
    ['--no-python', 'Build without Python support.'],
    ['--no-perl', 'Build without Perl support.']
    ]
    end

    skip_clean :all

    def install
    ENV.libxml2 if MACOS_VERSION >= 10.6

    args = ["--disable-debug",
    "--prefix=#{prefix}",
    "--enable-thread-safety",
    "--with-bonjour",
    "--with-gssapi",
    "--with-krb5",
    "--with-openssl",
    "--with-libxml", "--with-libxslt"]

    args << "--with-python" unless ARGV.include? '--no-python'
    args << "--with-perl" unless ARGV.include? '--no-perl'

    args << "--with-ossp-uuid"
    ENV.append 'CFLAGS', `uuid-config --cflags`.strip
    ENV.append 'LDFLAGS', `uuid-config --ldflags`.strip
    ENV.append 'LIBS', `uuid-config --libs`.strip

    if snow_leopard_64? and not ARGV.include? '--no-python'
    args << "ARCHFLAGS='-arch x86_64'"
    check_python_arch
    end

    # Fails on Core Duo with O4 and O3
    ENV.O2 if Hardware.intel_family == :core

    system "./configure", *args
    system "make install"

    contrib_directories = %w[ adminpack dblink fuzzystrmatch lo uuid-ossp pg_buffercache pg_trgm
    pgcrypto tsearch2 vacuumlo xml2 intarray ]
    #contrib_directories = Dir.glob("contrib/*").select{ |path| File.directory?(path) } - ['contrib/start-scripts']

    puts "----- installing contribs"
    contrib_directories.each do |contrib_directory|
    puts "----- installing #{contrib_directory}"
    system "cd contrib/#{contrib_directory} ; make install"
    end

    #system "mkdir #{prefix}/share/contrib"
    #system "cp contrib/*/*.sql #{prefix}/share/contrib"

    (prefix+'org.postgresql.postgres.plist').write startup_plist
    end

    def check_python_arch
    # On 64-bit systems, we need to look for a 32-bit Framework Python.
    # The configure script prefers this Python version, and if it doesn't
    # have 64-bit support then linking will fail.
    framework_python = Pathname.new "/Library/Frameworks/Python.framework/Versions/Current/Python"
    return unless framework_python.exist?
    unless (archs_for_command framework_python).include? :x86_64
    opoo "Detected a framework Python that does not have 64-bit support in:"
    puts <<-EOS.undent
    #{framework_python}
    The configure script seems to prefer this version of Python over any others,
    so you may experience linker problems as described in:
    http://osdir.com/ml/pgsql-general/2009-09/msg00160.html
    To fix this issue, you may need to either delete the version of Python
    shown above, or move it out of the way before brewing PostgreSQL.
    Note that a framework Python in /Library/Frameworks/Python.framework is
    the "MacPython" verison, and not the system-provided version which is in:
    /System/Library/Frameworks/Python.framework
    EOS
    end
    end

    def caveats
    s = <<-EOS
    To build plpython against a specific Python, set PYTHON prior to brewing:
    PYTHON=/usr/local/bin/python brew install postgresql
    See:
    http://www.postgresql.org/docs/8.4/static/install-procedure.html
    If this is your first install, create a database with:
    initdb #{var}/postgres
    If this is your first install, automatically load on login with:
    cp #{prefix}/org.postgresql.postgres.plist ~/Library/LaunchAgents
    launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist
    If this is an upgrade and you already have the org.postgresql.postgres.plist loaded:
    launchctl unload -w ~/Library/LaunchAgents/org.postgresql.postgres.plist
    cp #{prefix}/org.postgresql.postgres.plist ~/Library/LaunchAgents
    launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist
    Or start manually with:
    pg_ctl -D #{var}/postgres -l #{var}/postgres/server.log start
    And stop with:
    pg_ctl -D #{var}/postgres stop -s -m fast
    EOS

    if snow_leopard_64? then
    s << <<-EOS
    If you want to install the postgres gem, including ARCHFLAGS is recommended:
    env ARCHFLAGS="-arch x86_64" gem install postgres
    To install gems without sudo, see the Homebrew wiki.
    EOS
    end

    return s
    end

    def startup_plist
    return <<-EOPLIST
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>org.postgresql.postgres</string>
    <key>ProgramArguments</key>
    <array>
    <string>#{bin}/postgres</string>
    <string>-D</string>
    <string>#{var}/postgres</string>
    <string>-r</string>
    <string>#{var}/postgres/server.log</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>UserName</key>
    <string>#{`whoami`.chomp}</string>
    <key>WorkingDirectory</key>
    <string>#{HOMEBREW_PREFIX}</string>
    </dict>
    </plist>
    EOPLIST
    end
    end