# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 88161 2011-12-21 06:28:32Z bfulgham@macports.org $

PortSystem      1.0

name            erlang
version         R15B
revision        1
categories      lang erlang
maintainers     bfulgham
platforms       darwin
license         MPL
description     The Erlang Programming Language
long_description                                                        \
                Erlang is a programming language designed at the        \
                Ericsson Computer Science Laboratory. Open-source       \
                Erlang is being released to help encourage the spread   \
                of Erlang outside Ericsson.                             \
                                                                        \
                We are releasing free of charge:                        \
                    The entire source code of the current Erlang        \
                    system.                                             \
                    Extensive libraries of code for building robust     \
                    fault-tolerant distributed applications.            \
                    All with documentation.                             \
                                                                        \
                All the above software has been battle tested in a      \
                number of Ericsson products, for example the new        \
                Ericsson ATM switch.

homepage        http://www.erlang.org/
master_sites    http://www.erlang.org/download/ \
                http://www.erlang.org/download/patches/:patches
# The following line works around Erlang's stealth upgrade of the HTML tarball
dist_subdir     ${name}/${version}_1

# Parallel build doesn't work as per R13B01
use_parallel_build  no

universal_variant   no

distfiles       otp_src_${version}${extract.suffix}                    \
                otp_doc_man_${version}${extract.suffix}                \
                otp_doc_html_${version}${extract.suffix}

checksums           otp_src_R15B.tar.gz \
                    rmd160  022ed91978e85f5a446a90825aa686dd608061a9 \
                    sha256  5bc34fc34fc890f84bae7ff1f7c81fbec2c9aa28a0ef51a57d7a8192204d8aa2 \
                    otp_doc_man_R15B.tar.gz \
                    rmd160  ba9352d78462a3ec3461ea955ae46b96cad95400 \
                    sha256  1839cc4cab3120401989e0e1d7ad6872a59e2fd9d3cd82f05ca8c4ebef18eb6b \
                    otp_doc_html_R15B.tar.gz \
                    rmd160  79606286c3708a56dbc9e54efb60f184fe36c809 \
                    sha256  40504ad983b450a2c6f7611b3be88ebd6349079764520cca050e9c8f6e79dc93

pre-patch       { file rename ${workpath}/otp_src_${version} ${workpath}/${name}-${version} }

# http://www.erlang.org/pipermail/erlang-bugs/2009-January/001171.html
patchfiles      patch-toolbar.erl.diff \
                patch-erts_emulator_Makefile.in.diff \
                patch-erts_configure.diff \
                patch-disable_wx.diff

configure.args  --prefix=${prefix}      \
                --enable-kernel-poll            \
                --enable-threads                \
                --enable-dynamic-ssl-lib        \
                --enable-smp-support            \
                --enable-hipe                   \
                --without-ssl                   \
                --without-odbc

depends_build   port:gawk port:perl5
# ${prefix}/lib/erlang/erts-5.8.4/bin/beam.smp links with ncurses
depends_lib     port:ncurses

# Erlang seems to have an on-again/off-again relationship with Clang.
# As of XCode 4.2, it's off again.
if {${configure.compiler} == "clang"} { 
    configure.compiler llvm-gcc-4.2 
} 

post-destroot   {
        system "tar -C ${destroot}${prefix}/lib/erlang -zxvf ${distpath}/otp_doc_html_${version}${extract.suffix}"
        system "tar -C ${destroot}${prefix}/lib/erlang -zxvf ${distpath}/otp_doc_man_${version}${extract.suffix}"
 
        set erts_dir   erts-5.9
        set erl_interface_dir   erl_interface-3.7.6
        set wx_dir wx-0.99.1

        reinplace s|${destroot}|| ${destroot}${prefix}/lib/erlang/bin/erl
        reinplace s|${destroot}|| ${destroot}${prefix}/lib/erlang/bin/start
        reinplace s|${destroot}|| ${destroot}${prefix}/lib/erlang/${erts_dir}/bin/erl
        reinplace s|${destroot}|| ${destroot}${prefix}/lib/erlang/${erts_dir}/bin/start

        foreach x {dialyzer ear ecc elink epmd erl erlc escript run_erl start to_erl typer} { file delete -force ${destroot}${prefix}/bin/${x} }
        foreach x {dialyzer erl erlc escript run_erl start to_erl typer} { system "ln -s ../lib/erlang/bin/${x} ${destroot}${prefix}/bin/${x}" }

        file delete -force ${destroot}${prefix}/lib/erlang/bin/epmd
        system "ln -s ../${erts_dir}/bin/epmd ${destroot}${prefix}/lib/erlang/bin/epmd"
        system "ln -s ../lib/erlang/lib/${erl_interface_dir}/bin/erl_call ${destroot}${prefix}/bin/erl_call"
}

platform darwin 10 {
    patchfiles-delete       patch-lib_ssl_c_src_esock_openssl.c
    
    # 10.6 (and 10.6.1) has a bad bug related to using dlopen in a thread.
    # rdar://7209349 - http://www.openradar.appspot.com/7209349
    # This is a workaround.
    patchfiles-append   patch-erts_emulator_sys_unix_ddll.c.diff
    configure.ldflags-append -framework CoreFoundation
}

platform darwin 11 {
    #patchfiles-delete       patch-lib_ssl_c_src_esock_openssl.c
    
    # 10.6 (and 10.6.1) has a bad bug related to using dlopen in a thread.
    # rdar://7209349 - http://www.openradar.appspot.com/7209349
    # This is a workaround.
    #patchfiles-append   patch-erts_emulator_sys_unix_ddll.c.diff
    configure.ldflags-append -framework CoreFoundation
}

platform macosx {
    if {[variant_isset wxwidgets]} {
        # wxMac is 32-bit only
        supported_archs i386 ppc
    }
}

platform darwin {
    if {${configure.build_arch} == "x86_64" || ${configure.build_arch} == "ppc64"} {
        if {[variant_isset wxwidgets]} {
            configure.args-append --disable-darwin-64-bit
            if {${configure.build_arch} == "x86_64"} {
                configure.build_arch i386
            } elseif {${configure.build_arch} == "ppc"} {
                configure.build_arch ppc
            }
        } else {
            configure.args-append --enable-darwin-64bit
        }
    }
}

default_variants   +ssl

variant wxwidgets description {Build wxWidgets support} {
        patchfiles-delete        patch-disable_wx.diff
        patchfiles-append        patch-lib_wx_configure.in \
                                 patch-lib_wx_configure
        depends_lib-append       port:wxWidgets
        depends_run-append       port:tk
}

variant ssl description {Build SSL support} {
        configure.args-delete    --without-ssl
        configure.args-append    --with-ssl=${prefix}
        configure.ldflags-append -lz
        depends_lib-append     port:openssl
}

variant nohipe description {Disable HiPE (native-code bytecode compiler)}   {
        configure.args-delete   --enable-hipe
}

variant odbc description {Build ODBC support} {
    depends_lib-append             port:unixODBC
    configure.args-delete   --without-odbc
    configure.args-append   --with-odbc=${prefix}
}

# Livecheck
livecheck.type     regex
livecheck.version  ${version}
livecheck.url      ${homepage}download/
livecheck.regex    "otp_src_(R\[0-9\]+\[AB\]\[0-9\]*(-\[0-9\])?)\\.tar\\.gz"
