A journey to find those pieces of software or technology that facilitate productive and maintainable software development

Showing posts with label wxErlang. Show all posts
Showing posts with label wxErlang. Show all posts

Thursday, November 11, 2010

HOWTO: Install Erlang/OTP R14B with Homebrew on Snow Leopard with wxErlang Support

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

SyntaxHighlighter