# -*- 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           github 1.0
PortGroup           legacysupport 1.1
PortGroup           linear_algebra 1.1
PortGroup           mpi 1.0

# strnlen, getline
legacysupport.newest_darwin_requires_legacy 10

github.setup        ElmerCSC elmerfem 85e16d005de298691faeeeaccde685fe5bac4da1
version             2026.02.26
revision            1
categories          science math aqua
license             GPL-2
maintainers         {@barracuda156 macos-powerpc.org:barracuda} openmaintainer
description         Elmer is a tool that can solve a large number of partial differential equations
long_description    {*}${description} making it an ideal tool for multiphysical problems. \
                    It includes models for structural mechanics, fluid dynamics, heat transfer, \
                    electromagnetics and beyond. Elmer can also be used on massively parallel HPC platforms.
homepage            https://www.elmerfem.org
checksums           rmd160  f5abb9f916951928e43e11f9d8716028b5b83710 \
                    sha256  15d794e4e69ff58f76b40f493d7f7e3b9703938460d9005f77fda88ccaddb9c1 \
                    size    66445952
github.tarball_from archive

mpi.setup           require require_fortran
compiler.blacklist-append \
                    {*gcc-[34].*} {macports-gcc-[56]} {clang < 700}
compiler.c_standard 1999
compiler.cxx_standard \
                    2011

depends_lib-append  port:hypre \
                    port:metis \
                    port:mumps \
                    port:parmetis \
                    port:scalapack \
                    port:SuiteSparse_AMD \
                    port:SuiteSparse_CAMD \
                    port:SuiteSparse_CCOLAMD \
                    port:SuiteSparse_CHOLMOD \
                    port:SuiteSparse_COLAMD \
                    port:SuiteSparse_UMFPACK

post-patch {
    reinplace "s,CMAKE_SYSTEM_PROCESSOR,CMAKE_OSX_ARCHITECTURES,g" ${worksrcpath}/cpack/ElmerCPack.cmake
}

# See: https://trac.macports.org/ticket/67502
configure.pre_args-delete \
                    -DCMAKE_INSTALL_NAME_DIR="${cmake.install_prefix}/lib"

if {![variant_isset accelerate] && ![variant_isset atlas] && ![variant_isset blis] \
    && ![variant_isset flexiblas] && ![variant_isset openblas]} {
        default_variants-append +accelerate
}

pre-configure {
    configure.args-append  \
                    ${cmake_linalglib} \
                    -DMPI_Fortran_COMPILER=${prefix}/bin/${mpi.fc}
}

if {${os.platform} eq "darwin" && ${os.major} < 13} {
    PortGroup       qt4 1.0

    configure.args-append \
                    -DQt4_LIBRARIES=${qt_dir}/lib \
                    -DQWT_INCLUDE_DIR=${qt_dir}/Library/Frameworks/qwt.framework/Versions/6/Headers \
                    -DQWT_LIBRARY=${qt_dir}/Library/Frameworks/qwt.framework/qwt \
                    -DWITH_QT5=OFF

    depends_lib-append  port:qwt61

    legacysupport.redirect_bins \
                    ElmerGrid ElmerGUI ElmerGUIlogger ElmerSolver ElmerSolver_mpi matc Mesh2D Radiators ViewFactors
} else {
    PortGroup       qt5 1.0

    qt5.depends_component   qtscript qtsvg qttools

    configure.args-append \
                    -DQWT_INCLUDE_DIR=${qt_dir}/lib/qwt.framework/Versions/6/Headers \
                    -DQWT_LIBRARY=${qt_dir}/lib/qwt.framework/qwt \
                    -DWITH_QT5=ON

    depends_lib-append  port:qwt-qt5
}

configure.args-append \
                    -DEXTERNAL_UMFPACK=ON \
                    -DHypre_INCLUDE_DIR=${prefix}/include/HYPRE \
                    -DMACPORTS_PREFIX=${prefix} \
                    -DUSE_CONTIGUOUS=OFF \
                    -DWITH_CONTRIB=OFF \
                    -DWITH_ELMERGUI=ON \
                    -DWITH_ELMERGUITESTER=OFF \
                    -DWITH_ELMERGUILOGGER=ON \
                    -DWITH_ElmerIce=OFF \
                    -DWITH_ELMERPOST=OFF \
                    -DWITH_FETI4I=OFF \
                    -DWITH_Hypre=ON \
                    -DWITH_LUA=OFF \
                    -DWITH_MKL=OFF \
                    -DWITH_MMG=OFF \
                    -DWITH_MPI=ON \
                    -DWITH_Mumps=ON \
                    -DWITH_NETCDF=OFF \
                    -DWITH_OCC=OFF \
                    -DWITH_OpenMP=OFF \
                    -DWITH_QWT=ON \
                    -DWITH_ROCALUTION=OFF \
                    -DWITH_Trilinos=OFF \
                    -DWITH_XIOS=OFF \
                    -DWITH_Zoltan=OFF

if {[string match macports-gcc* ${configure.compiler}]} {
    compiler.openmp_version 4.0
    configure.args-replace \
                    -DWITH_OpenMP=OFF -DWITH_OpenMP=ON
}

if {[string match *clang* ${configure.compiler}]} {
    # Load.c: error: call to undeclared function 'var_copy_transpose'; ISO C99 and later do not support implicit function declarations
    configure.cflags-append \
                    -Wno-error=implicit-function-declaration
}

variant ice description "Enable ElmerIce with support for NetCDF and HDF5" {
    depends_lib-append \
                    port:hdf5 \
                    port:netcdf \
                    port:netcdf-fortran

    mpi.enforce_variant hdf5

    configure.args-replace \
                    -DWITH_ElmerIce=OFF -DWITH_ElmerIce=ON \
                    -DWITH_NETCDF=OFF -DWITH_NETCDF=ON
}

default_variants-append +ice
