# -*- coding: utf-8; mode: tcl; tab-width: 4; c-basic-offset: 4 -*-

PortSystem          1.0
PortGroup           python 1.0
PortGroup           active_variants 1.1

set realname        graph-tool
name                py-${realname}
version             2.29
revision            0
epoch               20190711
categories          python science
platforms           darwin
license             GPL-3
maintainers         skewed.de:tiago {mmoll @mamoll}
description         Efficient python graph module
long_description    graph-tool is an efficient python module for manipulation \
                    and statistical analysis of graphs. The internal data \
                    structures and most algorithms are implemented in C++ with \
                    the Boost Graph Library.
homepage            http://graph-tool.skewed.de
master_sites        http://downloads.skewed.de/graph-tool/
use_bzip2           yes
checksums           rmd160  ad784fc2ffe7dd745d8cadfd90bae2a03eef3116 \
                    sha256  6c0c4336bed6e2f79c91ace6d6914145ee03d0bd5025473b5918aec2b0657f7a \
                    size    15068583
distname            ${realname}-${version}

python.versions     27 35 36 37
python.default_version 27

if {${os.major} <= 12 && ${os.platform} eq "darwin"} {
    version         2.2.26
    revision        0
    master_sites    https://downloads.skewed.de/graph-tool/old/
    distname        ${realname}-${version}
    checksums       md5     317b29de0d3ef715fdc9281e078cfb17 \
                    sha1    108be4cf6212eb6886f172ea03813187f73e4c3c \
                    rmd160  cd2e8506522821750d70a97b951254f0a133d218
} else {
    if {${name} ne ${subport}} {
        compiler.cxx_standard   2017

        variant openmp description "Enable OpenMP" {
            # make sure libomp is installed at runtime, even if the compiler gets uninstalled
            depends_lib-append    lib:${prefix}/lib/libomp/libomp:libomp
            configure.args-append --enable-openmp
        }

        variant clang60 requires openmp conflicts clang70 description "Use clang-6.0 and enable OpenMP" {
            configure.compiler  macports-clang-6.0
        }
        variant clang70 requires openmp conflicts clang60 description "Use clang-7.0 and enable OpenMP" {
            configure.compiler  macports-clang-7.0
        }
        default_variants +openmp
        if {![variant_isset clang60]} {
            default_variants-append +clang70
        }
    }
}


if {${name} ne ${subport}} {
    universal_variant  no
    depends_build-append port:pkgconfig
    depends_lib-append port:boost \
                       port:cairomm \
                       port:cgal \
                       port:expat \
                       path:bin/dot:graphviz \
                       port:py${python.version}-numpy \
                       port:py${python.version}-scipy \
                       port:py${python.version}-gobject3 \
                       port:py${python.version}-cairo
    use_configure      yes
    # parallel build starts swapping with 8GB of RAM.
    #use_parallel_build no

    # graph-tool relies on Boost.Python, so make sure it is installed.
    require_active_variants boost python${python.version}

    # PYTHON_EXTRA_LDFLAGS is set to work around incorrect detection of
    # link flags by configure
    if {[vercmp [macports_version] 2.5.99] >= 0} {
    configure.env-append PYTHON=${python.bin} \
                         PYTHON_VERSION=${python.branch} \
                         PYTHON_CPPFLAGS=-I${python.include} \
                         "PYTHON_LDFLAGS=-L${python.libdir}/.. -lpython${python.branch}" \
                         "PYTHON_EXTRA_LDFLAGS=-L${python.libdir}/.. -lpython${python.branch}"
    } else {
    configure.env-append PYTHON=${python.bin} \
                         PYTHON_VERSION=${python.branch} \
                         PYTHON_CPPFLAGS=-I${python.include} \
                         PYTHON_LDFLAGS="-L${python.libdir}/.. -lpython${python.branch}" \
                         PYTHON_EXTRA_LDFLAGS="-L${python.libdir}/.. -lpython${python.branch}"
    }
    # With python2.7 PYTHON_EXTRA_LIBS is determined to be
    # '-u _PyMac_Error Python.framework/Versions/2.7/Python'. Not clear whether
    # python2.7 or py-graph-tool's configure script is to blame, but we can easily
    # work around this:
    if {${python.version} eq "27"} {
        if {[vercmp [macports_version] 2.5.99] >= 0} {
        configure.env-append "PYTHON_EXTRA_LIBS=-u _PyMac_Error"
        } else {
        configure.env-append PYTHON_EXTRA_LIBS="-u _PyMac_Error"
        }
    }
    # Something similar is happening with python3.6
    if {${python.version} eq "36"} {
        if {[vercmp [macports_version] 2.5.99] >= 0} {
        configure.env-append "PYTHON_EXTRA_LIBS=-Wl,-stack_size,1000000 -framework CoreFoundation ${python.lib}"
        } else {
        configure.env-append PYTHON_EXTRA_LIBS="-Wl,-stack_size,1000000 -framework CoreFoundation ${python.lib}"
        }
    }
    configure.cppflags-append -I${prefix}/include -I${python.include}/..
    configure.ldflags-append -L${prefix}/lib
    configure.args-append \
        --with-boost=${prefix} \
        --exec-prefix=${python.prefix} \
        --with-expat=yes \
        --with-expat-inc=${prefix}/include \
        --with-expat-lib="-L${prefix}/lib -lexpat"

    # Clang uses the old libstc++ from gcc 4.2 before OS X 10.9. Boost doesn't
    # include some of the tr1 headers in libstdc++ and defines its own tr1
    # classes. This causes conflicts with sparsehash which insists on using
    # the old tr1 headers.
    if {[string match *gcc* ${configure.compiler}] ||
        ${os.major} >= 13 && ${os.platform} eq "darwin"} {
        depends_lib-append port:sparsehash
    } else {
        configure.args-append --disable-sparsehash
    }
    build.cmd          make
    build.target       all
    destroot.cmd       make
    destroot.destdir   DESTDIR=${destroot}

    variant gtk3 description "Enable interactive drawing with gtk3" {
        depends_lib-append port:gtk3 \
                           port:librsvg
    }

    post-destroot {
        file rename ${destroot}${prefix}/share/doc/graph-tool \
            ${destroot}${prefix}/share/doc/py${python.version}-graph-tool
    }
}

if {${name} eq ${subport}} {
    livecheck.type      regex
    livecheck.url       $homepage
    livecheck.regex     Download version (\[0-9.\]+)
} else {
    livecheck.type      none
}