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

set core_branch     2.3
set minor_version   21.1
set core_version    ${core_branch}.${minor_version}
github.setup        dovecot core ${core_version}
github.tarball_from releases
name                dovecot
revision            1
epoch               20060722

categories          mail
maintainers         {jberry @jdberry} openmaintainer
license             LGPL-2.1
homepage            https://www.dovecot.org

description         Secure, fast imap and pop3 server

long_description    Dovecot is an IMAP and POP3 server for \
                    Linux/UNIX-like systems, written with security \
                    primarily in mind. Although it is written in C, it \
                    uses several coding techniques to avoid most of \
                    the common pitfalls.

subport dovecot-sieve {
    github.setup    dovecot pigeonhole 0.5.${minor_version}
    revision        0

    description     Pigeonhole sieve and managesieve plugins for dovecot
    long_description \
                    Pigeonhole is the name of the project that adds \
                    support for the Sieve language (RFC 5228) and the \
                    ManageSieve protocol (RFC 5804) to the Dovecot \
                    Secure IMAP Server. The Sieve language is used to \
                    specify how e-mail needs to be processed. By \
                    writing Sieve scripts, users can customize how \
                    messages are delivered, e.g. whether they are \
                    forwarded or stored in special folders. Unwanted \
                    messages can be discarded or rejected, and, when \
                    the user is not available, the Sieve interpreter \
                    can send an automated reply. Above all, the Sieve \
                    language is meant to be simple, extensible and \
                    system independent. And, unlike most other mail \
                    filtering script languages, it does not allow \
                    users to execute arbitrary programs. This is \
                    particularly useful to prevent virtual users from \
                    having full access to the mail store. The \
                    intention of the language is to make it impossible \
                    for users to do anything more complex (and \
                    dangerous) than write simple mail filters.  Using \
                    the ManageSieve protocol, users can upload their \
                    Sieve scripts remotely, without needing direct \
                    filesystem access through FTP or \
                    SCP. Additionally, a ManageSieve server always \
                    makes sure that uploaded scripts are valid, \
                    preventing compile failures at mail delivery. The \
                    Pigeonhole project provides Sieve support as a \
                    plugin to Dovecot's Local Delivery Agent \
                    (LDA). The ManageSieve protocol is provided is an \
                    additional service, next to Dovecot's own POP3 and \
                    IMAP services.

    homepage        https://pigeonhole.dovecot.org/

    distname        dovecot-${core_branch}-pigeonhole-${version}
    master_sites    ${homepage}releases/${core_branch}/

    checksums       rmd160 4936e99b2e3ca573acc600b2b060a26b5ee67775 \
                    sha256 0377db284b620723de060431115fb2e7791e1df4321411af718201d6925c4692 \
                    size   1956404

    depends_lib-append \
                    port:dovecot

    patchfiles      dynamic_lookup-11-sieve.patch

    configure.ldflags-append \
                    -L${prefix}/lib/dovecot
    configure.args  --with-managesieve=yes \
                    --disable-dependency-tracking
}

set perl5.major     5.34

if {${name} eq ${subport}} {
    master_sites    https://dovecot.org/releases/${core_branch}/
    distname        ${name}-${version}
    checksums       rmd160 a1dc152dc823680fd5675f982347251a47b6c8d3 \
                    sha256 2d90a178c4297611088bf7daae5492a3bc3d5ab6328c3a032eb425d2c249097e \
                    size 7842044

    depends_build-append \
                    port:bison \
                    port:flex \
                    path:bin/pkg-config:pkgconfig

    depends_lib-append \
                    port:bzip2 \
                    path:lib/pkgconfig/icu-uc.pc:icu \
                    port:libiconv \
                    path:lib/libssl.dylib:openssl \
                    port:lz4 \
                    port:xz \
                    port:zlib

    set default_internal_user   _dovecot
    set default_login_user      _dovenull
    add_users ${default_internal_user} group=${default_internal_user} realname=Dovecot \
              ${default_login_user}    group=${default_login_user}    realname=Dovenull

    patch.pre_args-replace  -p0 -p1
    patchfiles      patch-doc-example-config-conf.d-10-master.conf.diff \
                    patch-src-master-master-settings.c.diff \
                    dynamic_lookup-11.patch \
                    dbox-storage.c.patch

    post-patch {
        reinplace "s|@@default_internal_user@@|${default_internal_user}|g" \
            ${worksrcpath}/doc/example-config/conf.d/10-master.conf
        reinplace "s|@@default_login_user@@|${default_login_user}|g" \
            ${worksrcpath}/doc/example-config/conf.d/10-master.conf
    }

    configure.args  --sysconfdir=${prefix}/etc \
                    --localstatedir=${prefix}/var \
                    --with-ssl=openssl \
                    --with-zlib \
                    --with-bzlib \
                    --with-ssldir=${prefix}/etc/openssl \
                    --with-shared-libs \
                    --with-pam \
                    --with-gssapi=yes

    configure.cppflags  -I${prefix}/include/openssl
    configure.env-append \
                    PANDOC=false

    # Remove next release
    # https://github.com/dovecot/core/commit/1ccd5b54a408d12fce0c94ab0bbaedbb5ef69830
    configure.env-append \
                    LIBICU_LIBS=-licui18n\ -licuuc

    # check if dovecot-sieve must be upgraded
    post-activate {
        if { ![catch {set result [registry_active dovecot-sieve]}]
             && [lrange [split [lindex [lindex ${result} 0] 1] .] 2 end] ne
                   [split ${minor_version} .] } {
            ui_msg "dovecot-sieve @[lindex [lindex ${result} 0] 1] and dovecot @${core_version} versions are incompatible. Please run:

\tsudo port upgrade dovecot-sieve
"
        }
    }

    variant ldap description {Enable LDAP support} {
        depends_lib-append          path:lib/libldap.dylib:openldap
        configure.args-append       --with-ldap=yes
    }

    variant solr requires lucene description {Enable apache-solr support} {
        depends_lib-append          port:curl port:expat
        depends_run-append          port:apache-solr8
        configure.args-append       --with-solr
    }

    variant lucene description {Enable lucene support} {
        depends_lib-append          port:clucene
        configure.args-append       --with-lucene
    }

    variant libstemmer description {Use libstemmer for full-text search} {
        depends_lib-append          port:libstemmer
        configure.args-append       --with-libstemmer
    }

    # remove after 2026-01-01
    variant apns \
        description "Enable Apple Push Notification Service (APNS) \[deprecated]" {
        notes-append \
            "Apple no longer supports APNS certificates for Mail.\
            This variant will be removed in a future update. See:\
            https://discussions.apple.com/thread/255898876"
    }

    variant postgresql11 \
        conflicts postgresql12 postgresql13 postgresql14 postgresql15 postgresql16 postgresql17 \
        description "Enable PostgreSQL 11 support" {
        depends_lib-append          port:postgresql11
        configure.env-append        PG_CONFIG=${prefix}/lib/postgresql11/bin/pg_config
        configure.args-append       --with-pgsql
    }

    variant postgresql12 \
        conflicts postgresql11 postgresql13 postgresql14 postgresql15 postgresql16 postgresql17 \
        description "Enable PostgreSQL 12 support" {
        depends_lib-append          port:postgresql12
        configure.env-append        PG_CONFIG=${prefix}/lib/postgresql12/bin/pg_config
        configure.args-append       --with-pgsql
    }

    variant postgresql13 \
        conflicts postgresql11 postgresql12 postgresql14 postgresql15 postgresql16 postgresql17 \
        description "Enable PostgreSQL 13 support" {
        depends_lib-append          port:postgresql13
        configure.env-append        PG_CONFIG=${prefix}/lib/postgresql13/bin/pg_config
        configure.args-append       --with-pgsql
    }

    variant postgresql14 \
        conflicts postgresql11 postgresql12 postgresql13 postgresql15 postgresql16 postgresql17 \
        description "Enable PostgreSQL 14 support" {
        depends_lib-append          port:postgresql14
        configure.env-append        PG_CONFIG=${prefix}/lib/postgresql14/bin/pg_config
        configure.args-append       --with-pgsql
    }

    variant postgresql15 \
        conflicts postgresql11 postgresql12 postgresql13 postgresql14 postgresql16 postgresql17 \
        description "Enable PostgreSQL 15 support" {
        depends_lib-append          port:postgresql15
        configure.env-append        PG_CONFIG=${prefix}/lib/postgresql15/bin/pg_config
        configure.args-append       --with-pgsql
    }

    variant postgresql16 \
        conflicts postgresql11 postgresql12 postgresql13 postgresql14 postgresql15 postgresql17 \
        description "Enable PostgreSQL 16 support" {
        depends_lib-append          port:postgresql16
        configure.env-append        PG_CONFIG=${prefix}/lib/postgresql16/bin/pg_config
        configure.args-append       --with-pgsql
    }

    variant postgresql17 \
        conflicts postgresql11 postgresql12 postgresql13 postgresql14 postgresql15 postgresql16 \
        description "Enable PostgreSQL 16 support" {
        depends_lib-append          port:postgresql16
        configure.env-append        PG_CONFIG=${prefix}/lib/postgresql16/bin/pg_config
        configure.args-append       --with-pgsql
    }

    variant percona \
        conflicts mariadb10.3 mariadb10.4 mariadb10.5 mariadb10.6 mariadb10.7 mariadb10.8 mariadb10.11 mysql57 mysql8 \
        description "Enable Percona (MySQL) support" {
            depends_lib-append          port:percona
            configure.env-append        MYSQL_CONFIG=${prefix}/lib/percona/bin/mysql_config
            configure.args-append       --with-mysql
    }

    variant mariadb10.3 \
        conflicts mariadb10.4 mariadb10.5 mariadb10.6 mariadb10.7 mariadb10.8 mariadb10.11 mysql57 mysql8 percona \
        description "Enable MariaDB 10.3 (MySQL) support" {
        depends_lib-append          port:mariadb-10.3
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mariadb-10.3/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mariadb10.4 \
        conflicts mariadb10.3 mariadb10.5 mariadb10.6 mariadb10.7 mariadb10.8 mariadb10.11 mysql57 mysql8 percona \
        description "Enable MariaDB 10.4 (MySQL) support" {
        depends_lib-append          port:mariadb-10.4
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mariadb-10.4/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mariadb10.5 \
        conflicts mariadb10.3 mariadb10.4 mariadb10.6 mariadb10.7 mariadb10.8 mariadb10.11 mysql57 mysql8 percona \
        description "Enable MariaDB 10.5 (MySQL) support" {
        depends_lib-append          port:mariadb-10.5
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mariadb-10.5/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mariadb10.6 \
        conflicts mariadb10.3 mariadb10.4 mariadb10.5 mariadb10.7 mariadb10.8 mariadb10.11 mysql57 mysql8 percona \
        description "Enable MariaDB 10.6 (MySQL) support" {
        depends_lib-append          port:mariadb-10.6
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mariadb-10.6/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mariadb10.7 \
        conflicts mariadb10.3 mariadb10.4 mariadb10.5 mariadb10.6 mariadb10.8 mariadb10.11 mysql57 mysql8 percona \
        description "Enable MariaDB 10.7 (MySQL) support" {
        depends_lib-append          port:mariadb-10.7
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mariadb-10.7/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mariadb10.8 \
        conflicts mariadb10.3 mariadb10.4 mariadb10.5 mariadb10.6 mariadb10.7 mariadb10.11 mysql57 mysql8 percona \
        description "Enable MariaDB 10.8 (MySQL) support" {
        depends_lib-append          port:mariadb-10.8
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mariadb-10.8/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mariadb10.11 \
        conflicts mariadb10.3 mariadb10.4 mariadb10.5 mariadb10.6 mariadb10.7 mariadb10.8 mysql57 mysql8 percona \
        description "Enable MariaDB 10.11 (MySQL) support" {
        depends_lib-append          port:mariadb-10.11
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mariadb-10.11/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mysql57 \
        conflicts mariadb10.3 mariadb10.4 mariadb10.5 mariadb10.6 mariadb10.7 mariadb10.8 mariadb10.11 mysql8 percona \
        description "Enable MySQL 5.7 support" {
        depends_lib-append          port:mysql57
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mysql57/bin/mysql_config
        configure.args-append       --with-mysql
    }

    variant mysql8 \
        conflicts mariadb10.3 mariadb10.4 mariadb10.5 mariadb10.6 mariadb10.7 mariadb10.8 mariadb10.11 mysql57 percona \
        description "Enable MySQL 8 support" {
        depends_lib-append          port:mysql8
        configure.env-append        MYSQL_CONFIG=${prefix}/lib/mysql8/bin/mysql_config
        configure.args-append       --with-mysql
    }

    # remove after 2026-01-14
    variant mariadb10.2 requires mariadb10.5 description "Legacy compatibility variant" {}
    variant postgresql10 requires postgresql13 description "Legacy compatibility variant" {}

    startupitem.create      yes
    startupitem.executable  ${prefix}/sbin/${name}
    startupitem.pidfile     auto ${prefix}/var/run/${name}/master.pid

    destroot.keepdirs \
        ${destroot}${prefix}/etc/${name}
}
