# -*- coding: utf-8; mode: tcl; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; truncate-lines: t -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
# $Id: Portfile 54186 2009-07-22 19:46:27Z macsforever2000@macports.org $

PortSystem          1.0

name                qt4-mac
version             4.5.2
revision            1
categories          aqua
platforms           macosx
maintainers         erickt gmail.com:clubjuggler openmaintainer

homepage            http://www.trolltech.com/
description         Qt Tool Kit (Native Aqua Version)
long_description    This is Qt, TrollTech's C++ toolkit for writing cross-platform GUI applications. \
                    This version uses the native Aqua UI. For a X11 version, see qt4-x11.
master_sites        trolltech
distname            qt-mac-opensource-src-${version}

checksums           \
    md5     c549d6c0c2e0723377cb955c78a1b680 \
    sha1    61b45db17962b48c338628d58c0445c9f544d5e6 \
    rmd160  53c752de43aa0623f005ca1c5a12810acc1da013

depends_build       port:pkgconfig

depends_lib       \
    port:zlib     \
    port:tiff     \
    port:libpng   \
    port:libmng   \
    port:jpeg     \
    port:dbus     \
    port:openssl  \
    port:sqlite3

# Build plugins as bundle files instead of dylib files.
# Test for Precompiled-headers support requires a C++ compiler, but configure calls it, by default, with a C compiler.
# Use unixODBC provided by MacPorts instead of iODBC provided my Mac OS.
# Ensure that securesocketclient demo is built even with configure option -openssl-linked.
patchfiles                   \
    patch-mac.conf.diff      \
    patch-precomp.test.diff  \
    patch-odbc.diff          \
    patch-network.pro.diff

# The build process uses -fconstant-cfstrings.
# configure.compiler should therefore not be one of the MacPorts compilers.

# --prefix is not recognized.
configure.pre_args-delete  --prefix=${prefix}
# -I${prefix}/include and -L${prefix}/lib must be set in ${configure.args}
# or else some generated Makefiles will not see them.
configure.cppflags
configure.ldflags

set dirname qt4-mac
set qt_dir ${prefix}/libexec/${dirname}

#  CPATH is used instead of -I to avoid conflicts with other ports.
#  See http://trac.macports.org/ticket/15219 and http://trac.macports.org/ticket/18723.
#
# -system-sqlite ensures the use SQLite provided by MacPorts instead of Qt.
#
# -dbus-linked prevends qt4 from trying to dynamically load libdbus-1,
#     which it is not able to find in ${prefix}.
# -openssl-linked ensures that the MacPorts openssl is used.
#
configure.args                                            \
    -v                                                    \
    -debug-and-release                                    \
    -confirm-license                                      \
    -opensource                                           \
    -prefix          ${qt_dir}                            \
    -docdir          ${prefix}/share/doc/${dirname}       \
    -examplesdir     ${prefix}/share/${dirname}/examples  \
    -demosdir        ${prefix}/share/${dirname}/demos     \
    -system-sqlite                                        \
    -openssl-linked                                       \
    -dbus-linked                                          \
    -L${prefix}/lib

lappend cpath        ${prefix}/include
lappend library_path ${prefix}/lib

pre-configure {
    configure.env-append \
        CPATH=[join ${cpath} :] \
        LIBRARY_PATH=[join ${library_path} :]
}

pre-build {
    build.env-append \
        CPATH=[join ${cpath} :] \
        LIBRARY_PATH=[join ${library_path} :]
}

# Stop configure script from searching for SQL Drivers
#    not available from MacPorts.
foreach driver {db2 ibase oci tds} {
    configure.args-append -no-sql-${driver}
}

# By default, disable most SQL Drivers.
# There must be at least one enabled (http://trac.macports.org/ticket/15627).
# SQLite is chosen to be always enabled because a copy of it is distributed
#    with Qt, so it is reasonable for the user to expect it.
foreach driver {mysql odbc psql sqlite2} {
    configure.args-append -no-sql-${driver}
}

variant mysql description {Enable MySQL SQL Driver} {
    depends_lib-append path:lib/mysql5:mysql5

    lappend cpath        ${prefix}/include/mysql5/mysql
    lappend library_path ${prefix}/lib/mysql5/mysql
    
    configure.args-delete -no-sql-mysql
}

variant odbc description {Enable unixODBC SQL Driver} {
    depends_lib-append port:unixODBC
    configure.args-delete -no-sql-odbc
}

variant psql description {Enable PostgreSQL SQL Driver} {
    depends_lib-append port:postgresql83

    lappend cpath        ${prefix}/include/postgresql83
    lappend library_path ${prefix}/lib/postgresql83

    configure.args-delete -no-sql-psql
}

variant sqlite2 description {Enable SQLite version 2 SQL Driver} {
    depends_lib-append port:sqlite2
    configure.args-delete -no-sql-sqlite2
}

variant cocoa description {Build the Cocoa version of Qt in 32-bit mode} conflicts noframework {
    configure.args-append  -cocoa

    # Everything might build, but nothing will run.
    pre-fetch {
        if { ${os.major} < 9 } {
            return -code error "Variant cocoa creates Qt binaries which require Mac OS X 10.5 or higher."
        }
    }
}

variant noframework description {Do not build frameworks} conflicts cocoa {
    configure.args-append   -no-framework
}

build.target        first
use_parallel_build  yes

destroot.destdir    INSTALL_ROOT="${destroot}"

post-patch {
    # Ensure that correct compilers are used.
    reinplace "s| g++\$| ${configure.cxx}|" ${worksrcpath}/mkspecs/common/g++.conf
    reinplace "s| gcc\$| ${configure.cc}|"  ${worksrcpath}/mkspecs/common/g++.conf
    reinplace "s| g++\$| ${configure.cxx}|" ${worksrcpath}/mkspecs/macx-g++/qmake.conf
}

post-destroot {
    # Install documentation.
    foreach doc { FAQ.txt INSTALL LGPL_EXCEPTION.txt LICENSE.GPL3 LICENSE.LGPL README } {
        xinstall -c -m 644 ${worksrcpath}/$doc ${destroot}${prefix}/share/doc/${name}
    }

    # Create link in ${prefix}/bin to executable files in ${qt_dir}/bin.
    foreach bin [glob -type f -directory ${destroot}${qt_dir}/bin *] {
        ln -s ${qt_dir}/bin/[file tail ${bin}] ${destroot}${prefix}/bin
    }

    xinstall -d -m 0755 ${destroot}${applications_dir}/Qt
    # Create link in ${applications_dir}/Qt to .app directories in ${qt_dir}/bin/.
    # Create link in ${prefix}/bin to all *.app/Contents/MacOS/*.
    foreach app [glob -type d -directory ${destroot}${qt_dir}/bin *.app] {
        ln -s ${qt_dir}/bin/[file tail ${app}] ${destroot}${applications_dir}/Qt
        foreach bin [glob -tails -type f -directory ${app}/Contents/MacOS *] {
            ln -s ${qt_dir}/bin/[file tail ${app}]/Contents/MacOS/${bin} ${destroot}${prefix}/bin
        }
    }

    # Avoid conflict with other qt packages.
    # Ensure lower case names.
    foreach bin [glob ${destroot}${prefix}/bin/*] {
        file rename ${bin} ${destroot}${prefix}/bin/[string tolower [file tail ${bin}]]-mac
    }

    # Fix the .pc and .prl files by removing ${destroot}.
    foreach fixfile [glob -nocomplain -directory ${destroot} ${qt_dir}/lib/pkgconfig/*.pc ${qt_dir}/lib/*.prl ${qt_dir}/lib/*/*.prl ${prefix}/share/${dirname}/demos/shared/*.prl] {
        reinplace  \
            "s|-L${worksrcpath}/lib|-L${qt_dir}/lib|g" \
            ${fixfile}
        reinplace  \
            "s|-F${worksrcpath}/lib|-F${qt_dir}/lib|g" \
            ${fixfile}
    }

    # Create link to Frameworks in Frameworks directory.
    xinstall -d -m 0755 ${destroot}${frameworks_dir}
    foreach fdir [glob -tails -directory ${destroot}${qt_dir}/lib -nocomplain *.framework] {
        ln -s ${qt_dir}/lib/${fdir} ${destroot}${frameworks_dir}
    }

    # The debug .pc files have no counterpart in qt4-x11, so set a link to them in the pkgconfig directory.
    xinstall -d -m 0755 ${destroot}${prefix}/lib/pkgconfig
    foreach fl [glob -tails -directory ${destroot}${qt_dir}/lib/pkgconfig *_debug.pc] {
        ln -s ${qt_dir}/lib/pkgconfig/${fl} ${destroot}${prefix}/lib/pkgconfig/
    }

    # Install select file for qt4_select.
    xinstall -m 755 -d ${destroot}${prefix}/etc/select/qt4
    xinstall -m 644 ${filespath}/${dirname} ${destroot}${prefix}/etc/select/qt4/
}

variant raster description {Use raster graphics system by default} {
    configure.args-append   -graphicssystem  raster
}

variant universal {
    configure.universal_args-delete --disable-dependency-tracking
    foreach arch ${universal_archs} {
        if { ${arch}=="i386" } {
            configure.args-append -arch x86
        } else {
            configure.args-append -arch ${arch}
        }
    }
    if {[info exists universal_sysroot]} {
        configure.args-append -sdk ${universal_sysroot}
    }
}

livecheck.check     regex
livecheck.url       http://trolltech.com/downloads/opensource/appdev/mac-os-cpp
livecheck.regex     "qt-mac-opensource-src-(4(?:\\.\\d+)*)${extract.suffix}"
