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

name                    mono
# please update msbuild when updating mono
version                 6.12.0.182
revision                1
epoch                   1
categories              devel lang mono
platforms               darwin
license                 {GPL-2 LGPL-2 MIT}
maintainers             {mcalhoun @MarcusCalhoun-Lopez} openmaintainer
description             Implementation of the .NET Development Framework
long_description        Mono is an effort to create an open source implementation of the .NET \
                        Development Framework including a C# compiler.

homepage                https://www.mono-project.com/
master_sites            https://download.mono-project.com/sources/mono/
use_xz                  yes
universal_variant       no

checksums               rmd160  917021fc3fd08cad611d46aa7a9c19a19a64d094 \
                        sha256  57366a6ab4f3b5ecf111d48548031615b3a100db87c679fc006e8c8a4efd9424 \
                        size    303230932

patchfiles-append       patch-aot-compiler.c.diff \
                        dynamic_lookup-11.patch \
                        patch-xcode_14.diff

# autoreconf is needed just for the arm64 until upstream fixes the tooling
use_autoreconf          yes
autoreconf.args         -fvi

if {!${configure.ccache}} {
    patchfiles-append   patch-no_ccache.diff
}

depends_build-append    path:bin/cmake:cmake \
                        port:ninja \
                        port:pkgconfig \
                        bin:perl:perl5 \
                        port:cctools \
                        port:python311

depends_lib-append      port:zlib \
                        port:libiconv \
                        port:gettext \
                        port:kerberos5

configure.args          --enable-nls \
                        --enable-dtrace=no \
                        --with-sigaltstack=no \
                        --with-libgdiplus=${prefix}/lib/libgdiplus.dylib

test.run                yes
test.target             check

compiler.cxx_standard   2011

configure.python        ${prefix}/bin/python3.11

# avoid conflict with port brotli
configure.cppflags-delete -I${prefix}/include
configure.ldflags-delete  -L${prefix}/lib

post-patch {
    if {${os.major} < 9} {
        reinplace "s:MAC_OS_X_VERSION_10_5:1050:g" \
            ${worksrcpath}/libgc/darwin_stop_world.c \
            ${worksrcpath}/mono/utils/mono-sigcontext.h

        reinplace "s/arch_state->__/arch_state->/g" \
            ${worksrcpath}/mono/utils/mach-support-x86.c
        reinplace "s/struct __darwin_mcontext32/struct mcontext/g" \
            ${worksrcpath}/mono/utils/mach-support-x86.c
        reinplace "s/ctx->__/ctx->/g" \
            ${worksrcpath}/mono/utils/mach-support-x86.c
    }

    # ensure we are UsingTheRightCompiler (https://trac.macports.org/wiki/UsingTheRightCompiler)
    reinplace "s:__MACPORTS_CC__:${configure.cc}:g" \
        ${worksrcpath}/mono/mini/aot-compiler.c
}

post-destroot {
    set docdir ${prefix}/share/doc/${name}

    xinstall -d ${destroot}${docdir}
    xinstall -m 0644 -W ${worksrcpath} COPYING.LIB NEWS README.md \
        ${destroot}${docdir}
}

livecheck.url           https://www.mono-project.com/download/stable/
livecheck.regex         "Stable \\((\\d+(?:\\.\\d+)+)\\)"