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

name                mailman
version             2.1.29
revision            0
categories          mail
platforms           darwin
license             GPL-2
maintainers         nomaintainer

description         Mailman, the GNU Mailing List Manager
long_description    Mailman is free software for managing electronic \
                    mail discussion and e-newsletter lists. Mailman is \
                    integrated with the web, making it easy for users \
                    to manage their accounts and for list owners to \
                    administer their lists. Mailman supports built-in \
                    archiving, automatic bounce processing, content \
                    filtering, digest delivery, spam filters, and more.
homepage            http://www.list.org/

depends_lib         port:python27 \
                    port:py27-dnspython

master_sites        gnu
extract.suffix      .tgz
checksums           rmd160  d3ea74a88214a81563a1b5f52166f7352136777d \
                    sha256  838872713601e8a124146e550f53709482c1ef168f1e16d201465c651cbf0d2c \
                    size    9376258

# Create a startupitem
startupitem.create  yes
startupitem.start   "${prefix}/share/mailman/bin/mailman.init start"
startupitem.stop    "${prefix}/share/mailman/bin/mailman.init stop"

# Mailman installation directories
set execdir         ${prefix}/libexec/${name}
set sharedir        ${prefix}/share/${name}
set datadir         ${prefix}/var/${name}
set docdir          ${prefix}/share/doc/${name}
set confdir         ${prefix}/etc/httpd

# Mailman user/group name
set mmuser          mailman
set mmgroup         mailman

# CGI group name (should match apache Portfile)
set cgigroup        www

patchfiles          patch-Defaults.py.in \
                    patch-mm_cfg.py.dist.in

configure.pre_args  --exec-prefix=${execdir} \
                    --prefix=${sharedir} \
                    --with-var-prefix=${datadir}

configure.args      --with-cgi-ext=.cgi \
                    --with-cgi-gid=${cgigroup} \
                    --with-groupname=${mmgroup} \
                    --with-mail-gid=${mmgroup} \
                    --with-python=${prefix}/bin/python2.7 \
                    --with-username=${mmuser} \
                    --without-permcheck

pre-destroot {
    addgroup ${mmgroup}
    adduser ${mmuser} gid=[existsgroup ${mmgroup}]
    xinstall -d -m 02775 -o root -g ${mmgroup} ${destroot}${execdir}
    xinstall -d -m 02775 -o root -g ${mmgroup} ${destroot}${sharedir}
    xinstall -d -m 02775 -o ${mmuser} -g ${mmgroup} ${destroot}${datadir}
}
post-destroot {
    # Create dummy files to retain empty directory tree
    xinstall -d -m 02775 ${destroot}${datadir}/lists/.turd
    system "find ${destroot}${datadir} -type d -empty | xargs -n1 -I% touch %/.turd"

    # Cleanup permissions & ownership
    foreach dir [exec find ${destroot}${sharedir} -type d ! -perm 02775] {
        ui_info "${dir}: setting permissions to 02775"
        file attributes $dir -permissions 02775
    }

    # Install startup script
    xinstall -d -m 0755 ${destroot}${prefix}/etc/rc.d
    system "ln -s ../../../[strsed ${sharedir} "g|^${prefix}/||"]/scripts/mailman \
            ${destroot}${prefix}/share/mailman/bin/mailman.init"

    # Install Apache configuration file
    xinstall -d -m 0755 ${destroot}${confdir}
    xinstall -m 0644 ${filespath}/${name}.conf.in \
            ${destroot}${confdir}/${name}.conf.dist
    reinplace "s|@EXECDIR@|${execdir}|" ${destroot}${confdir}/${name}.conf.dist
    reinplace "s|@DATADIR@|${datadir}|" ${destroot}${confdir}/${name}.conf.dist
    reinplace "s|@SHAREDIR@|${sharedir}|" ${destroot}${confdir}/${name}.conf.dist
    reinplace "s|@CONFDIR@|${confdir}|" \
            ${destroot}${sharedir}/Mailman/mm_cfg.py.dist

    # Install documentation files
    xinstall -d -m 0755 ${destroot}${docdir}
    foreach file [glob ${worksrcpath}/\[A-IN-Z\]*] {
        xinstall -m 0644 ${file} ${destroot}${docdir}
    }

    # Check installation under destroot
    # system "cd ${destroot}${sharedir} && \
    #        DESTDIR=${destroot} PYTHONPATH=.:./Mailman ${destroot}${sharedir}/bin/check_perms"

    # Don't register config files to the port so changes are preserved
    # across upgrades.
    file delete -force ${destroot}${sharedir}/Mailman/mm_cfg.py
}

post-activate {
    # Check for an existing mm_cfg.py and copy the "dist" version
    # into place if there isn't one.
    if {![file exists ${sharedir}/Mailman/mm_cfg.py]} {
        copy ${sharedir}/Mailman/mm_cfg.py.dist ${sharedir}/Mailman/mm_cfg.py
    }
    if {![file exists ${confdir}/${name}.conf]} {
        copy ${confdir}/${name}.conf.dist ${confdir}/${name}.conf
    }
}

# Notify the user what needs to be done after installation
notes "
Be sure to verify the email and URL host settings in the Mailman configuration\
file (they may have been guessed incorrectly during the configuration step):

    ${sharedir}/Mailman/mm_cfg.py

Be sure to add the following line to your Apache httpd.conf configuration file\
to enable Mailman web access:

    Include ${confdir}/${name}.conf

Be sure to set up the crontab entries for the '${mmuser}' user. Mailman runs a\
number of cron jobs for its basic functionality.

    cd ${sharedir}/cron
    sudo crontab -u ${mmuser} crontab.in

Also, be sure to read the following files for details on creating your\
site-wide list, setting your site and list creator passwords, and creating\
your first list:

    ${docdir}/INSTALL
    ${docdir}/README

Finally, either restart your system to start up the Mailman queue runner, or\
use the following to start it running immediately:

    sudo port load ${name}
"