HOWTO: Install Erlang R14B on Snow Leopard with wx

UPDATE:Hopefully this fix won't be necessary for long. I have submitted a Pull Request for the Homebrew team's consideration.

I have installed 32-bit Erlang/OTP R14B with wxErlang support successfully with modified Homebrew Formulae. It looks like it works perfectly fine so long as I don't close the Attach Process window when the debugger isn't ready for me to do that :)

I modified /usr/local/Library/Formula/wxmac.rb to enable opengl, unicode, gnomeprint and graphic_ctx and disable shared libs and install dev headers and libs resulting in:

require 'formula'

class Wxmac <Formula
  url 'http://downloads.sourceforge.net/project/wxwindows/2.8.11/wxMac-2.8.11.tar.bz2'
  homepage 'http://www.wxwidgets.org'
  md5 '8d84bfdc43838e2d2f75031f62d1864f'

  def caveats; <<-EOS.undent
    wxWidgets 2.8.x builds 32-bit only, so you probably won't be able to use it
    for other Homebrew-installed softare on Snow Leopard (like Erlang).
    EOS
  end

  def install
    # Force i386
    %w{ CFLAGS CXXFLAGS LDFLAGS OBJCFLAGS OBJCXXFLAGS }.each do |compiler_flag|
      ENV.remove compiler_flag, "-arch x86_64"
      ENV.append compiler_flag, "-arch i386"
    end

    system "./configure", "--prefix=#{prefix}", "--disable-debug",
                "--enable-unicode", "--disable-dependency-tracking",
                "--with-opengl", "--enable-unicode", "--enable-gnomeprint",
                "--enable-graphics_ctx", "--disable-shared"
    system "make && make install"
    system "cd contrib/src/stc/ && make && make install"
  end
end

I modified /usr/local/Library/Formula/erlang.rb to depend on wxmac, forced it to build in 32-bit and took out the wx skip file resulting in:

require 'formula'

class ErlangManuals <Formula
  url 'http://erlang.org/download/otp_doc_man_R14B.tar.gz'
  md5 '011530a24fbcc194be9bd01f779325a2'
end

class ErlangHeadManuals <Formula
  url 'http://erlang.org/download/otp_doc_man_R14B.tar.gz'
  md5 '011530a24fbcc194be9bd01f779325a2'
end

class Erlang <Formula
  # Download from GitHub. Much faster than official tarball.
  url "git://github.com/erlang/otp.git", :tag => "OTP_R14B"
  version 'R14B'
  homepage 'http://www.erlang.org'

  head "git://github.com/erlang/otp.git", :branch => "dev"

  depends_on 'wxmac'

  # We can't strip the beam executables or any plugins, there isn't really
  # anything else worth stripping and it takes a really, long time to run
  # `file` over everything in lib because there is almost 4000 files (and
  # really erlang guys! what's with that?! Most of them should be in share/erlang!)
  # may as well skip bin too, everything is just shell scripts
  skip_clean ['lib', 'bin']

  def options
    [
      ['--disable-hipe', "Disable building hipe; fails on various OS X systems."],
      ['--time', '"brew test --time" to include a time-consuming test.']
    ]
  end

  def install
    ENV.deparallelize
    fails_with_llvm "See http://github.com/mxcl/homebrew/issues/issue/120", :build => 2326

    # If building from GitHub, this step is required (but not for tarball downloads.)
    system "./otp_build autoconf" if File.exist? "otp_build"

    args = ["--disable-debug",
            "--prefix=#{prefix}",
            "--enable-kernel-poll",
            "--enable-threads",
            "--enable-dynamic-ssl-lib",
            "--enable-smp-support"]

    unless ARGV.include? '--disable-hipe'
      # HIPE doesn't strike me as that reliable on OS X
      # http://syntatic.wordpress.com/2008/06/12/macports-erlang-bus-error-due-to-mac-os-x-1053-update/
      # http://www.erlang.org/pipermail/erlang-patches/2008-September/000293.html
      args << '--enable-hipe'
    end

    #args << "--enable-darwin-64bit" if snow_leopard_64?

    # Force i386
    %w{ CFLAGS CXXFLAGS LDFLAGS OBJCFLAGS OBJCXXFLAGS }.each do |compiler_flag|
      ENV.remove compiler_flag, "-arch x86_64"
      ENV.append compiler_flag, "-arch i386"
    end

    system "./configure", *args
    #system "touch lib/wx/SKIP" if MACOS_VERSION >= 10.6
    system "make"
    system "make install"

    manuals = ARGV.build_head? ? ErlangHeadManuals : ErlangManuals
    manuals.new.brew { man.install Dir['man/*'] }
  end

  def test
    `erl -noshell -eval 'crypto:start().' -s init stop`

    # This test takes some time to run, but per bug #120 should finish in
    # "less than 20 minutes". It takes a few minutes on a Mac Pro (2009).
    if ARGV.include? "--time"
      `dialyzer --build_plt -r #{lib}/erlang/lib/kernel-2.14.1/ebin/`
    end
  end
end