# -*- 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            dbus-python
version         1.2.0
revision        2

set python_versions {27 34 35}

# this default version should stay synchronized with python_get_default_version
#    in the python PortGroup
set python_default_version 27

maintainers     mcalhoun openmaintainer
license         MIT
categories      devel python
platforms       darwin
description     Python bindings for the dbus message bus system.
long_description \
    ${description}
homepage        https://www.freedesktop.org/wiki/Software/dbus/

if {${name} eq ${subport}} {
    # set up dbus-python as a stub port that depends on the default dbus-pythonXY
    master_sites {}
    fetch {}
    checksum {}
    extract {}
    supported_archs noarch

    depends_lib port:${name}${python_default_version}

    patch {}
    use_configure no
    build {}
    destroot {
        xinstall -d ${destroot}${prefix}/share/doc/${name}
        system "echo $name is a stub port > ${destroot}${prefix}/share/doc/${name}/README"
    }
}

foreach python_version ${python_versions} {

    set python_branch [string range ${python_version} 0 end-1].[string index ${python_version} end]

    subport ${name}${python_version} {

        master_sites    https://dbus.freedesktop.org/releases/dbus-python/

        checksums           rmd160  cba09a1ca259bfa49c943142110a968241f40360 \
                            sha256  e12c6c8b2bf3a9302f75166952cbe41d6b38c3441bbc6767dbd498942316c6df

        livecheck.type  regex
        livecheck.url   ${master_sites}?C=M&O=D
        livecheck.regex ${name}-(\\d+(?:\\.\\d+)*)

        distname        ${name}-${version}

        depends_build   port:pkgconfig

        depends_lib                               \
            path:bin/dbus-daemon:dbus             \
            port:dbus-glib                        \
            port:gettext                          \
            path:lib/pkgconfig/glib-2.0.pc:glib2  \
            port:libiconv \
            port:python${python_version}

        set python_prefix ${frameworks_dir}/Python.framework/Versions/${python_branch}

        configure.pre_args-replace --prefix=${prefix} --prefix=${python_prefix}

        configure.args                                                    \
            --docdir=${prefix}/share/doc/${subport}                       \
            --disable-html-docs                                           \
            --disable-api-docs

        set includedir_base ${python_prefix}/include/python${python_branch}
        set python_config ${prefix}/bin/python${python_branch}-config

        pre-configure {
            # determine any abiflags; works for Python 3+ only; will
            # catch for Python 2.7 and we know there are no flags.
            if {[catch {set abiflags [exec ${python_config} --abiflags]}]} {
                set abiflags ""
            }
            configure.args-append --includedir=${includedir_base}${abiflags}
        }

        configure.pkg_config_path  ${python_prefix}/lib/pkgconfig

        configure.python    ${prefix}/bin/python${python_branch}

        variant html description {Enable HTML documentation building} {}

        # pyXY-epydoc, which is required to build the api, is only supported on certain versions of python
        if { [lsearch -exact {27} ${python_version}] != -1 } {
            variant doc description {Enable API documentation building} {}
        }

        variant examples description {Install examples} {
            post-destroot {
                set docdir ${prefix}/share/doc/${subport}
                set exdir ${docdir}/examples
                xinstall -d ${destroot}${exdir}
                eval xinstall -m 644 [glob ${worksrcpath}/examples/*] ${destroot}${exdir}
            }
        }

        # pyXY-gobject, which is required to test, is only supported on certain versions of python
        if { [lsearch -exact {27 34 35} ${python_version}] != -1 } {
            variant test {}

            test.run yes
            test.target check
        }

        # ${python_version} and ${python_branch} do not have the right value inside variant block,
        #    so put it here.
        if { [variant_isset html] || ([variant_exists doc] && [variant_isset doc]) } {
            depends_build-append port:py${python_version}-docutils
            configure.env-append RST2HTML=${prefix}/bin/rst2html-${python_branch}.py
        }

        if { [variant_isset html] } {
            configure.args-replace --disable-html-docs --enable-html-docs
        }

        # ${python_version} and ${python_branch} do not have the right value inside variant block,
        #    so put it here.
        if { [variant_exists doc] && [variant_isset doc] } {
            depends_build-append port:py${python_version}-epydoc
            configure.args-replace --disable-api-docs --enable-api-docs
            configure.env-append EPYDOC=${prefix}/bin/epydoc-${python_branch}

            post-destroot {
                set docdir ${prefix}/share/doc/${subport}
                set apidir ${docdir}/api
                xinstall -d ${destroot}${apidir}
                eval xinstall -m 644 [glob ${worksrcpath}/api/*] ${destroot}${apidir}
            }
        }

        # ${python_version} and ${python_branch} do not have the right value inside variant block,
        #    so put it here.
        if { [variant_exists test] } {
            if { [variant_isset test] } {
                depends_build-append port:py${python_version}-gobject
            } else {
                pre-test {
                    ui_error "test variant must be activated to enable test support."
                    error "Please enable test variant."
                }
            }
        }

        platform darwin 9 {
            post-patch {
                reinplace "s| -export-symbols-regex.*| \\\\|g" \
                    ${worksrcpath}/_dbus_bindings/Makefile.in \
                    ${worksrcpath}/_dbus_glib_bindings/Makefile.in
            }
        }
    }
}

# Obsolete subports for Python versions 2.4, 2.5, 2.6, 3.1, 3.2, 3.3  created on 10/26/2014.
# See https://lists.macosforge.org/pipermail/macports-dev/2014-September/thread.html (Retiring Python 2.4 and 2.5)
foreach python_version { 24 25 26 31 32 33 } {
    set python_branch [string range ${python_version} 0 end-1].[string index ${python_version} end]

    if { "${name}${python_version}" eq ${subport}} {
        unset maintainers
        unset license
        unset categories
        unset platforms
        unset description
        unset long_description
        unset homepage
        depends_build
        depends_lib
    }

    subport ${name}${python_version} {
        if { [vercmp ${python_branch} 3.0] < 0 } {
            replaced_by  ${name}27
        } else {
            replaced_by ${name}34
        }
        PortGroup    obsolete 1.0
    }
}