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

name                    getdp
version                 3.3.0
revision                5
categories              science math
license                 GPL-2+
maintainers             {mcalhoun @MarcusCalhoun-Lopez} openmaintainer
platforms               darwin
description             a general environment for the treatment of discrete problems
long_description        \
    GetDP is a free finite element solver using mixed elements to discretize de Rham-type complexes in one, two and three dimensions.

homepage                https://getdp.info
master_sites            https://getdp.info/src

extract.suffix          .tgz
distname                ${name}-${version}-source

checksums               rmd160  f6d7fd125ae9249953c0be3f7cd83de5dc583567 \
                        sha256  eebef98fdef589e83a29d92599dfdd373d29fda6fbb31298f1e523be848fdbdd \
                        size    1876134

compiler.cxx_standard   2011

mpi.setup               require_fortran

patchfiles-append       patch-python_version.diff \
                        patch-fortran_lib.diff

# see https://gitlab.onelab.info/getdp/getdp/-/issues/61
patchfiles-append       patch-fortran_array.diff

depends_lib-append      port:arpack \
                        port:gsl

configure.args-append   -DENABLE_PETSC=OFF \
                        -DENABLE_SLEPC=OFF \
                        -DENABLE_HPDDM=OFF \
                        -DENABLE_BUILD_LIB=ON \
                        -DENABLE_BUILD_SHARED=ON \
                        -DENABLE_BUILD_DYNAMIC=ON \
                        -DENABLE_GMSH=OFF

mpi.enforce_variant     arpack

if {[mpi_variant_isset]} {
    configure.args-append -DENABLE_MPI=ON
}

pre-configure {
    configure.args-append \
        -DBLAS_LAPACK_LIBRARIES="-L${prefix}/lib ${linalglib}"
}

variant petsc description {Use PETSc linear solver} {
    configure.args-replace -DENABLE_PETSC=OFF \
                           -DENABLE_PETSC=ON
    configure.args-replace -DENABLE_SLEPC=OFF \
                           -DENABLE_SLEPC=ON
    configure.args-replace -DENABLE_HPDDM=OFF \
                           -DENABLE_HPDDM=ON
    configure.args-append  -DPETSC_DIR=${prefix}/lib/petsc \
                           -DSLEPC_DIR=${prefix}/lib/slepc \
                           -DCMAKE_INCLUDE_PATH=${prefix}/include/hpddm \
    depends_lib-append     port:petsc \
                           port:slepc \
                           port:hpddm
    mpi.enforce_variant    petsc
    mpi.enforce_variant    slepc
    mpi.enforce_variant    hpddm

    # from the Portfile for hpddm
    # see https://trac.macports.org/ticket/57608
    configure.ldflags-append -L${prefix}/lib -lmumps_common -lsmumps -ldmumps -lcmumps -lzmumps -lpord

    if {![mpi_variant_isset]} {
        ui_error "PETSc variant requires an MPI variant"
        return -code error "+petsc requires an MPI variant."
    }
}

variant python27 description {Build the Python 2.7 bindings} conflicts python38 {
    depends_lib-append port:python27
    post-patch {
        reinplace "s|__MACPORTS_PYTHON_VERSION__|2.7|g" ${worksrcpath}/CMakeLists.txt
    }
}

variant python38 description {Build the Python 3.8 bindings} conflicts python27 {
    depends_lib-append port:python38
    post-patch {
        reinplace "s|__MACPORTS_PYTHON_VERSION__|3.8|g" ${worksrcpath}/CMakeLists.txt
    }
}

if {![variant_isset python27] && ![variant_isset python38]} {
    configure.args-append \
        -DENABLE_PYTHON=OFF
}

if {![variant_isset python27] && ![variant_isset python38]} {
    # keep in sync with python PG
    default_variants +python38
}

variant gmsh description {Enable Gmsh functions (for field interpolation)} {
    depends_lib-append port:gmsh
    configure.args-replace -DENABLE_GMSH=OFF \
                           -DENABLE_GMSH=ON
}
default_variants        +gmsh
