# -*- 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

PortSystem          1.0
PortGroup           cmake 1.1

name                nds2-client-swig
version             0.16.10
revision            0

categories          science
platforms           darwin
license             GPL-2
maintainers         nomaintainer

description         Network Data Server Client
long_description    Client tool for accessing streamed LIGO data using the Network \
                    Data Server version 2.

homepage            https://wiki.ligo.org/Computing/NDSClient
master_sites        https://software.igwn.org/lscsoft/source/
use_bzip2           yes

checksums           rmd160  b4ba2c3e17387f13ccffcd496468b8cb1668946c \
                    sha256  ebc7f66d7c41f154f4a1ab3b2f4c574256c851d54f4e83031a68665c687b813e \
                    size    164730

depends_build-append \
                    port:pkgconfig

depends_lib-append \
                    port:nds2-client \
                    port:swig3

regsub -all -- "-swig$" ${name} {} basename

configure.args      -DPYTHON=false \
                    -DPYTHON_EXECUTABLE=false \
                    -DSWIG_EXECUTABLE:FILEPATH=${prefix}/bin/swig3 \
                    -DENABLE_SWIG_JAVA=no \
                    -DENABLE_SWIG_MATLAB=no \
                    -DENABLE_SWIG_OCTAVE=no \
                    -DENABLE_SWIG_PYTHON2=no \
                    -DENABLE_SWIG_PYTHON3=no \
                    -DCMAKE_INSTALL_SYSCONFDIR=${prefix}/etc \
                    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
                    -DCMAKE_EXPORT_COMPILE_COMMANDS=1

test.run            yes
test.cmd            ${prefix}/bin/ctest
test.target         -R '.*'

livecheck.type      regex
livecheck.url       ${master_sites}
livecheck.regex     {nds2-client-swig-(\d+(?:\.\d+)*).tar.bz2}

#========================================================================
# Create subports for Java
#========================================================================

subport ${basename}-java {
    PortGroup               java 1.0

    revision                0

    categories-append       java
    description             Java bindings for ${description}
    long_description        ${long_description} This package provides Java \
                            bindings, modules, and scripts.

    java.version            1.7+
    # Set fallback to an LTSava version
    java.fallback           openjdk8

    depends_build-append    port:swig3-java

    configure.javac         /usr/bin/javac -source 1.7 -target 1.7
    configure.args-replace  -DENABLE_SWIG_JAVA=no -DENABLE_SWIG_JAVA=yes

    destroot.target         install
    destroot.args-append    -C ${worksrcpath}/../build/java

    livecheck.type          none
}

#========================================================================
# Create subports for MATLAB
#========================================================================

subport ${basename}-matlab {
    PortGroup               java 1.0

    revision                0

    categories-append       matlab
    description             MATLAB bindings for ${description}
    long_description        ${long_description}. This package provides MATLAB \
                            bindings, modules, and scripts.

    java.version            1.7+
    # Set fallback to an LTS Java version
    java.fallback           openjdk8

    depends_build-append    port:swig3-java

    configure.javac         /usr/bin/javac -source 1.7 -target 1.7
    configure.args-replace  -DENABLE_SWIG_JAVA=no -DENABLE_SWIG_JAVA=yes

    depends_lib-append      port:${basename}-java

    destroot.target         install

    configure.args-replace  -DENABLE_SWIG_MATLAB=no -DENABLE_SWIG_MATLAB=yes

    destroot.args-append    -C ${worksrcpath}/../build/matlab

    livecheck.type          none
}

#========================================================================
# Create subports for Octave
#========================================================================

subport ${basename}-octave {
    revision                0
    categories-append       octave
    description             Octave bindings for ${description}
    long_description        ${long_description}. This package provides Octave \
                            bindings, modules, and scripts.

    depends_build-append    port:swig3-octave

    depends_lib-append      path:bin/octave:octave

    destroot.target         install
    destroot.args-append    pkgoctexecdir="${prefix}/share/octave/site/m"

    # At least as of Octave 3.2.4, the Octave C++ API does not work with clang.
    # compiler.blacklist-append *clang*
    configure.args-replace  -DENABLE_SWIG_OCTAVE=no -DENABLE_SWIG_OCTAVE=yes

    destroot.args-append    -C ${worksrcpath}/../build/octave

    livecheck.type          none
}

#========================================================================
# Create subports for each supported Python version
#========================================================================
foreach v {39} {
    set python.version      ${v}
    set python.branch       [string range ${python.version} 0 end-1].[string index ${python.version} end]
    set python.bin          ${prefix}/bin/python${python.branch}
    set python.prefix       ${frameworks_dir}/Python.framework/Versions/${python.branch}
    set python.site_packages \
                            "${python.prefix}/lib/python${python.branch}/site-packages"
    set python.pkgname      ""

    subport py${v}-${basename} {
        revision            0
        categories-append   python
        description         Python ${python.version} bindings for ${description}
        long_description    ${long_description}. This package provides Python \
                            ${python.version} bindings, modules, and scripts.

        depends_build-append \
                            port:swig3-python

        depends_lib-append  port:python${python.version} \
                            port:py${python.version}-numpy

        configure.python    ${python.bin}
        configure.args-replace  \
                            -DPYTHON=false -DPYTHON=${python.bin} \
                            -DPYTHON_EXECUTABLE=false -DPYTHON_EXECUTABLE=${python.bin}

        switch -glob -- ${v} {
            "2*" { configure.args-replace \
                -DENABLE_SWIG_PYTHON2=no "-DENABLE_SWIG_PYTHON2=yes -DPYTHON2_VERSION=${python.branch}" }
            "3*" -
            default { configure.args-replace \
                -DENABLE_SWIG_PYTHON3=no "-DENABLE_SWIG_PYTHON3=yes -DPYTHON3_VERSION=${python.branch}" }
        }
        configure.args-append \
                            -DPYTHON${python.version}_MODULE_INSTALL_DIR="${python.site_packages}" \
                            -DPYTHON${python.version}_EXTMODULE_INSTALL_DIR="${python.site_packages}" \
                            -DSWIG_CPPFLAGS="-I${python.prefix}/include"

        destroot.target     install
        destroot.args-append \
                            -C ${worksrcpath}/../build/python

    post-destroot {
      if {${subport} eq "py27-${basename}"} {
        foreach script [glob -tails -nocomplain -directory ${destroot}${python.prefix}/bin *] {
          file link -symbolic ${destroot}${prefix}/bin/${script} ../Library/Frameworks/Python.framework/Versions/${python.version}/bin/${script}
        }
      }
    }

    livecheck.type          none
  }
}
