# $Id: Portfile 60102 2009-11-02 00:07:19Z mmoll@macports.org $

PortSystem      1.0

name            slepc
version         3.0.0-p7
categories      math science
maintainers     mmoll
description     Scalable Library for Eigenvalue Problem Computations
long_description    SLEPc is a software library for the solution of large \
    scale sparse eigenvalue problems on parallel computers. It is an \
    extension of PETSc and can be used for either standard or generalized \
    eigenproblems, with real or complex arithmetic. It can also be used for \
    computing a partial SVD of a large, sparse, rectangular matrix.
platforms       darwin
homepage        http://www.grycap.upv.es/slepc
master_sites    http://www.grycap.upv.es/slepc/download/distrib
distname        ${name}-${version}
universal_variant   no

patchfiles      patch-config-configure.py.diff

checksums           md5     9a5da74c6cc2e48116619d5add242d84 \
                    sha1    1b90ca18c12258f1aeceace4fc7a179b6b5f5fb6 \
                    rmd160  4287dcaa106f3bd2c7dddca7f188e8da255af9c7

depends_lib-append  port:petsc

extract.suffix  .tgz
configure.env-append    PETSC_DIR=${prefix}/lib/petsc \
                SLEPC_DIR=${worksrcpath}
configure.cmd   ${worksrcpath}/config/configure.py
configure.args  --prefix=${prefix}/lib/petsc
build.env       PETSC_DIR=${prefix}/lib/petsc  \
                SLEPC_DIR=${worksrcpath}
destroot.env    PETSC_DIR=${prefix}/lib/petsc PETSC_ARCH=. \
                SLEPC_DIR=${worksrcpath}
destroot.destdir    SLEPC_INSTALL_DIR=${destroot}${prefix}/lib/petsc

variant arpack description {compile with ARPACK support} {
    pre-fetch {
        if {![file exists ${prefix}/lib/libparpack.a]} {
            return -code error "Please install the mpi variant of arpack first."
        }
    }
    # This is a rather fragile way to figure out where the fortran library can be
    # found that is needed to link against libparpack.a:
    if {[file exists ${prefix}/lib/gcc43]} {
        set fortrandir ${prefix}/lib/gcc43
    } else {
        if {[file exists ${prefix}/lib/gcc42]} {
            set fortrandir ${prefix}/lib/gcc42
        } else {
            if {[file exists ${prefix}/lib/g95]} {
                set fortrandir ${prefix}/lib/gcc95
            } else {
                return -code error "Please install a fortran compiler by installing one of the following ports: gcc42, gcc43, or g95."
            }
        }
    }
    depends_lib-append      port:arpack
    configure.args-append   --with-arpack-dir=${fortrandir} \
                --with-arpack-flags=-lparpack,-larpack,-lgfortran,-lmpi_f77
}

post-activate {
    ui_msg "********************************************************"
    ui_msg "* Add the following lines to your .bash_profile if you *"
    ui_msg "* plan to use the PETSC/SLEPC makefile rules in        *"
    ui_msg "* $prefix/lib/petsc/conf:                              *"
    ui_msg "*                                                      *"
    ui_msg "*   export PETSC_DIR=${prefix}/lib/petsc               *"
    ui_msg "*   export SLEPC_DIR=${prefix}/lib/petsc               *"
    ui_msg "*                                                      *"
    ui_msg "********************************************************"
}

livecheck.type  regex
livecheck.url   http://www.grycap.upv.es/slepc/download/download.htm
livecheck.regex slepc-(\[0-9.\]+(-p\[0-9\]+))\\.tgz
