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

github.setup        VCVRack Rack 1.1.6 v
name                vcvrack

categories          audio
license             GPL-3

set rack_fundamental_version    1.3.1

homepage            https://vcvrack.com/

description         VCV Rack is an open-source virtual modular synthesizer.

long_description    {*}${description}

maintainers         {gmail.com:herby.gillot @herbygillot} \
                    openmaintainer

# Build process requires git checkout
fetch.type          git

patchfiles          patch-makefile.diff
patchfiles-append   fetch.patch

depends_fetch-append \
                    port:wget

depends_build-append \
                    path:bin/cmake:cmake \
                    port:jq

use_configure       no

compiler.thread_local_storage yes

# fatal error: 'stdatomic.h' file not found
compiler.blacklist-append {clang < 700}

build.env-append    CC=${configure.cc} \
                    CXX=${configure.cxx} \
                    CPP=${configure.cpp}

set rack_fundamental_checksum   \
    1c6ec2aca01ac912181d194ff12f4137ca6e5ddd8616ccee3497b7b4347f59ff

set rack_fundamental_url \
    "https://github.com/VCVRack/Fundamental/archive/v${rack_fundamental_version}.zip"

post-fetch {
    # Fetch Rack's Fundamental plugins
    system -W ${workpath} "wget ${rack_fundamental_url} -O ./Fundamental.zip"
}

post-checksum {
    # Checksum plugins
    system -W ${workpath} \
        "echo '${rack_fundamental_checksum}  ./Fundamental.zip' | shasum -a 256 -c"
}

post-extract {
    # Fetch dependencies
    system -W ${worksrcpath} \
        "git submodule update --init --recursive"

    # Extract plugins and move them into place for the build process
    system -W ${workpath} "unzip -q -x Fundamental.zip"
    move ${workpath}/Fundamental-${rack_fundamental_version} ${workpath}/Fundamental
    move ${workpath}/Fundamental ${worksrcpath}/plugins/
}

build {
    set build_command "${build.env} ${build.cmd} -j ${build.jobs}"

    # Build dependencies
    system -W ${worksrcpath} "${build_command} dep"

    # Build plugins
    system -W ${worksrcpath} "${build_command} plugins"

    # Collect plugins distributables
    xinstall -d ${workpath}/plugins
    xinstall -d ${workpath}/plugins/Fundamental
    copy {*}[glob   ${worksrcpath}/plugins/Fundamental/LICENSE* \
                    ${worksrcpath}/plugins/Fundamental/plugin* ] \
                    ${worksrcpath}/plugins/Fundamental/res \
                    ${worksrcpath}/plugins/Fundamental/src \
        ${workpath}/plugins/Fundamental

    # Create plugins zip file
    system -W ${workpath}/plugins/ "zip -9 -r ${worksrcpath}/Fundamental.zip ./"

    # Create VCVRack distributable
    system -W ${worksrcpath} "${build_command} dist"
}

destroot {
    copy ${worksrcpath}/dist/Rack.app ${destroot}${applications_dir}/
}
