# -*- 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 112633 2013-10-28 15:53:35Z snc@macports.org $

PortSystem          1.0

name                smlnj
version             110.75
revision            1
categories          lang ml
license             BSD
maintainers         bfulgham
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/
platforms           darwin

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

distfiles
checksums

# Files needed for basic distribution.
set srcs [list \
    ckit.tgz 0dbca80174f969a549d85ef3e15a4a8ecce7ed22 \
    cml.tgz 8938aa0685453c16f57bae23e96ed23b1409f419 \
    cm.tgz a4310413102c5649ed43d92962ffa307ebec4a39 \
    compiler.tgz efd03a1cc84104c22776f56dca67e0ae5e9145e8 \
    config.tgz 527cb179b48abcf1463089d168b171fd05eb814d \
    eXene.tgz f8608de797634faaad632fbdfd43838c4de85e42 \
    heap2asm.tgz 49c81c4343db2095fe7c28ae5ef40086d225421c \
    ml-burg.tgz 202f62c604e6d11b0ebed82ce78210a8e5224a9d \
    ml-lex.tgz 6557d928f85b28938d4c299925835a6d5eb1e68b \
    ml-lpt.tgz d0b68f304a5e29173a9599a3959c12e84ea479ee \
    MLRISC.tgz 041b6463d98d0effa0afc457fc5b09e74f081b85 \
    ml-yacc.tgz 1bec52fbc6557dcd7d4363a1ae13be540bfc89a5 \
    nlffi.tgz b881390f58df7bbc5d84c45eec20af7fcfbfa40c \
    pgraph.tgz 7b6425de5ca1648caf230dea5e8db34f90b481c9 \
    runtime.tgz dd81ce2963ca0ea4b1e92b22c7587d5ae64783f8 \
    smlnj-c.tgz adbc3874f8715d53bc1f032047c3289cff0af8e9 \
    smlnj-lib.tgz 33f4d3a8dc653cd015ed15a27776dd0e3f2fbb04 \
    system.tgz 0f7536bbdcd6d1584f4dcbf3b30a553d98fb0cb1 \
    trace-debug-profile.tgz c828e9d2728171a5d087a41fcbb923ac460a9d50 \
]

foreach {tarball checksum} $srcs {
    distfiles-append $tarball
    checksums-append $tarball sha1 $checksum
}


# Platform-specific boot code (omitted: sparc-unix, x86-win32)
platform powerpc {
    distfiles-append boot.ppc-unix.tgz
    checksums-append boot.ppc-unix.tgz sha1 815447275d6321f85b6c97e84aa223f6d710b516
}
platform i386 {
    distfiles-append boot.x86-unix.tgz
    checksums-append boot.x86-unix.tgz sha1 0e459e33f54811750a42311a22bc4572ab16ebcb
}

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

### patch ###
patchfiles          patch-config__install.sh-correct-compiler.diff patch-config-_arch-n-opsys.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}|" ${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 eXene|request eXene|" \
        ${worksrcpath}/config/targets
    reinplace "s|#request mlrisc-tools|request mlrisc-tools|" \
        ${worksrcpath}/config/targets
    reinplace "s|#request heap2asm |request heap2asm|" \
        ${worksrcpath}/config/targets
}

### build ###
build.env           URLGETTER=curl
build.cmd           ${worksrcpath}/config/install.sh
build.target

### 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 555 ${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}
        }
    }
}
