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

name                smlnj
version             110.99.9
categories          lang ml
license             BSD
maintainers         {toby @tobypeterson} openmaintainer
description         Standard ML of New Jersey
long_description \
    Standard ML of New Jersey (abbreviated SML/NJ) is \
    a compiler for the Standard ML '97 programming language \
    with associated libraries, tools, and documentation. \
    SML/NJ is free, open source software.
homepage            http://www.smlnj.org

master_sites        http://smlnj.cs.uchicago.edu/dist/working/${version}/
dist_subdir         ${name}/${version}_${revision}

supported_archs     x86_64 i386 ppc
universal_variant   no

distfiles
checksums

# Files needed for basic distribution.
set srcs [list \
    doc.tgz                 73a645a59545438733e5abfc4de4902553a683dd17b8445cadb6f93c5cdd12e6 8bbfd3bdf6420cbe49779fde6dd433ba8c528c6f 2518075 \
    boot.amd64-unix.tgz     2b4c23bb4e49be040043ab70a3df8e92c26ffe1cba652ed80348cd3fe2d19c63 ff3cc1641a75007a3594ce9ecbfdb1194d4a9ef5 6022171 \
    boot.ppc-unix.tgz       c9383de0c5bd794925d6f7e23da389dafc2c25659cf193b375ff2d1535274a8e 217d26b8ebc4711bcc21fd48f36095cc6146f3e6 5888134 \
    boot.x86-unix.tgz       207bfdd92f137be47933545cc1f330e78f01dc76c293657971d02f589faeb1d9 2e15cee3acc6d8d8860b9fc3671e46595abe4a3c 5972700 \
    config.tgz              bf479ba518652fc193ac0954e46c72c5356a33c6980f9fcb6bcf6e55c7731418 f1e6b8a3f02d2a43b6e2cc74235c3a060c7100ea 23345   \
    cm.tgz                  3ae7ebec93ec649b3861cbf383b977435d26bc0e1b1c1427c08da66c9ab8ddbf a2cc50cce9c72807150ab08d91e8401d8893e345 220315  \
    compiler.tgz            b3e4c2a14201076a195020fdb94f9d975a004fc0663611124307cd70d5f36796 c7cfb8e2010087212baa61dde0c18e4a1543cb12 895788  \
    runtime.tgz             216e0193a193ae2e59296d27c42e61a3aa7a16ddda936d3a06a2b9459276b792 9ed12ed7959f1e9807c618add4d81a24ef22f946 338624  \
    system.tgz              9a0ebd3c4ddcf77d83ee1557fbf8a3a1347c1c95e413e99fa6d5a8359a57ab56 c508e50a514186729dac1c328a8ca6b64440d96b 320547  \
    MLRISC.tgz              d94df765eadaa9ec98dcabe1d8dbb29975a8d34152ce228f3deffa7d3b5f7560 63bff0f3efd14097931f3bcb49f2a7919c63d238 1457377 \
    smlnj-lib.tgz           ebc9d6db916d4b998293dd4024760087964fd8b34bf39e7aa4f927c401fa34aa 9b00c9ec6dbbaa3e63ed96ad66a9472bcfc7e5ce 676823  \
    old-basis.tgz           b01c005f9d14662af84c6880018476d80f2d5e48ac37ca3a906886b8c5f1c3fb 30fdb8206b4dca2d4f120a7524d4a4aa393d20ea 1364    \
    ckit.tgz                1586fa202aa1f29a160dec09ea58710a52b74b615a603fb2cac3618301d55d9a 6bfb57e6bc68213c467b13d8d0e1e12b3ddbee79 200766  \
    nlffi.tgz               29ccf8d3c1b1c8614f87e0b7c6ee5b2f6c6ec78cf632163f164e8b71bd86e0c1 ede256a2e23910134fe04f6e981b2b295cb59db1 74686   \
    cml.tgz                 efeafaddc4307b602e5d13ecf76c2d522124c5e40341d9049f9f912bc8f67aee 0ddec2c30edf029b3ec02c7ea89b3830f110482b 104036  \
    eXene.tgz               8c4c8d7823cfd3a50b53c7d66b1c1f6185477f0443121eb74b3c308508057e2b effcb32a3440703efb5b6dc0100b1f1c638c96b1 714449  \
    ml-lpt.tgz              41b13bb84c4d139bc3743c4eabfc9b1965bc60ef771479e6c8a381e159617f98 9c91ed25561c397c47da3ec5fb2d27f9d998f949 267352  \
    ml-lex.tgz              25b1379581fb996a732cd591d032d388338e5d1d8f95c4e187a2265b210ef686 99cf9f818bb4f76340359de167bbdb0e47415aec 28032   \
    ml-yacc.tgz             103e26e6540f3789de77f1e99cf31550682c9ea22c3fc1f06f1251a8d5d26330 0a38b15e40e6c9721edfcf8ce7ee667036fcd91d 101368  \
    ml-burg.tgz             f9a8a1db2b2794f6af0e2bc37878a7cf93ca3f169727c5f0166ed36140a3398b f0bcc849bf4d160f416bf598c0b0e8ae756c3798 40291   \
    pgraph.tgz              7be4fa408e89ef3559e9cdde6fc278058754ed0b6ba187695c5c5d5400d1791f 830187757c775088167358fa8a93d3e5b60a3263 5367    \
    trace-debug-profile.tgz af45f71fed108c4004088ec7135dbb66cfe382e71ed9a9929ffaa5f69bf4e85f 69d842de337ea5f58e4975c082a53ddf60d4e723 3888    \
    heap2asm.tgz            1e221737c6cd6755ad4156080b3de354aa46212a531dc2304b02814c5f036f3e 79440430674339b9372ff43d557214a9f053d267 1719    \
    smlnj-c.tgz             2168c85652aeab0ddeab339222d24fef956a960a15601aeedb2bad51ee05f054 d50b95895acfc28d30166128b9c1d268b827aa04 10587   \
    asdl.tgz                394056b7d1bdb94c279e2f052571cd53c12c3d12f154cdb7cb7b0589a569e3dd 9741430bb8256f753b751b2d28dbe6c23c7bbaa4 241685  \
]

foreach {tarball sha256 rmd160 size} $srcs {
    distfiles-append $tarball
    checksums-append $tarball sha256 $sha256 rmd160 $rmd160 size $size
}

### extract ###
extract.mkdir       yes
extract.only        config.tgz

### patch ###
patchfiles          patch-config__install.sh-correct-compiler.diff

post-patch {
    reinplace "s|@CC@|${configure.cc}|" ${worksrcpath}/config/install.sh
    reinplace "s|@CPP@|${configure.cc}|" ${worksrcpath}/config/install.sh
    reinplace "s|@CFLAGS@|${configure.cflags} ${configure.cc_archflags}|" ${worksrcpath}/config/install.sh
    reinplace "s|@LDFLAGS@|${configure.ldflags}|" ${worksrcpath}/config/install.sh
}

### configure ###
configure {
    reinplace "s|SRCARCHIVEURL=.*|SRCARCHIVEURL=file://${distpath}|" \
        ${worksrcpath}/config/srcarchiveurl
    reinplace "s|#request src-smlnj|request src-smlnj|" \
        ${worksrcpath}/config/targets
    reinplace "s|#request pgraph-util|request pgraph-util|" \
        ${worksrcpath}/config/targets
    reinplace "s|#request eXene|request eXene|" \
        ${worksrcpath}/config/targets
    reinplace "s|#request mlrisc-tools|request mlrisc-tools|" \
        ${worksrcpath}/config/targets
    reinplace "s|#request nowhere|request nowhere|" \
        ${worksrcpath}/config/targets
    reinplace "s|#  request heap2asm|  request heap2asm|" \
        ${worksrcpath}/config/targets
}

# error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ml_val_t’
configure.cflags-append -std=c99

### build ###
build.env           URLGETTER=curl
build.cmd           ${worksrcpath}/config/install.sh
build.target
if {${configure.build_arch} eq "x86_64"} {
    build.args-append   -default 64
}

### destroot ###
destroot {
    set smlnj_home ${prefix}/share/smlnj

    file mkdir ${destroot}${smlnj_home}
    file copy ${worksrcpath}/bin ${destroot}${smlnj_home}
    file copy ${worksrcpath}/lib ${destroot}${smlnj_home}

    xinstall -m 755 ${filespath}/sml.sh ${destroot}${prefix}/bin/sml
    reinplace "s|__SMLNJ_HOME__|${smlnj_home}|g" \
        ${destroot}${prefix}/bin/sml

    foreach prog [glob -directory ${worksrcpath}/bin *] {
        set progname [file tail $prog]
        if {![string equal $progname sml]} {
            ln -s sml ${destroot}${prefix}/bin/${progname}
        }
    }
}

livecheck.type      regex
livecheck.regex     {/working/(1[0-9.]+)/}
