# -*- coding: utf-8; mode: tcl; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; truncate-lines: t -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           bitbucket 1.0
PortGroup           cmake 1.1
PortGroup           mpi 1.0

bitbucket.setup     fenics-project dolfin 2019.1.0
revision            3
categories          math
license             LGPL-3+
platforms           darwin
universal_variant   no
maintainers         nomaintainer
description         DOLFIN is a part of FEniCS
long_description    DOLFIN is a library that functions as the main user interface of FEniCS

checksums           rmd160  ce75ed93b3f111364444e2e337add3408b81fa4c \
                    sha256  42b30031ea77089304b2d986212b4fab54b3dc216041bda4b7a946a9bd6e10a1 \
                    size    6542964

mpi.setup           require

set python.version  312
set python.branch   [string index ${python.version} 0].[string range ${python.version} 1 end]

patchfiles-append   patch-VTK.diff

configure.args-append \
                    -DBOOST_ROOT=${prefix}/libexec/boost/1.76 \
                    -DPYTHON_EXECUTABLE:FILEPATH=${prefix}/bin/python${python.branch} \
                    -DPYTHON_INCLUDE_DIR:PATH=${frameworks_dir}/Python.framework/Headers \
                    -DDOLFIN_INSTALL_PYTHON_MODULE_DIR=${frameworks_dir}/Python.framework/Versions/${python.branch}/lib/python${python.branch}/site-packages \
                    -DDOLFIN_INSTALL_PYTHON_PURE_MODULE_DIR=${frameworks_dir}/Python.framework/Versions/${python.branch}/lib/python${python.branch}/site-packages \
                    -DDOLFIN_ENABLE_CGAL:BOOL=OFF \
                    -DDOLFIN_ENABLE_DOCS:BOOL=OFF \
                    -DDOLFIN_ENABLE_HDF5:BOOL=OFF \
                    -DDOLFIN_ENABLE_MPI:BOOL=ON \
                    -DDOLFIN_ENABLE_PARMETIS:BOOL=OFF \
                    -DDOLFIN_ENABLE_PETSC:BOOL=OFF \
                    -DDOLFIN_ENABLE_PETSC4PY:BOOL=OFF \
                    -DDOLFIN_ENABLE_SCOTCH:BOOL=OFF \
                    -DDOLFIN_ENABLE_SLEPC:BOOL=OFF \
                    -DDOLFIN_ENABLE_SLEPC4PY:BOOL=OFF \
                    -DDOLFIN_ENABLE_SPHINX:BOOL=OFF \
                    -DDOLFIN_ENABLE_TRILINOS:BOOL=OFF \
                    -DDOLFIN_ENABLE_CHOLMOD:BOOL=OFF \
                    -DDOLFIN_ENABLE_UMFPACK:BOOL=OFF \
                    -DDOLFIN_ENABLE_PASTIX:BOOL=OFF \
                    -DDOLFIN_ENABLE_SUNDIALS:BOOL=OFF

depends_build-append \
                    port:pkgconfig

depends_lib-append  port:armadillo \
                    port:boost176 \
                    path:share/pkgconfig/eigen3.pc:eigen3 \
                    port:py${python.version}-ffc \
                    port:py${python.version}-ply

mpi.enforce_variant \
                    armadillo boost176

configure.post_args ..
configure.dir       ${worksrcpath}/build
build.dir           ${worksrcpath}/build

post-patch {
    file mkdir ${worksrcpath}/build
    # delete the message telling users to source a bash file, which is unneeded
    # for the macports version
    delete ${worksrcpath}/cmake/post-install/
    reinplace "s,add_subdirectory(cmake/post-install),," ${worksrcpath}/CMakeLists.txt

    # we also need to find and replace all instances of '/usr/bin/env python'
    system -W ${worksrcpath} "find . -type f -exec /usr/bin/perl -pi -e 's,/usr/bin/env python,${prefix}/bin/python3.6,' {} +"
}

# dolfin's configure seems to be too good at find default compilers so we
# explicitly set them here
pre-configure {
    mpi.enforce_variant   boost
    configure.args-append \
                    -DCMAKE_C_COMPILER=${configure.cc} \
                    -DCMAKE_CXX_COMPILER=${configure.cxx} \
                    -DCMAKE_Fortran_COMPILER=${configure.fc} \
                    -DMPI_C_COMPILER=${mpi.cc} \
                    -DMPI_CXX_COMPILER=${mpi.cxx} \
                    -DMPI_Fortran_COMPILER=${mpi.fc} \
                    -DMPIEXEC=${mpi.exec}
}

variant cgal description {Build with CGAL interface} {
    depends_lib-append    port:cgal4
    configure.args-delete -DDOLFIN_ENABLE_CGAL:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_CGAL:BOOL=ON
}

variant docs description {Build documentation} {
    depends_lib-append    port:py${python.version}-sphinx
    configure.args-delete -DDOLFIN_ENABLE_DOCS:BOOL=OFF \
                          -DDOLFIN_ENABLE_SPHINX:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_DOCS:BOOL=ON \
                          -DDOLFIN_ENABLE_SPHINX:BOOL=ON \
                          -DSPHINX_EXECUTABLE:FILEPATH=${prefix}/bin/sphinx-build-${python.branch}
}

variant hdf5 description {Build with HDF5 interface} {
    depends_lib-append    port:hdf5
    configure.args-delete -DDOLFIN_ENABLE_HDF5:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_HDF5:BOOL=ON
    mpi.enforce_variant   hdf5
}

variant parmetis description {Build with parmetisinterface} {
    depends_lib-append    port:parmetis
    configure.args-delete -DDOLFIN_ENABLE_PARMETIS:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_PARMETIS:BOOL=ON
    mpi.enforce_variant   parmetis
}

variant scotch description {Build with SCOTCH interface} {
    depends_lib-append    port:scotch
    configure.args-delete -DDOLFIN_ENABLE_SCOTCH:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_SCOTCH:BOOL=ON
    mpi.enforce_variant   scotch
}

variant suitesparse description {Build with SuiteSparse interface} {
    depends_lib-append    port:SuiteSparse_UMFPACK port:SuiteSparse_AMD
    configure.args-delete -DDOLFIN_ENABLE_CHOLMOD:BOOL=OFF \
                          -DDOLFIN_ENABLE_UMFPACK:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_CHOLMOD:BOOL=ON \
                          -DDOLFIN_ENABLE_UMFPACK:BOOL=ON
}

variant petsc description {Build with PETSc interface} {
    # dolfin assumes too much about petsc on the mac so we patch the cmake
    # files to remove this special logic
    depends_lib-append    port:petsc
    configure.args-delete -DDOLFIN_ENABLE_PETSC:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_PETSC:BOOL=ON
    configure.env-append  PETSC_DIR=${prefix}/lib/petsc PETSC_ARCH=
    mpi.enforce_variant   petsc
}

variant petsc4py description {Build with PETSc4py interface} requires petsc {
    depends_lib-append    port:py${python.version}-petsc4py
    configure.args-delete -DDOLFIN_ENABLE_PETSC4PY:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_PETSC4PY:BOOL=ON
}

variant slepc description {Build with SLEPc interface} requires petsc {
    depends_lib-append    port:slepc
    configure.args-delete -DDOLFIN_ENABLE_SLEPC:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_SLEPC:BOOL=ON
    configure.env-append  SLEPC_DIR=${prefix}/lib/slepc
}

variant slepc4py description {Build with SLEPc4py interface} requires slepc {
    depends_lib-append    port:py${python.version}-slepc4py
    configure.args-delete -DDOLFIN_ENABLE_SLEPC4PY:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_SLEPC4PY:BOOL=ON
}

default_variants +suitesparse
