# -*- 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

PortSystem          1.0
PortGroup           legacysupport 1.1
PortGroup           wxWidgets 1.0

# strndup, TARGET_OS_OSX
legacysupport.newest_darwin_requires_legacy 10

name                erlang
version             29.0.3
revision            0

set doc_version     ${version}

categories          lang erlang
maintainers         {ciserlohn @ci42} openmaintainer
license             Apache-2

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            https://www.erlang.org
master_sites        ${homepage}/download/ \
                    https://github.com/erlang/otp/releases/download/OTP-${version}/

universal_variant   no

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

checksums           otp_src_${version}.tar.gz \
                    rmd160  52cafceecdd0478797571afa578fc93848984346 \
                    sha256  f920c660b16794bcb7270d1cbf680f7747c719650bcd6ac449508a32c2a8972a \
                    size    106612967 \
                    otp_doc_html_${doc_version}.tar.gz \
                    rmd160  d1449e432393ab8212cd59e3fd7408f3715dbf0f \
                    sha256  663c02f4fb09e3d737e176798a45b73cfc496984c5b72791d2dcb32cc431d348 \
                    size    32509524 \
                    otp_doc_man_${doc_version}.tar.gz \
                    rmd160  52267e71494d0865cdca46adb92cee3a3d4f84d1 \
                    sha256  a61c99df81a676da7aecc32e210b47ff407ac4f942230992bd81fa05366f5a0d \
                    size    1932977

worksrcdir          otp_src_${version}

configure.args      --enable-dynamic-ssl-lib \
                    --enable-smp-support     \
                    --enable-threads         \
                    --prefix=${prefix}       \
                    --without-javac          \
                    --without-odbc           \
                    --without-ssl            \
                    --without-wx

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

# Erlang seems to have an on-again/off-again relationship with Clang.
# As of Xcode 4.2, it's off again.
# GCC 4.2 also fails: https://trac.macports.org/ticket/52507
compiler.blacklist  {clang < 300} *gcc-4.*

post-destroot   {
    system "tar -C ${destroot}${prefix}/lib/erlang -zxvf [shellescape ${distpath}/otp_doc_html_${doc_version}${extract.suffix}]"
    system "tar -C ${destroot}${prefix}/lib/erlang -zxvf [shellescape ${distpath}/otp_doc_man_${doc_version}${extract.suffix}]"

    set erts_dir            [glob -tails -directory ${destroot}${prefix}/lib/erlang/lib/ erts-*]
    set erl_interface_dir   [glob -tails -directory ${destroot}${prefix}/lib/erlang/lib/ erl_interface-*]

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

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

platform darwin 10 {
    # 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
}

platform darwin {
    if {${configure.build_arch} in [list arm64 ppc64 x86_64]} {
        configure.args-append   --enable-darwin-64bit
    } else {
        # https://github.com/erlang/otp/issues/8506
        configure.args-append   --disable-darwin-64-bit \
                                --disable-year2038
    }
    # TODO: not sure about the minimum version
    if {${os.major} >= 10} {
        # also "-framework Appkit"?
        configure.ldflags-append -framework CoreFoundation
    }

    # Upstream included it but forgot to enable JIT on amd64
    patchfiles-append           patch-enable-jit-x86.diff

    # The source is designed to be broken: https://github.com/erlang/otp/issues/8370
    patchfiles-append           patch-fix-wx.diff
}

variant wx description "Build wxWidgets support" {
    wxWidgets.use               wxGTK-3.2
    depends_lib-append          port:${wxWidgets.port}
    depends_lib-append          port:libGLU
    configure.args-append       --with-wxdir=${wxWidgets.wxdir}
    configure.args-delete       --without-wx
}

variant ssl description "Build SSL support" {
    PortGroup                   openssl 1.0

    openssl.branch              3

    depends_lib-append          port:zlib
    configure.args-delete       --without-ssl
    configure.args-append       --with-ssl=[openssl::install_area]
    configure.ldflags-append    -lz
}

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

default_variants    +ssl

livecheck.type      regex
livecheck.version   ${version}
livecheck.url       ${homepage}downloads/
livecheck.regex     "otp_src_(\[0-9\]+\\.\[0-9\]+(\\.\[0-9\])?)\\.tar\\.gz"
