# -*- 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           legacysupport 1.1
PortGroup           muniversal 1.1
PortGroup           makefile 1.0

# clock_gettime
legacysupport.newest_darwin_requires_legacy 15

github.setup        valkey-io valkey 8.0.1
github.tarball_from archive
revision            1
categories          databases
license             BSD

maintainers         {makr @mohd-akram} openmaintainer

description         in-memory data store
long_description    Valkey is an open source (BSD) high-performance key/value \
                    datastore that supports a variety workloads such as \
                    caching, message queues, and can act as a primary database.

homepage            https://valkey.io

checksums           rmd160  83a74e4f46ed8355994df46ad9ed09dddaa90d3a \
                    sha256  1e1d6dfbed2f932a87afbc7402be050a73974a9b19a9116897e537a6638e5e1d \
                    size    3625396

patchfiles          patch-valkey.conf.diff

post-patch {
    reinplace "s|@PREFIX@|${prefix}|g" ${worksrcpath}/valkey.conf
}

# valkey and dep makefiles have their own optflags
configure.optflags

# avoid build conflict with lua
# https://trac.macports.org/ticket/71078
configure.cppflags-replace \
                    -I${prefix}/include \
                    -isystem${prefix}/include

# error: address argument to atomic operation must be a pointer to non-const
compiler.c_standard 2017

if {[string match *gcc* ${configure.compiler}] &&
    ${configure.build_arch} in [list i386 ppc]} {
    # https://github.com/valkey-io/valkey/issues/434
    configure.ldflags-append    -latomic
}

# valkey doesn't know about CPPFLAGS so pass it this way
build.args-append   SERVER_CFLAGS="${configure.cppflags}"

# disable silent rules
build.args-append   V=1

# use jemalloc
build.args-append   USE_JEMALLOC=yes

# enable TLS.
build.args-append   BUILD_TLS=yes OPENSSL_PREFIX=${prefix}
destroot.args-append    OPENSSL_PREFIX=${prefix}
depends_lib         path:lib/libssl.dylib:openssl

# prevent conflict with redis
destroot.args-append    USE_REDIS_SYMLINKS=no

set db_dir          ${prefix}/var/db/${name}
set log_dir         ${prefix}/var/log/${name}
set run_dir         ${prefix}/var/run/${name}

destroot.keepdirs   ${destroot}${db_dir} \
                    ${destroot}${log_dir} \
                    ${destroot}${run_dir}

installs_libs       no

makefile.has_destdir    no

post-destroot {
    xinstall -d ${destroot}${prefix}/share/doc/${name}
    foreach conffile {valkey.conf sentinel.conf} {
        xinstall -m 0644 ${worksrcpath}/${conffile} \
            ${destroot}${prefix}/share/doc/${name}/${conffile}
    }
    xinstall -o ${name} -g ${name} -d ${destroot}${db_dir}
    xinstall -o ${name} -g ${name} -d ${destroot}${log_dir}
    xinstall -o ${name} -g ${name} -d ${destroot}${run_dir}
}

post-activate {
    foreach conffile {valkey.conf sentinel.conf} {
        if {![file exists ${prefix}/etc/${conffile}]} {
            file copy ${prefix}/share/doc/${name}/${conffile} \
                ${prefix}/etc/${conffile}
        }
    }
}

variant redis_compat description {Install redis compatibility symlinks} {
    conflicts               redis
    destroot.args-delete    USE_REDIS_SYMLINKS=no
}

add_users           ${name} group=${name} realname=Valkey\ Database\ Server
startupitem.create  yes
startupitem.user    ${name}
startupitem.group   ${name}
startupitem.executable  ${prefix}/bin/valkey-server ${prefix}/etc/valkey.conf

github.livecheck.regex  {([0-9.]+)}
