# -*- 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           golang 1.0
PortGroup           fuse 1.0

go.setup            github.com/rfjakob/gocryptfs 2.6.1 v
revision            0

categories          fuse
maintainers         {i0ntempest @i0ntempest} openmaintainer
license             MIT
description         Encrypted overlay filesystem written in Go
long_description    {*}${description}
homepage            https://nuetzlich.net/gocryptfs/

set gitversionfuse "v2.8.0"
checksums           ${distname}${extract.suffix} \
                        rmd160  a3624d8b272e9f32f94ad7a3f1df9814203b6082 \
                        sha256  8b293c77703e9a45b629a47ce16aad701a9f2f53af5a8fb6200abe274f08051c \
                        size    1386993

go.vendors          gopkg.in/yaml.v3 \
                        lock    9f266ea9e77c \
                        rmd160  06dca2ede07b2f31c515b4711fbebc1d5359b5e4 \
                        sha256  e70dd42fb30b7b2d0129c5cdf0e079caaf5602cab24081fdac830ec01204fa59 \
                        size    86890 \
                    golang.org/x/term \
                        lock    v0.29.0 \
                        rmd160  8897b8f4c7a32f6801b376eab03bc4d98970bb45 \
                        sha256  584aae20390fd14d70c64dfa2c4a35ee53b53526fd2175f02177cd391d8733ef \
                        size    14690 \
                    golang.org/x/sys \
                        lock    v0.30.0 \
                        rmd160  4cd711df5da2e159b6efbb7fa42ae0a3a3f6eb53 \
                        sha256  76cfe40018bfa5418c1d19d47d8353c3375594013e2b2feea49f06018d2a3102 \
                        size    1523466 \
                    golang.org/x/net \
                        lock    v0.21.0 \
                        rmd160  f75340f16f42b617230110603e41bd586cdef8fe \
                        sha256  8fed668d8604e2b59b5cf00ebc327f710e1af177eab7a73d9ddc68992cd9bea9 \
                        size    1487222 \
                    golang.org/x/crypto \
                        lock    v0.33.0 \
                        rmd160  a9bb37694af13af0618980c934387320bab1234a \
                        sha256  e8755fe2f1785cb6047c52b28f48b4565f8d6ca32be675cb36b330b6a33d1ba9 \
                        size    1840770 \
                    github.com/stretchr/testify \
                        lock    v1.6.1 \
                        rmd160  7e5b798212a8f15cd58a63985ae0b928eede8e6b \
                        sha256  44d77d9b5c1dc08fa710eac9bb324898210660458085cdf965b78a39b1010f2a \
                        size    84248 \
                    github.com/spf13/pflag \
                        lock    v1.0.5 \
                        rmd160  2ce81608a38c6f383a35bccd24d64361df5828c9 \
                        sha256  7f41acdcba65b1fab5b9b633947a139f9915b60f94bdab486cdbe9d90c54f61e \
                        size    50815 \
                    github.com/sabhiram/go-gitignore \
                        lock    525f6e181f06 \
                        rmd160  dedbb7e6dcd1cf8dd5f625090fa8c6b4af8430d6 \
                        sha256  1966d81c0496a29d36e15731d3290bbc71be1b8ca3745a58b364d8a18972b153 \
                        size    8886 \
                    github.com/rfjakob/eme \
                        lock    v1.1.2 \
                        rmd160  27b6194560dbcdfdad845bbad4d1ed456486f8e4 \
                        sha256  beb9d8c20398ee8bf71dfc69cd082fba1e79eac2d1ae7d031909a673ca003a45 \
                        size    23188 \
                    github.com/pmezard/go-difflib \
                        lock    v1.0.0 \
                        rmd160  fc879bfbdef9e3ff50844def58404e2b5a613ab8 \
                        sha256  7cd492737641847266115f3060489a67f63581e521a8ec51efbc280c33fc991f \
                        size    11409 \
                    github.com/pkg/xattr \
                        lock    v0.4.9 \
                        rmd160  9a3c128c3a1f66f0086c7e0991830cfec5c6407c \
                        sha256  58d70e46c81345035cbf3df6d6bb4a59c43c9a4c68c248801f701be5a1d79bce \
                        size    9642 \
                    github.com/moby/sys/mountinfo \
                        lock    v0.7.2 \
                        rmd160  11470bb42f47fe6c862a063760a88d10d3221a04 \
                        sha256  99bb4c2a8a867da0f5b1bd61cd9564893776901cff05ca74b1ff9e47723ed167 \
                        size    69146 \
                    github.com/kylelemons/godebug \
                        lock    v1.1.0 \
                        rmd160  917ada648e70d2e339b8ff36d2f86882d0d2efa1 \
                        sha256  6151c487936ab72cffbf804626228083c9b3abfc908a2bb41b1160e1e5780aaf \
                        size    17641 \
                    github.com/jacobsa/reqtrace \
                        lock    245c9e0234cb \
                        rmd160  872beac620d3eebbc1a343d1d2ca65f2dc6778bd \
                        sha256  e8ca3f8de13ce0f35c1cb2bb9c9be220c82f28a0a1ca80557e2afbbdf396a0c4 \
                        size    7808 \
                    github.com/jacobsa/ogletest \
                        lock    80d50a735a11 \
                        rmd160  d839d0d084bc62e25d23d65cee882b427b537c00 \
                        sha256  8e9eef43d47e4fc12b6e614bd6c97d102eabec107eabe72493763d45325501fd \
                        size    24200 \
                    github.com/jacobsa/oglemock \
                        lock    e94d794d06ff \
                        rmd160  cee16f043ba80e59483d3bfadf783077f8239110 \
                        sha256  5474b9f5228d6eda866293feb9c07729a55195fabd2cd77cd1c30e5291830ad9 \
                        size    35506 \
                    github.com/jacobsa/oglematchers \
                        lock    141901ea67cd \
                        rmd160  5c5dd8416ee4a236632eaa4fc1a1e5ce737eee45 \
                        sha256  4a45ac5d5b5c15af45761f15e3e14f4739b1cd79cd9493ddcd4744f65edc4b52 \
                        size    43827 \
                    github.com/hanwen/go-fuse \
                        lock    ${gitversionfuse} \
                        rmd160  ff14b282bca607f345e063adefa63a7db4394553 \
                        sha256  7113e09dc6b4986f54633506132b0f0d6a4621cc3bcbffd53c7e8e10caf478cf \
                        size    223717 \
                    github.com/davecgh/go-spew \
                        lock    v1.1.0 \
                        rmd160  0303eae19a01f38fe314921fd965e4d09b9ef3ad \
                        sha256  810a597004388d68bb92d8aa612375419ba1080dd5fc2c66dd41b58f0ba4442c \
                        size    42348 \
                    github.com/aperturerobotics/jacobsa-crypto \
                        lock    v1.1.0 \
                        rmd160  00d1922ba828943d42f05b0f796863d1ddf68e2b \
                        sha256  35ea86d147e1d3909ee96c8f9997038e714fdf8dfd55b8191c9d623dd747c027 \
                        size    3655579

# Build date should not be set to a variable value as this would prevent reproducible builds.
# Not setting it results in defaulting to '0000-00-00' when using the --version flag.
set builddate       "build_date_not_set"
set ldflags         "-X \"main.GitVersion=${version}\" -X \"main.GitVersionFuse=${gitversionfuse}\" -X \"main.BuildDate=${builddate}\""

build.env-append    CGO_ENABLED=0
build.args-append   -ldflags="${ldflags}" \
                    -tags without_openssl

post-build {
    set envargs [lmap e ${build.env} {shellescape $e}]
    system -W ${worksrcpath}/${name}-xray "env [join $envargs] ${build.cmd} [join ${build.args}]"
}

destroot {
    xinstall -m 0755 ${worksrcpath}/${name} ${destroot}${prefix}/bin/
    xinstall -m 0755 ${worksrcpath}/${name}-xray/${name}-xray ${destroot}${prefix}/bin/
    xinstall -m 0644 ${worksrcpath}/Documentation/gocryptfs.1 ${destroot}${prefix}/share/man/man1
    xinstall -m 0644 ${worksrcpath}/Documentation/gocryptfs-xray.1 ${destroot}${prefix}/share/man/man1
}

# According to [1] there is no benefit to build gocryptfs with openssl on M1 Macs.
# According to [2] on most modern CPUs openssl provides no speed benefits. I confirmed this by tests on
# my Intel i7 Macbook Pro 2019. Therefore reducing the dependencies and defaulting to build it without openssl.
# [1]: https://github.com/rfjakob/gocryptfs/issues/556#issuecomment-848185514
# [2]: https://github.com/rfjakob/gocryptfs/wiki/CPU-Benchmarks
variant openssl description {Build with openssl support} {
    PortGroup       openssl 1.0

    build.env-append \
                    PKG_CONFIG_PATH=[openssl::pkgconfig_dir]
    build.env-replace \
                    CGO_ENABLED=0 CGO_ENABLED=1
    build.args-delete \
                    -tags without_openssl
}

variant doc description {Build man pages} {
    depends_build-append port:pandoc

    post-build {
        system -W ${worksrcpath}/Documentation "sh MANPAGE-render.bash"
    }
}

variant fs_link description "Link ${name} to a .fs bundle in /Library/Filesystems" {
    post-destroot {
        set dir /Library/Filesystems/${name}.fs/Contents/Resources
        xinstall -d ${destroot}${dir}
        ln -s ${prefix}/bin/${name} ${destroot}${dir}/mount_${name}
    }

    destroot.violate_mtree \
                        yes

    notes-append "
        With +fs_link, you may use \'mount -t ${name}\' and use ${name} in /etc/fstab.
    "
}

default_variants +doc

# Exclude pre-release versions.
github.livecheck.regex \
                    {([0-9.]+)}
