# -*- 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
# $Id: Portfile 119604 2014-05-02 09:12:57Z ryandesign@macports.org $

PortSystem          1.0
PortGroup           bitbucket 1.0
PortGroup           cmake 1.0
PortGroup           mpi 1.0

mpi.setup           require

bitbucket.setup     fenics-project dolfin 1.3.0 dolfin-
revision            2
categories          math
platforms           darwin
universal_variant   no
maintainers         sean openmaintainer
description         DOLFIN is a part of FEniCS
long_description    DOLFIN is a library that functions as the main user interface of FEniCS

checksums           rmd160  0cb3316d43fc487519d967eb5da00756e907aec5 \
                    sha256  04ea667c25ca57c84436d9dfe0233d610fc7e25c3ade3fb8c6c38b1260d68dae

configure.args-append \
                    -DPYTHON_EXECUTABLE:FILEPATH=${prefix}/bin/python2.7 \
                    -DPYTHON_INCLUDE_DIR:PATH=${frameworks_dir}/Python.framework/Headers \
                    -DPYTHON_LIBRARY:FILEPATH=${prefix}/lib/libpython2.7.dylib \
                    -DDOLFIN_INSTALL_PYTHON_MODULE_DIR=${frameworks_dir}/Python.framework/Versions/2.7/lib/python2.7/site-packages \
                    -DDOLFIN_INSTALL_PYTHON_PURE_MODULE_DIR=${frameworks_dir}/Python.framework/Versions/2.7/lib/python2.7/site-packages \
                    -DDOLFIN_SKIP_BUILD_TESTS=ON \
                    -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_SPHINX:BOOL=OFF \
                    -DDOLFIN_ENABLE_TRILINOS:BOOL=OFF \
                    -DDOLFIN_ENABLE_CHOLMOD:BOOL=OFF \
                    -DDOLFIN_ENABLE_UMFPACK:BOOL=OFF

depends_lib         port:py27-ply \
                    port:armadillo \
                    port:py27-ffc \
                    port:qt4-mac \
                    port:vtk5

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

if {![mpi_variant_isset]} {
    default_variants +mpich
}

post-extract {
    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 perl -pi -e 's,/usr/bin/env python,${prefix}/bin/python2.7,' {} +"
}

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

variant cgal {
    depends_lib-append    port:cgal
    configure.args-delete -DDOLFIN_ENABLE_CGAL:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_CGAL:BOOL=ON
}

variant docs {
    depends_lib-append    port:py27-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-2.7
}

variant hdf5 {
    depends_lib-append    port:hdf5-18
    configure.args-delete -DDOLFIN_ENABLE_HDF5:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_HDF5:BOOL=ON
    mpi.enforce_variant   hdf5-18
}

variant parmetis {
    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 {
    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 {
    depends_lib-append    port:suitesparse
    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 {
    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 slepc requires petsc {
    depends_lib-append    port:slepc
    configure.args-delete -DDOLFIN_ENABLE_SLEPC:BOOL=OFF
    configure.args-append -DDOLFIN_ENABLE_SLEPC:BOOL=ON
}

default_variants +petsc +slepc +parmetis +suitesparse
