# -*- coding: utf-8; mode: tcl; tab-width: 4; truncate-lines: t; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           cmake 1.1
PortGroup           github 1.0
PortGroup           legacysupport 1.1

github.setup        rspamd rspamd 3.13.0
revision            0
categories          mail
license             BSD
maintainers         nomaintainer
license             Apache-2
homepage            https://rspamd.com
github.tarball_from archive

description         Rapid spam filtering system.
long_description    Rspamd is an advanced spam filtering system and \
                    email processing framework that allows evaluation \
                    of messages by a number of rules including regular \
                    expressions, statistical analysis and custom \
                    services such as URL black lists. Each message is \
                    analysed by Rspamd and given a verdict that might \
                    be used by MTA for further processing (e.g. to \
                    reject a message, or add a special header \
                    indicating spam) along with other information, \
                    such as possible DKIM signature or modifications \
                    suggested for a message. Rspamd can act as a \
                    Milter allowing direct interaction with popular \
                    MTA systems, such as Postfix or Sendmail. Rspamd \
                    is designed to process hundreds of messages per \
                    second simultaneously, and provides a number of \
                    useful features including a comprehensive Lua API \
                    that allows access to messages processing in \
                    various aspects as well as asynchronous network \
                    API to access external resources, such as DNS, \
                    HTTP or even generic TCP/UDP services.

checksums           rmd160  881486c16f060de79aec1f4d9fb8250be912bb5a \
                    sha256  e153951c7b05ea63136548a12df4707dae46205a44dd8ac059408e41be8c8ad6 \
                    size    6598225

# open_memstream, fmemopen, std::filesystem
legacysupport.newest_darwin_requires_legacy 18
legacysupport.use_mp_libcxx                 yes

depends_build-append \
                    path:bin/pkg-config:pkgconfig

depends_lib-append  port:fann \
                    port:gd2 \
                    path:lib/pkgconfig/glib-2.0.pc:glib2 \
                    port:gmime \
                    port:vectorscan \
                    path:lib/pkgconfig/icu-uc.pc:icu \
                    port:libevent \
                    port:libmagic \
                    port:libsodium \
                    port:libstemmer \
                    port:lua \
                    path:lib/libluajit-5.1.2.dylib:luajit \
                    path:lib/libopenblas.dylib:OpenBLAS \
                    path:lib/libssl.dylib:openssl \
                    port:pcre2 \
                    port:perl5 \
                    port:ragel \
                    port:sqlite3 \
                    port:xxhashlib \
                    port:zlib \
                    port:zstd

depends_run-append  port:hiredis \
                    port:redis

variant hyperscan \
    description {Use hyperscan instead of vectorscan.} {
    if {${build_arch} ne {x86_64}} {
        known_fail  yes
        pre-fetch {
            ui_error "hyperscan is only available \
                with the x86_64 architecture."
            error {unsupported platform}
        }
    }

    depends_lib-replace \
                    port:vectorscan \
                    port:hyperscan
}

# Match requirements of dependency vectorscan
supported_archs     arm64 x86_64
compiler.cxx_standard 2020

# Previous issue note; see https://github.com/rspamd/rspamd/issues/2884
# For issues with -DENABLE_PCRE2=ON, enable pcre jit debugging

set rspamd_user     _rspamd
set rspamd_group    ${rspamd_user}
add_users           ${rspamd_user} \
                    group=${rspamd_group} \
                    realname=Rspamd

libpath             ${prefix}/var/lib/${name}

# -DCMAKE_OSX_ARCHITECTURES="x86_64" causes the "Symbol not found: _blake2b_blocks_x86" error
# See https://github.com/rspamd/rspamd/issues/2883
cmake.set_osx_architectures no

# Reference: https://github.com/rspamd/rspamd/blob/master/CMakeLists.txt
# Also see https://github.com/rspamd/rspamd/issues/2884
configure.args-append \
                    -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
                    -DCMAKE_INSTALL_PREFIX=${prefix} \
                    -DCONFDIR=${prefix}/etc/${name} \
                    -DDBDIR=${prefix}/var/lib/${name} \
                    -DENABLE_FANN=ON \
                    -DENABLE_GD=ON \
                    -DENABLE_HYPERSCAN=ON \
                    -DENABLE_LIBUNWIND=ON \
                    -DENABLE_LUAJIT=ON \
                    -DENABLE_PCRE2=ON \
                    -DENABLE_SNOWBALL=ON \
                    -DENABLE_TORCH=ON \
                    -DINSTALL_EXAMPLES=ON \
                    -DLIBDIR=${prefix}/lib \
                    -DLOGDIR=${prefix}/var/log/${name} \
                    -DMANDIR=${prefix}/share/man \
                    -DNO_SHARED=ON \
                    -DRSPAMD_USER=${rspamd_user} \
                    -DRUNDIR=${prefix}/var/run/${name} \
                    -DSYSTEM_XXHASH=ON \
                    -DSYSTEM_ZSTD=ON

# Build with -DENABLE_FULL_DEBUG=ON
# configure.args-append \
#     -DENABLE_FULL_DEBUG=ON

test.run            yes
test.target         run-test

post-destroot {
    # create default directories
    xinstall -o ${rspamd_user} -g ${rspamd_group} -m 0755 -d \
                    ${destroot}${prefix}/var/lib/${name}
    xinstall -d     ${destroot}${prefix}/share/doc/${name}
    xinstall -o ${rspamd_user} -g ${rspamd_group} -m 0755 -d \
                    ${destroot}${prefix}/etc/${name}
    xinstall -o ${rspamd_user} -g ${rspamd_group} -m 0755 -d \
                    ${destroot}${prefix}/var/run/${name}
    xinstall -o ${rspamd_user} -g ${rspamd_group} -m 0755 -d \
                    ${destroot}${prefix}/var/log/${name}

    set docdir ${prefix}/share/doc/${name}
    xinstall -m 0755 -d ${destroot}${docdir}
    xinstall -m 0444 -W ${worksrcpath} ChangeLog LICENSE.md README.md \
                    ${destroot}${docdir}

    # install the man pages
    xinstall -m 0644 -W ${worksrcpath}/doc rspamadm.1 rspamc.1 \
                    ${destroot}${prefix}/share/man/man1
    xinstall -m 0644 -W ${worksrcpath}/doc rspamd.8 \
                    ${destroot}${prefix}/share/man/man8
}

startupitem.create  yes
startupitem.executable \
                    ${prefix}/bin/rspamd \
                    -u ${rspamd_user} \
                    -g ${rspamd_group} \
                    -f \
                    -c ${prefix}/etc/rspamd/rspamd.conf

destroot.keepdirs   ${destroot}${prefix}/etc/${name} \
                    ${destroot}${prefix}/var/run/${name} \
                    ${destroot}${prefix}/var/lib/${name} \
                    ${destroot}${prefix}/var/log/${name} \
                    ${destroot}${prefix}/share/doc/${name}
