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

PortSystem          1.0

name                privoxy
version             3.0.21
categories          www security net
platforms           darwin
license             GPL-2
maintainers         nomaintainer

description         Advanced filtering web proxy

long_description    Privoxy is a web proxy with advanced filtering \
                    capabilities for protecting privacy, modifying web page \
                    content, managing cookies, controlling access, and \
                    removing ads, banners, pop-ups and other obnoxious \
                    Internet junk. Privoxy has a very flexible configuration \
                    and can be customized to suit individual needs and tastes. \
                    Privoxy has application for both stand-alone systems and \
                    multi-user networks.

homepage            http://www.privoxy.org/
master_sites        sourceforge:project/ijbswa/Sources/${version}%20%28stable%29
distname            ${name}-${version}-stable-src

checksums           rmd160  4435ff694004f78230c1b2a62601ba222be3b874 \
                    sha256  5ec7e601948d2bd0ebf0ebe90eed7d49e7663c395ce16d0403e91ea2d459ddb8

worksrcdir          ${name}-${version}-stable

depends_lib         port:pcre \
                    port:zlib

set privoxyGroup    privoxy
set privoxyUser     privoxy
add_users           ${privoxyUser} group=${privoxyGroup}

pre-configure {
    if {[existsuser ${privoxyUser}] != 0 && [existsgroup ${privoxyGroup}] != 0} {
        configure.args-append   --with-user=${privoxyUser} \
                                --with-group=${privoxyGroup}
    }
    system -W ${worksrcpath} "autoheader"
}

use_autoconf        yes
configure.args      --sysconfdir=${prefix}/etc/${name} \
                    --mandir=${prefix}/share/man \
                    --enable-dynamic-pcre \
                    --enable-zlib

# work around bug 30345
post-configure {
    file delete ${workpath}/.CC_PRINT_OPTIONS
}

destroot.keepdirs   ${destroot}${prefix}/var/log/privoxy \
                    ${destroot}${prefix}/var/run

post-destroot {
    xinstall -m 755 -d ${destroot}${prefix}/var/run
    # Install and fixup startup script (if non-Darwin)
    if {${os.platform} ne "darwin"} {
        xinstall -m 755 -d ${destroot}${prefix}/etc/rc.d
        xinstall -m 755 -W ${worksrcpath} privoxy-generic.init \
            ${destroot}${prefix}/etc/rc.d/privoxy.sh
        
        system -W ${destroot}${prefix}/etc/rc.d "patch -p0 < ${filespath}/patch-privoxy.sh.diff"
        reinplace "s|@@PREFIX@@|${prefix}|g" \
            ${destroot}${prefix}/etc/rc.d/privoxy.sh
        if {[existsuser ${privoxyUser}] != 0} {
            reinplace "s|@@PRIVOXY_USER@@|${privoxyUser}|g" \
                ${destroot}${prefix}/etc/rc.d/privoxy.sh
        } else {
            reinplace "s|@@PRIVOXY_USER@@|$env(USER)|g" \
                ${destroot}${prefix}/etc/rc.d/privoxy.sh
        }
    }
    # Rename these so local modifications are not removed on uninstall.
    # NOTE: Always overwrite default.action and default.filter.
    foreach privoxyConf {config match-all.action trust user.action user.filter} {
            if [file exists ${destroot}${prefix}/etc/privoxy/${privoxyConf}] {
        file rename ${destroot}${prefix}/etc/privoxy/${privoxyConf} \
            ${destroot}${prefix}/etc/privoxy/${privoxyConf}.new
            }
        # backup config files before fix #23970
            if {[file exists ${prefix}/etc/privoxy/${privoxyConf}] \
        && ![file exists ${prefix}/etc/privoxy/${privoxyConf}.new]} {
        file copy ${prefix}/etc/privoxy/${privoxyConf} \
            ${destroot}${prefix}/etc/privoxy/${privoxyConf}.mp_backup
            }
    }
    # Remove the preinstalled log files as, otherwise, a rotation script
    # will fail when trying to rename and compress due to gzip not liking
    # multi-linked files (the one in ${prefix} and the one in
    # ${prefix}/var/db/dports/software/...)
    eval file delete [glob ${destroot}${prefix}/var/log/privoxy/*]
    if {[existsuser ${privoxyUser}] != 0 && [existsgroup ${privoxyGroup}] != 0} {
        # Make sure log directory owned by privoxy user/group
        file attributes ${destroot}${prefix}/var/log/privoxy \
            -group ${privoxyGroup} -owner ${privoxyUser}
    }
}

post-activate {
    # Make sure initial log files are present and setup correctly
    foreach privoxyLog {jarfile logfile} {
        touch ${prefix}/var/log/privoxy/${privoxyLog}
        if {[existsuser ${privoxyUser}] != 0 && [existsgroup ${privoxyGroup}] != 0} {
            file attributes ${prefix}/var/log/privoxy/${privoxyLog} \
                -group ${privoxyGroup} -owner ${privoxyUser} \
                -permissions 0660
        }
    }
    foreach privoxyConf {config match-all.action trust user.action user.filter} {
        if ![file exists ${prefix}/etc/privoxy/${privoxyConf}] {
            # restore config files before fix #23970
            if [file exists ${prefix}/etc/privoxy/${privoxyConf}.mp_backup] {
                file copy ${prefix}/etc/privoxy/${privoxyConf}.mp_backup \
                    ${prefix}/etc/privoxy/${privoxyConf}
            } else {
                file copy ${prefix}/etc/privoxy/${privoxyConf}.new \
                    ${prefix}/etc/privoxy/${privoxyConf}
            }
            if {[existsuser ${privoxyUser}] != 0 && [existsgroup ${privoxyGroup}] != 0} {
                file attributes ${prefix}/etc/privoxy/${privoxyConf} \
                    -group ${privoxyGroup} -owner ${privoxyUser} \
                    -permissions 0660
            }
        }
    }
}

platform darwin {
    startupitem.create          yes
    startupitem.name            Privoxy
    startupitem.start           "\[ -f \"${prefix}/etc/privoxy/config\" \] \\"
    startupitem.start-append    "\t&& ${prefix}/sbin/privoxy \\"
    startupitem.start-append    "\t\t--pidfile ${prefix}/var/run/privoxy.pid \\"
    startupitem.start-append    "\t\t--user ${privoxyUser} \\"
    startupitem.start-append    "\t\t${prefix}/etc/privoxy/config 2>/dev/null"
    startupitem.stop            "if \[ -f \"${prefix}/var/run/privoxy.pid\" \]; then"
    startupitem.stop-append     "\tkill `cat ${prefix}/var/run/privoxy.pid` \\"
    startupitem.stop-append     "\t\t&& rm -f ${prefix}/var/run/privoxy.pid"
    startupitem.stop-append     "else"
    startupitem.stop-append     "\t/usr/bin/killall -SIGUSR1 privoxy 2>/dev/null"
    startupitem.stop-append     "fi"
}

livecheck.type      regex
livecheck.url       ${homepage}announce.txt
livecheck.regex     Announcing Privoxy (\[0-9.\]+)