# -*- 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
PortGroup                   github 1.0
PortGroup                   linear_algebra 1.1
PortGroup                   mpi 1.0

github.setup                ramkikannan planc af1c4c56685aa03ab50834869e98e1c58654e63d
version                     2023.06.22
revision                    0
categories                  math parallel
license                     Permissive
maintainers                 nomaintainer
description                 Distributed NMF/NTF Library
long_description            Parallel Low-rank Approximation with Nonnegativity Constraints (PLANC).
homepage                    https://ramkikannan.com/planc-api
checksums                   rmd160  58cf2bc0dedd8d0d5684576293a88ca673acab81 \
                            sha256  9bd1f96a718fdb1f512750964d677b72a14b63e5099ac4b8feb1320e9da1dc3f \
                            size    246148
github.tarball_from         archive

mpi.setup                   require require_fortran

depends_lib-append          port:armadillo

if {![variant_isset accelerate] && ![variant_isset atlas] && ![variant_isset blis] \
    && ![variant_isset flexiblas] && ![variant_isset openblas]} {
        default_variants-append +openblas
}

# armadillo wants C++14 now:
# compiler_check.hpp:87:98: note: '#pragma message: INFO: support for C++11 is deprecated;
# minimum recommended standard is C++14
patchfiles-append           patch-c++14.diff

# ommon/utils.hpp:32:32: error: narrowing conversion of '10000000000'
# from 'long long int' to 'ULONG' {aka 'long unsigned int'} [-Wnarrowing]
# https://github.com/ramkikannan/planc/issues/8
if {${configure.build_arch} in [list arm i386 ppc]} {
    patchfiles-append       patch-32-bit.diff
}

if {[variant_isset openblas]} {
    post-patch {
        reinplace "s|cblas.h|cblas_openblas.h|" \
                            ${worksrcpath}/common/tensor.hpp \
                            ${worksrcpath}/common/utils.hpp \
                            ${worksrcpath}/dimtree/ddttensor.h \
                            ${worksrcpath}/ntf/auntf.hpp
    }
}

# Target "sparse_hiernmf" requires the language dialect "CXX11"
compiler.cxx_standard       2014
# Pretty random:
compiler.openmp_version     3.5

configure.args-append       -DCMAKE_BUILD_CUDA=OFF
