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

github.setup        heydeer slimdeer 0.3.1 v
github.tarball_from archive
revision            0

categories          graphics
maintainers         {i0ntempest @i0ntempest} openmaintainer
license             MIT BSD IJG Apache-2
installs_libs       no

description         Image compression with automatic perceptual quality
long_description    ${github.project} compresses PNG, animated PNG and JPEG images, or \
                    converts them to WebP and AVIF. It searches for the smallest \
                    file that meets a perceptual quality target selected for \
                    each image, using SSIMULACRA2 scoring.

checksums           ${distname}${extract.suffix} \
                    rmd160  eb4edce5768682f6f6e5802ac55295c9680cdbb9 \
                    sha256  0924fb6dadd5e367f4909b697b83e3979fbb10f25449002a4f52d83d56879c23 \
                    size    79713355

# The CLI needs neither the browser's nightly/Wasm toolchain nor the benchmark tools.
# Keep the bundled codecs and patched fast-ssim2: their math, sorting and threading
# settings are part of upstream's guarantee of identical output across platforms.
build.args-append   --package ${github.project} --bin ${github.project}
universal_variant   no

# Used only to collect the licenses compiled into the native executable.
depends_build-append \
                    port:python314

post-build {
    system -W ${worksrcpath} \
        "env CARGO_HOME=[shellescape ${cargo.home}] CARGO_NET_OFFLINE=true \
        PATH=[shellescape ${prefix}/bin:/usr/bin:/bin] \
        [shellescape ${prefix}/bin/python3.14] scripts/release-notices.py \
        --target [cargo.rust_platform] --output THIRD_PARTY_LICENSES.txt"
}

test.run            yes
test.cmd            ${cargo.bin} test
test.pre_args       --release ${cargo.offline_cmd} -j${build.jobs} --target [cargo.rust_platform]
test.args           --package ${github.project}
test.target

pre-test {
    # The Rust PortGroup sets its compiler wrappers and target for build/destroot,
    # but not test. Reuse the finalized build environment, including MacPorts' CC.
    test.env        {*}${build.env}
}

destroot {
    xinstall -m 0755 \
        ${worksrcpath}/target/[cargo.rust_platform]/release/${github.project} \
        ${destroot}${prefix}/bin/
    ln -s ${github.project} ${destroot}${prefix}/bin/pngdeer

    set docdir ${destroot}${prefix}/share/doc/${name}
    xinstall -d ${docdir}
    xinstall -m 0644 -W ${worksrcpath} \
        README.md LICENSE THIRD_PARTY_LICENSES.txt ${docdir}
}

# All registry entries in the upstream Cargo.lock, including the other workspace
# members, so Cargo's workspace resolution and license metadata stay offline.
cargo.crates \
    adler2                                 2.0.1  320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa \
    aligned                                0.4.3  ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685 \
    aligned-vec                            0.6.4  dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b \
    anyhow                               1.0.104  330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470 \
    arbitrary                              1.5.0  3bc62ac97cc33321f50863d514c3bc38a453947a8f9e781137e47c7401020aed \
    archmage                              0.9.30  15785ee3576fbd41276a25f063b1e6b5bf323af9b4924632e25a8de6a3065f06 \
    archmage-macros                       0.9.30  ce7707714970d5cf476caccbae2d282000c6c14ca5aada878e722a10d8e1c153 \
    arg_enum_proc_macro                    0.3.4  0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea \
    arrayvec                               0.7.8  d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56 \
    as-slice                               0.2.1  516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516 \
    autocfg                                1.5.1  f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53 \
    av-scenechange                        0.14.1  0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394 \
    av1-grain                              0.2.5  8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8 \
    avif-serialize                         0.8.9  e7178fe5f7d460b13895ebb9dcb28a3a6216d2df2574a0806cb51b555d297f38 \
    bitflags                              2.13.2  3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06 \
    bitstream-io                          4.10.0  7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f \
    bitvec                                 1.1.1  ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837 \
    built                                  0.8.1  5c0e531d93d39c34eef561e929e8a7f86d77a5af08aac4f6d6e39976c51858e9 \
    bumpalo                               3.20.3  72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649 \
    by_address                             1.2.1  64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06 \
    bytemuck                              1.25.2  95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797 \
    bytemuck_derive                       1.12.1  6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c \
    cc                                    1.10.0  86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0 \
    cfg-if                                 1.0.5  4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600 \
    color_quant                            2.0.0  00c1c79b421ca69d94677a49b2ccf389dab3409952aed790594de8fa03b07989 \
    crc32fast                              1.5.3  0ba106e844045ddc02c20768ac4b0b7cb45f2cc2ecbd833ac9f5dacb183c2055 \
    crossbeam-channel                     0.5.17  98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1 \
    crossbeam-deque                        0.8.8  622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a \
    crossbeam-epoch                       0.9.21  dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d \
    crossbeam-utils                       0.8.23  a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6 \
    either                                1.19.0  0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be \
    enough                                 0.4.5  877362cb7b70d1c617f0cd3c67708bd58d894a86af5104018e2c10ebaee3c02f \
    equator                                0.4.2  4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc \
    equator-macro                          0.4.2  44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3 \
    equivalent                             1.0.3  00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826 \
    exoquant                               0.2.0  5048aeecde83b7455a63b44aa54da5321d6171cff2adb8a5959849e142e5e4aa \
    fdeflate                               0.3.7  1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c \
    find-msvc-tools                       0.1.15  1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48 \
    flate2                                1.1.10  6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb \
    funty                                  2.0.0  e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c \
    futures-core                          0.3.34  92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e \
    futures-task                          0.3.34  cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd \
    futures-util                          0.3.34  0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc \
    getrandom                              0.3.4  899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd \
    getrandom                              0.4.3  300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099 \
    hashbrown                             0.17.1  ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a \
    imgref                                1.12.3  6e44b0a4eaa4c82f441d50a963f2d5f05a787240aeee097597033e72accfd22f \
    indexmap                              2.14.2  cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855 \
    interpolate_name                       0.2.4  c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60 \
    itertools                             0.14.0  2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285 \
    jobserver                             0.1.35  1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3 \
    js-sys                               0.3.106  7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5 \
    libc                                 0.2.191  65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a \
    libdeflate-sys                        1.26.1  d7870e5fbd2766179a937c725fb11f4ca0ef025d982beb61bd3ce755425bd19c \
    libdeflater                           1.26.1  0cbb8285d2e2bd4b8d4155840ae81929354b4ba0d7b3c272c84761ffa2141e1f \
    libfuzzer-sys                         0.4.13  a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2 \
    libm                                  0.2.16  b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981 \
    linear-srgb                           0.6.12  fe0e61c33d85bc56dcaf27cdf48ca32b8e34af7236584eb1d8a47316c49e0be1 \
    log                                   0.4.34  f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6 \
    loop9                                  0.1.5  0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062 \
    magetypes                             0.9.30  5726fd3335b1d2814036c420a5c8d105abcc0e0b43eebb477e48f8c725fc8fb2 \
    maybe-rayon                            0.1.1  8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519 \
    memchr                                 2.8.3  cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98 \
    miniz_oxide                            0.8.9  1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316 \
    miniz_oxide                            0.9.1  b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c \
    nasm-rs                                0.3.2  706bf8a5e8c8ddb99128c3291d31bd21f4bcde17f0f4c20ec678d85c74faa149 \
    new_debug_unreachable                  1.0.6  650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086 \
    no_std_io2                             0.9.4  418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003 \
    nom                                    8.0.0  df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405 \
    noop_proc_macro                        0.3.0  0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8 \
    num-bigint                             0.4.8  c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367 \
    num-derive                             0.4.2  ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202 \
    num-integer                           0.1.47  7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b \
    num-rational                           0.4.2  f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824 \
    num-traits                            0.2.19  071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841 \
    once_cell                             1.21.4  9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50 \
    ordered-float                          5.5.0  8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0 \
    oxipng                                10.2.1  52a88e3e5c2ad82e691b219e2b45a90eb5a51d26a434c7e191563e957a48e07a \
    palette                                0.7.7  ddeed8580d347d2abf3dcf06a5f0b3dc020258338526b277847cd4248a70fc64 \
    palette_derive                         0.7.7  88537020289b719d81be994ccf1bbf4990f477e2f69ee52fe3e45f43a02e56be \
    palette_math                           0.7.7  6e6eb142958d64335fb0e345c5b9ead2ecd6fc438c307e9d7d3c4fd428dbaf12 \
    paste                                 1.0.15  57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a \
    pastey                                 0.1.1  35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec \
    pin-project-lite                      0.2.17  a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd \
    png                                   0.18.1  60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61 \
    ppv-lite86                            0.2.21  85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9 \
    proc-macro2                          1.0.107  985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9 \
    profiling                             1.0.18  3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5 \
    profiling-procmacros                  1.0.18  4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb \
    quantette                              0.6.0  ba5d37e94c17b8870a5b936001d2845a6782a22ebdb1706c84294eca777f6729 \
    quantizr                               1.4.3  b28ab4659f6754222a9e96c7a48f68dba03a620f23803c67ccd4ca7c35d55f5f \
    quick-error                            2.0.1  a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3 \
    quote                                 1.0.47  1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001 \
    r-efi                                  5.3.0  69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f \
    r-efi                                  6.0.0  f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf \
    radium                                 0.7.0  dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09 \
    rand                                  0.10.3  65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af \
    rand                                   0.9.5  b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41 \
    rand_chacha                            0.9.0  d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb \
    rand_core                             0.10.1  63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69 \
    rand_core                              0.9.5  76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c \
    rand_xoshiro                           0.8.1  662effc7698e08ea324d3acccf8d9d7f7bf79b9785e270a174ea36e56900c91d \
    rav1e                                  0.8.1  43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b \
    ravif                                 0.13.0  e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45 \
    rayon                                 1.12.0  fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d \
    rayon-core                            1.13.0  22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91 \
    ref-cast                              1.0.27  7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3 \
    ref-cast-impl                         1.0.27  92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a \
    rgb                                   0.8.53  47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4 \
    rustc-hash                             2.1.3  6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d \
    rustversion                           1.0.23  cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f \
    safe_arch                              1.2.0  42c6efa15875e6ecb39ca61fb0b0c1a40b84fac5a5ffe71eef7d1000c8eb3f5f \
    safe_unaligned_simd                    0.2.5  f9c874fb993656d484725d58fbfddb39dfcf98ebcadc1a1d09568aa6b39bafba \
    shlex                                  2.0.1  f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba \
    simd-adler32                          0.3.10  3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea \
    simd_helpers                           0.1.0  95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6 \
    slab                                  0.4.12  0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5 \
    stable_deref_trait                     1.2.1  6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596 \
    syn                                  2.0.119  872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297 \
    syn                                    3.0.9  d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b \
    tap                                    1.0.1  55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369 \
    thiserror                             2.0.21  09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e \
    thiserror-impl                        2.0.21  fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524 \
    unicode-ident                         1.0.27  a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563 \
    v_frame                                0.3.9  666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2 \
    wasip2                          1.0.4+wasi-0.2.12  b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487 \
    wasm-bindgen                         0.2.129  9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409 \
    wasm-bindgen-macro                   0.2.129  2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535 \
    wasm-bindgen-macro-support           0.2.129  6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7 \
    wasm-bindgen-rayon                     1.3.0  9a16c60a56c81e4dc3b9c43d76ba5633e1c0278211d59a9cb07d61b6cd1c6583 \
    wasm-bindgen-shared                  0.2.129  23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6 \
    wasm_sync                              0.1.2  cff360cade7fec41ff0e9d2cda57fe58258c5f16def0e21302394659e6bbb0ea \
    web-sys                              0.3.106  88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4 \
    whereat                                0.1.5  ab90f361db038ba3135da12c938c328fb43a012992101879e3d6ebccb4d7eba8 \
    wide                                   1.7.1  d920ac99c3c8edce110cb8d07dbb324d6d026011dce85b1e9355b70f0adacc4f \
    winarm-cpufeatures                     0.1.2  d107c80dd656e1a2c254dfb1d57ece73b7f515b8a8684c270c23cab68f4a440d \
    wit-bindgen                           0.57.1  1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e \
    wyz                                    0.5.1  05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed \
    y4m                                    0.8.0  7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448 \
    zenpixels                             0.2.16  5851fd39b312749a3c367a0cd3522bd95d43276cfa613e9c18df748447cef3a8 \
    zerocopy                              0.8.63  e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8 \
    zerocopy-derive                       0.8.63  863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f \
    zlib-rs                                0.6.8  b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112 \
    zune-core                              0.5.3  d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b \
    zune-jpeg                             0.5.15  27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296
