# -*- 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           github 1.0
PortGroup           cargo_fetch 1.0

github.setup        libkrun krunvm 0.2.7 v
github.tarball_from archive

revision            0

categories          emulators
license             Apache-2
maintainers         {jesuschapman.me:developer @JesusChapman} openmaintainer

description         Create microVMs from OCI images

long_description    {*}${description}, using libkrun and buildah. Minimal \
                    footprint, fast boot time, zero disk image maintenance \
                    and zero network configuration, with support for mapping \
                    host volumes into the guest and exposing guest ports to \
                    the host.

# Upstream only supports Hypervisor.framework on arm64 macOS.
supported_archs     arm64

checksums           ${distname}${extract.suffix} \
                    rmd160  498e197f0708cfe8840139016a43c0c4c0b669d5 \
                    sha256  1b2a54d670b09a8825a005184f7498a54535f86eb3d35850a37d4702da3121fc \
                    size    22378

depends_build-append \
                    port:asciidoctor
depends_lib-append  port:libkrun
depends_run-append  port:buildah \
                    port:libkrunfw

use_configure       no

build.args-append   PREFIX=${prefix}
destroot.args-append \
                    PREFIX=${prefix}

# - build.rs hardcodes the Homebrew lib dir for linking libkrun.
# - The Makefile assumes a plain `cargo build` output layout, while MacPorts
#   sets CARGO_BUILD_TARGET (triplet dir), as in the krunkit port.
# - On macOS krunvm re-execs itself with DYLD_LIBRARY_PATH set to the output
#   of `brew --prefix`/lib so that the libkrunfw dylib dlopened by libkrun is
#   found; point it at the MacPorts prefix instead (no Homebrew needed).
# - buildah is invoked without --storage-driver, so on macOS (always rootless)
#   its mount check rejects the empty driver; pass vfs explicitly, the only
#   driver usable on darwin.
patchfiles-append \
                    patch-Makefile.diff \
                    patch-main_rs.diff \
                    patch-utils_rs.diff

post-patch {
    reinplace "s|/opt/homebrew/lib|${prefix}/lib|" ${worksrcpath}/build.rs
    reinplace "s|@@PREFIX@@|${prefix}|g" ${worksrcpath}/src/main.rs
}

post-destroot {
    xinstall -d -m 755 ${destroot}${prefix}/share/man/man1
    foreach man [glob ${worksrcpath}/target/*/release/build/krunvm-*/out/*.1] {
        xinstall -m 644 ${man} ${destroot}${prefix}/share/man/man1/
    }
}

notes "
On macOS, krunvm requires a dedicated, case-sensitive APFS volume to store \
its images (e.g. /Volumes/krunvm). It will guide you through creating one on \
first run.
"

cargo.crates \
    anstream                      0.6.4                         2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44 \
    anstyle                       1.0.4                         7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87 \
    anstyle-parse                 0.2.2                         317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140 \
    anstyle-query                 1.0.0                         5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b \
    anstyle-wincon                3.0.1                         f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628 \
    arrayref                      0.3.6                         a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544 \
    arrayvec                      0.5.2                         23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b \
    autocfg                       1.0.1                         cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a \
    base64                        0.13.0                        904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd \
    bitflags                      2.4.0                         b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635 \
    blake2b_simd                  0.5.11                        afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587 \
    cfg-if                        0.1.10                        4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822 \
    cfg-if                        1.0.0                         baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd \
    clap                          4.4.6                         d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956 \
    clap_builder                  4.4.6                         0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45 \
    clap_derive                   4.4.2                         0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873 \
    clap_lex                      0.5.1                         cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961 \
    colorchoice                   1.0.0                         acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7 \
    confy                         0.4.0                         2913470204e9e8498a0f31f17f90a0de801ae92c8c5ac18c49af4819e6786697 \
    constant_time_eq              0.1.5                         245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc \
    crossbeam-utils               0.8.3                         e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49 \
    directories                   2.0.2                         551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c \
    dirs-sys                      0.3.5                         8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a \
    getrandom                     0.1.16                        8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce \
    heck                          0.4.1                         95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8 \
    lazy_static                   1.4.0                         e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646 \
    libc                          0.2.149                       a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b \
    memoffset                     0.9.0                         5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c \
    nix                           0.27.1                        2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053 \
    proc-macro2                   1.0.69                        134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da \
    quote                         1.0.33                        5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae \
    redox_syscall                 0.1.57                        41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce \
    redox_users                   0.3.5                         de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d \
    rust-argon2                   0.8.3                         4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb \
    serde                         1.0.124                       bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f \
    serde_derive                  1.0.124                       1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b \
    strsim                        0.10.0                        73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623 \
    syn                           1.0.64                        3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f \
    syn                           2.0.38                        e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b \
    text_io                       0.1.8                         6cb170b4f47dc48835fbc56259c12d8963e542b05a24be2e3a1f5a6c320fd2d4 \
    toml                          0.5.8                         a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa \
    unicode-ident                 1.0.12                        3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b \
    unicode-xid                   0.2.1                         f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564 \
    utf8parse                     0.2.1                         711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a \
    wasi                          0.9.0+wasi-snapshot-preview1  cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519 \
    winapi                        0.3.9                         5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419 \
    winapi-i686-pc-windows-gnu    0.4.0                         ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6 \
    winapi-x86_64-pc-windows-gnu  0.4.0                         712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f \
    windows-sys                   0.48.0                        677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9 \
    windows-targets               0.48.5                        9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c \
    windows_aarch64_gnullvm       0.48.5                        2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8 \
    windows_aarch64_msvc          0.48.5                        dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc \
    windows_i686_gnu              0.48.5                        a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e \
    windows_i686_msvc             0.48.5                        8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406 \
    windows_x86_64_gnu            0.48.5                        53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e \
    windows_x86_64_gnullvm        0.48.5                        0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc \
    windows_x86_64_msvc           0.48.5                        ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538 \
