# -*- 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                hugs98
version             plus-Sep2006
revision            3
categories          lang haskell
maintainers         {@barracuda156 gmail.com:vital.had} openmaintainer
license             BSD
description         The HUGS Haskell Interpreter
long_description    Hugs 98 is a functional programming system based \
                    on Haskell 98, the de facto standard for non-strict \
                    functional programming languages. Hugs 98 provides \
                    an almost complete implementation of Haskell 98.

homepage            https://www.haskell.org/hugs
master_sites        https://cvs.haskell.org/Hugs/downloads/2006-09

checksums           rmd160  4a7e744360a29fbf94f5ac86ea559e80f12205a5 \
                    sha256  aafaca9ca544572ebef70bbe86b5eb0abaa5d7c11c0b766d7db72a46b022bed5 \
                    size    5322244

depends_build-append \
                    port:autoconf \
                    port:automake \
                    port:bison \
                    port:gmake \
                    port:libtool \
                    port:pkgconfig
depends_lib-append  port:libedit \
                    port:xorg-libX11

patchfiles-append   patch-configure.ac.diff \
                    patch-O1.diff \
                    patch-gcc-inline.diff \
                    patch-GLUT.diff \
                    patch-packages.diff

# Only Apple gcc understands -no-cpp-precomp
if {${configure.compiler} ni [list gcc-4.0 gcc-4.2 apple-gcc-4.0 apple-gcc-4.2]} {
    patchfiles-append patch-no-cpp-precomp.diff
}

# https://svnweb.freebsd.org/ports/head/lang/hugs/Makefile?revision=530719&view=co&pathrev=534092
# This is untested though; on PPC -O0 breaks the build.
if {${build_arch} eq "i386"} {
    patchfiles-replace \
                    patch-O1.diff patch-O0.diff
}

if {${os.platform} eq "darwin" && ${os.major} >= 10} {
    patchfiles-append patch-HTYPE_INT.diff
    # This fixes the 'Undefined symbols: "_environ"' error
    patchfiles-append patch-environ.diff
    # This fixes the 'Undefined symbols: "renameFile_17' and 'readdir_40' errors
    patchfiles-append patch-libraries-tools-make-bootlib.diff
    # error: invalid preprocessing directive #!: #!/usr/bin/runhaskell
    # https://github.com/FranklinChen/hugs98-plus-Sep2006/commit/5ca5d8da5cc692127d0621f652d720b8863772d7
    # https://github.com/FranklinChen/hugs98-plus-Sep2006/commit/4f323b9ab1fd6c53fe48d72aad4e7fba2ce8850c
    patchfiles-append patch-cpp-cleanup.diff
}

# Build with Clang has been failing.
compiler.blacklist  *clang*

if {${os.platform} eq "darwin" && ${os.major} > 15} {
    known_fail  yes
    pre-fetch {
        ui_error "This is an old compiler not supported on modern systems. Consider GHC instead."
        return -code error "incompatible OS version"
    }
} else {
    compiler.fallback-append \
                    gcc-4.2 apple-gcc-4.2 macports-gcc-12 macports-gcc-11 macports-gcc-7 macports-gcc-6
}

use_parallel_build  no

build.cmd           ${prefix}/bin/gmake

platform darwin 10 powerpc {
    # We ought to convince Rosetta to build for the right arch
    configure.args-append   CC="${configure.cc} -arch ppc" \
                            --build=powerpc-apple-darwin${os.major}
}

livecheck.type      none
