# -*- 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               compilers 1.0

name                    alps
version                 2.3.0
revision                16
checksums               rmd160  40a04447f7c6d26aff0124a3b0f879aedc981ed9 \
                        sha256  a40963811a05ad874e9f02747c532a4873095b94e183ecd31869199f58be1f65 \
                        size    127625225

categories              science
platforms               darwin
license                 Restrictive
# http://alps.comp-phys.org/static/software/ALPS/LICENSE.txt
maintainers             nomaintainer

description             Algorithms and Libraries for Physics Simulations

long_description        The ALPS project (Algorithms and Libraries for Physics Simulations) is an \
                        open-source effort aiming at providing high-end simulation codes for strongly \
                        correlated quantum mechanical systems as well as C++ libraries for simplifying \
                        the development of such code. ALPS strives to increase software reuse in the \
                        physics community.

homepage                http://alps.comp-phys.org/
master_sites            ${homepage}static/software/releases
distname                ${name}-${version}-src-with-boost

depends_lib             port:hdf5

compilers.choose        cc cxx
compilers.setup

patchfiles-append       patch-applications-dmft-qmc-CMakeLists.txt.diff

if {([c_variant_isset] && [clang_variant_isset] && ${configure.cxx_stdlib} eq "libc++") || (![c_variant_isset] && [string match *clang* ${configure.cxx}] && ${configure.cxx_stdlib} eq "libc++")} {
    compiler.cxx_standard 2011
    configure.cxxflags-append -std=c++11
}

configure.args-append   -DALPS_BUILD_TESTS=OFF                                                      \
                        -DALPS_INCLUDE_TUTORIALS=OFF                                                \
                        -DALPS_BOOST_LIBRARY_NAME=alps-boost                                        \
                        -DALPS_BUILD_APPLICATIONS=OFF                                               \
                        -DALPS_ENABLE_MPI=OFF                                                       \
                        -DBoost_ROOT_DIR:PATH=${worksrcpath}/boost                                  \
                        -DHDF5_dl_LIBRARY_DEBUG=NO                                                  \
                        -DHDF5_hdf5_LIBRARY_DEBUG=NO                                                \
                        -DHDF5_hdf5_hl_LIBRARY_DEBUG=NO                                             \
                        -DHDF5_m_LIBRARY_DEBUG=NO                                                   \
                        -DHDF5_z_LIBRARY_DEBUG=NO

cmake.source_dir        ${worksrcpath}/alps

use_parallel_build      yes

variant applications    description {compile ALPS with applications} {
    configure.args-delete -DALPS_BUILD_APPLICATIONS=OFF
}

# Mixing mpi and compilers portgroup created problems, so we define the mpi variants manually
variant openmpi conflicts mpich description "Add MPI parallelization using OpenMPI" {
    set c_variant [c_variant_name]
    if {${c_variant} == ""} {
        set mpi_port openmpi
        set mpi_suffix mp
    } {
        set mpi_port openmpi-${c_variant}
        set mpi_suffix ${c_variant}
    }
    depends_lib-append port:${mpi_port}
    compilers.enforce_c ${mpi_port}

    configure.args-delete -DALPS_ENABLE_MPI=OFF
    configure.args-append -DMPI_C=mpicc-openmpi-${mpi_suffix} -DMPI_CXX=mpicxx-openmpi-${mpi_suffix}
}

variant mpich conflicts openmpi description "Add MPI parallelization using MPICH" {
    set c_variant [c_variant_name]
    if {${c_variant} == ""} {
        set mpi_port mpich
        set mpi_suffix mp
    } {
        set mpi_port mpich-${c_variant}
        set mpi_suffix ${c_variant}
    }
    depends_lib-append port:${mpi_port}
    compilers.enforce_c ${mpi_port}
    configure.args-delete -DALPS_ENABLE_MPI=OFF
    configure.args-append -DMPI_C=mpicc-mpich-${mpi_suffix} -DMPI_CXX=mpicxx-mpich-${mpi_suffix}

}


set pythons_suffixes {27}
set pythons_ports {}
foreach s ${pythons_suffixes} {
    lappend pythons_ports python${s}
}
foreach s ${pythons_suffixes} {
    set p python${s}
    set v [string index ${s} 0].[string index ${s} 1]
    set i [lsearch -exact ${pythons_ports} ${p}]
    set c [lreplace ${pythons_ports} ${i} ${i}]
    variant ${p} description "Build ALPS for Python ${v}" conflicts {*}${c} "
        depends_lib-append port:${p}                                                            \
                           port:py${s}-numpy                                                    \
                           port:py${s}-matplotlib                                               \
                           port:py${s}-scipy

        patchfiles-append   patch-config-FindPython.cmake.diff

        post-patch {
            reinplace \"s|@PYTHON@|python[regsub {(.)(.+)} ${s} {\1.\2}]|g\" ${cmake.source_dir}/config/FindPython.cmake
        }
    "
}

set selected_version python27
foreach s ${pythons_suffixes} {
    if {[variant_isset python${s}]} {
        set selected_version python${s}
    }
}

default_variants        +${selected_version} +applications

# py-scipy and openmpi are not universal
universal_variant       no

livecheck.type          regex
livecheck.url           [lindex ${master_sites} 0]
livecheck.regex         ${name}-(\[0-9.\]+)-\[sr\]
