# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 60534 2009-11-14 23:10:00Z ryandesign@macports.org $

PortSystem      1.0

name            poco
version         1.3.5
categories      devel
maintainers     nox openmaintainer
platforms       darwin
description     POCO C++ Libraries

long_description \
    POCO aims to be for network-centric, cross-platform C++ software development \
    what Apple's Cocoa is for Mac development, or Ruby on Rails is for Web \
    development -- a powerful, yet easy to use platform to build your applications upon.

homepage        http://pocoproject.org/
master_sites    sourceforge
use_bzip2       yes
distname        ${name}-${version}-all
set docdistname ${name}-[strsed ${version} {s/[a-z].*$//}]-doc

checksums       [suffix ${distname}] \
                    md5     b36fc66e39560dd985d4ae4bc8011be8 \
                    sha1    e7901adbd29b8c194b67ee476b0ace27772e5c4e \
                    rmd160  5e40706ce786127517649c3693d39777ad620eb4 \
                ${docdistname}.tar.gz \
                    md5     357fbbb4f31921ebe7dc49a1b6b5742c \
                    sha1    0d0af652752e7cb584900313afc1e2e57bea68f9 \
                    rmd160  a43b7a77ee3a9eb6e7736786f7808ef5fd22202c

patchfiles      patch-rules-deps.diff

set config      Darwin
set omit        {NetSSL_OpenSSL Data/ODBC Data/MySQL Crypto}

configure.args  --no-samples

pre-configure {
    configure.args-append   --omit=[join ${omit} ,]

    reinplace -E "/^C(XX)?FLAGS +=/s|\$| ${configure.cppflags} ${configure.cflags}|" \
        ${worksrcpath}/build/config/${config}
    reinplace -E "/^((SH|DY)LIB|LINKFLAGS) +=/s|\$| -L\$(LIBPATH) ${configure.ldflags}|" \
        ${worksrcpath}/build/config/${config}
}

use_parallel_build  yes

build.target    poco

test.run        yes

test {
    proc luniq {list} {
        set x() {}; unset x
        foreach {item} ${list} {
            set x(${item}) ""
        }
        return [array names x]
    }

    set file [open ${worksrcpath}/components]

    set components {}
    while {[gets ${file} component] != -1} {
        lappend components ${component}
    }

    close ${file}

    foreach {component} [luniq ${components}] {
        foreach {testrunner} [glob -nocomplain ${worksrcpath}/${component}/testsuite/bin/*/*/testrunner{,d}] {
            catch {system "${testrunner} -all -print"}
        }
    }
}

set docdir      ${prefix}/share/doc/${name}-${version}

post-destroot {
    xinstall -d ${destroot}${docdir}
    xinstall -m 0644 -W ${worksrcpath} CHANGELOG CONTRIBUTORS LICENSE NEWS README VERSION \
        ${destroot}${docdir}

    if {![variant_isset doc]} {
        xinstall -d ${destroot}${docdir}/html
        xinstall -m 0644 -W ${worksrcpath}/doc Acknowledgements.html ${destroot}${docdir}/html
    }

    set libdir ${prefix}/lib

    foreach {dylib} [glob -types f -tails -directory ${destroot}${libdir} *.dylib] {
        system "install_name_tool -id ${libdir}/${dylib} ${destroot}${libdir}/${dylib}"

        set otool [lrange [split [exec otool -L ${destroot}${libdir}/${dylib}] \n] 2 end]

        foreach {otoolentry} ${otool} {
            set lib [lindex ${otoolentry} 0]

            if {! [string match ${worksrcpath}/* ${lib}]} {
                continue
            }

            system "install_name_tool -change ${lib} ${libdir}/[file tail ${lib}] \
                ${destroot}${libdir}/${dylib}"
        }
    }
}

variant ssl description {Build NetSSL and Crypto library} {
    depends_lib-append      port:openssl
    set omit [ldelete [ldelete ${omit} NetSSL_OpenSSL] Crypto]
}

variant odbc description {Build ODBC backend for Data library} {
    patchfiles-append       patch-Data-ODBC-Makefile.diff
    depends_lib-append      lib:libiodbc:unixODBC
    set omit [ldelete ${omit} Data/ODBC]
}

variant mysql description {Build MySQL backend for Data library} {
    patchfiles-append       patch-Data-MySQL-Makefile.diff

    depends_lib-append      path:bin/mysql_config5:mysql5

    post-configure {
        reinplace -E "/^C(XX)?FLAGS +=/s|\$| -I${prefix}/include/mysql5/mysql|" \
            ${worksrcpath}/build/config/${config}
        reinplace -E "/^((SH|DY)LIB|LINKFLAGS) +=/s|\$| -L${prefix}/lib/mysql5/mysql|" \
            ${worksrcpath}/build/config/${config}
    }

    set omit [ldelete ${omit} Data/MySQL]
}

variant doc description {Install extra documentation} {
    extract.only            ${distfiles}
    distfiles-append        ${docdistname}.tar.gz

    post-extract {
        system "tar xzf ${distpath}/${docdistname}.tar.gz -C ${workpath}"
    }

    post-destroot {
        set workdocpath ${workpath}/${docdistname}

        xinstall -d ${destroot}${docdir}/html/CppUnit
        eval xinstall -m 0644 [glob -directory ${workdocpath} *.html] ${destroot}${docdir}/html
        eval xinstall -m 0644 [glob -directory ${worksrcpath}/CppUnit/doc *] ${destroot}${docdir}/html/CppUnit

        foreach {dir} {images css} {
            xinstall -d ${destroot}${docdir}/html/${dir}
            eval xinstall -m 0644 [glob -directory ${workdocpath}/${dir} *] ${destroot}${docdir}/html/${dir}
        }
    }
}

livecheck.regex "<title>sources ${name}-(.*) released.*</title>"
