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

### Notes
# .NET File Hierarchy -- based on .NET 6.0
# ${prefx}/share/dotnet
# ├── LICENSE.txt                                   # provided by `dotnet-cli`
# ├── ThirdPartyNotices.txt                         # provided by `dotnet-cli`
# ├── dotnet                                        # main executable, provided by `dotnet-cli`
# ├── host
# │   └── fxr                                       # Host FX Resolver, provided by `dotnet-runtime-{version}`
# ├── packs
# │   ├── Microsoft.AspNetCore.App.Ref              # ASP.NET Core Targeting Pack, provided by `dotnet-sdk-{version}`
# │   ├── Microsoft.NETCore.App.Host.{dotnet-rid}   # .NET AppHost Pack, provided by `dotnet-sdk-{version}`
# │   ├── Microsoft.NETCore.App.Ref                 # .NET Targeting Pack, provided by `dotnet-sdk-{version}`
# │   └── NETStandard.Library.Ref                   # .NET Standard Targeting Pack, not provided, see https://devblogs.microsoft.com/dotnet/the-future-of-net-standard/
# ├── sdk                                           # provided by `dotnet-sdk-{version}`
# ├── sdk-manifests                                 # provided by `dotnet-sdk-{version}`
# ├── shared
# │   ├── Microsoft.AspNetCore.App                  # provided by `aspnetcore-runtime-{version}`
# │   └── Microsoft.NETCore.App                     # provided by `dotnet-runtime-{version}`
# └── templates                                     # provided by `dotnet-sdk-{version}`
###

PortSystem          1.0

name                dotnet-cli
version             9.0.10
revision            0
categories          dotnet
license             MIT
maintainers         @BjarneDMat {@judaew judaew} openmaintainer

description         The .NET command-line interface (CLI) is a cross-platform toolchain \
                    for developing, building, running, and publishing .NET applications.

long_description    .NET is a free, cross-platform, open source developer platform \
                    for building many different types of applications. \
                    \
                    With .NET, you can use multiple languages, editors, and libraries \
                    to build for web, mobile, desktop, games, and IoT.\
                    \
                    This port tracks either 'current' or 'LTS' version of dotnet-cli,\
                    whichever is latest.

homepage            https://dotnet.microsoft.com/
platforms           {darwin any} {darwin >= 19}
supported_archs     x86_64 arm64

master_sites        https://builds.dotnet.microsoft.com/dotnet/Runtime/${version}/

switch ${build_arch} {
    x86_64 {
        distname            dotnet-runtime-${version}-osx-x64
        checksums           rmd160  5811152c6385d39c12e4f9501942014f442b9263 \
                            sha256  fe49ff726cbc7b113206a7e5e6856b00713ba176ef8c47bdb383c53029564b88 \
                            size    32735094
    }
    arm64 {
        distname            dotnet-runtime-${version}-osx-arm64
        checksums           rmd160  009fea301c315a51af1384d3aa443d4ca941172f \
                            sha256  635b3495d58bfa91b5d3d489e56864ed14ccea2d87b3c6312905857d35fb5eaf \
                            size    30787420
    }
    default {
        known_fail yes
        pre-fetch {
            ui_error "${subport} @ ${version} only supported for architectures ${supported_archs}"
            return -code error "Unsupported architecture: ${build_arch}"
        }
    }
}

worksrcdir          ${name}-${version}
extract.mkdir       yes

use_configure       no

build {}

destroot {
    set dotnet_home ${prefix}/share/dotnet
    set target ${destroot}${dotnet_home}

    # Create the target directory
    xinstall -d ${target}

    # Copy over the needed elements of our directory tree
    move ${worksrcpath}/dotnet \
         ${worksrcpath}/ThirdPartyNotices.txt \
         ${worksrcpath}/LICENSE.txt \
         ${target}

    # Symlink dotnet into the bin directory
    ln -s ${dotnet_home}/dotnet ${destroot}${prefix}/bin
}

set major_ver       [join [lrange [split ${version} .] 0 1] .]
livecheck.type      regex
livecheck.url       https://dotnet.microsoft.com/download/dotnet/${major_ver}
livecheck.regex     ".NET Runtime (\\d+(?:\\.\\d+)*)"
