# -*- 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: Portfile 92837 2012-05-09 00:51:48Z ryandesign@macports.org $

PortSystem          1.0

name                privoxy
version             3.0.19
revision            1
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  6a4d6914d2cec8f90b82c9b2ab28dda55b271561 \
                    sha256  816e627b31caa3d9e71d0a8b83ac9ea7dcbeaaafef3c9a9c792696aa56255232

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

depends_lib         port:pcre \
                    port:zlib

set privoxyGroup    privoxy
set privoxyUser     privoxy

if {[tbool portarchivemode]} {
    pre-unarchive {
        addgroup    ${privoxyGroup}
        adduser     ${privoxyUser} gid=[existsgroup ${privoxyGroup}]
    }
}
pre-configure {
    if {![tbool portarchivemode]} {
        addgroup    ${privoxyGroup}
        adduser     ${privoxyUser} gid=[existsgroup ${privoxyGroup}]
    }
    if {[existsuser ${privoxyUser}] != 0 && [existsgroup ${privoxyGroup}] != 0} {
        configure.args-append   --with-user=${privoxyUser} \
                                --with-group=${privoxyGroup}
    }
    system "cd ${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} != "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 "cd ${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       http://www.privoxy.org/announce.txt
livecheck.regex     Announcing Privoxy v.(\[0-9.\]+)
