# Maintainer: RafaĹ‚ Brzegowy <rafal.brzegowy@yahoo.com>

_realname=calculix-ccx
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=2.23
pkgrel=1
pkgdesc="CalculiX: 3D Structural Finite Element Program - Solver (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="http://www.calculix.de/"
msys2_repository_url='https://github.com/Dhondtguido/CalculiX'
license=('spdx:GPL-2.0-or-later')
depends=("${MINGW_PACKAGE_PREFIX}-arpack"
         "${MINGW_PACKAGE_PREFIX}-arpack64"
         "${MINGW_PACKAGE_PREFIX}-libwinpthread"
         "${MINGW_PACKAGE_PREFIX}-omp"
         "${MINGW_PACKAGE_PREFIX}-openblas"
         "${MINGW_PACKAGE_PREFIX}-openblas64"
         "${MINGW_PACKAGE_PREFIX}-pastix"
         $([[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]] || echo "${MINGW_PACKAGE_PREFIX}-gcc-libgfortran"))
makedepends=("${MINGW_PACKAGE_PREFIX}-fc"
             "${MINGW_PACKAGE_PREFIX}-spooles"
             "${MINGW_PACKAGE_PREFIX}-pkgconf")
source=("http://www.dhondt.de/ccx_${pkgver}.src.tar.bz2"
        "http://www.dhondt.de/gpl-2.0.txt"
        "ccx_mingw.patch"
        "ccx_ooc.patch"
        "ccx_numeric_format.patch"
        "ccx_adapt_main_pastix.patch")
sha256sums=('9c88385c10fb04f5dc6c4e98027a51bebdd8aee3920e05190d6c1dd08357d6e7'
            '8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643'
            '92033e09fcdf7b632e991666fec7ace3d28bf9e8e7609055f8d622d027e0d845'
            'dd81df3de137a05b45e39fe61830337e6405ec566148598dab2828a6d9780e8a'
            'ac9bbc6362b01209448826e1040bf06a762237abb758c3a4bb2452e0bf5b8ad6'
            '20c82f60ba7c412c6586ef2cbcecd62847684b08ce57a683530bc767952cbcde')

apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying $_patch"
    patch -Np1 -i "${srcdir}/$_patch"
  done
}

prepare() {
  cd "${srcdir}/CalculiX/ccx_${pkgver}/src"
  apply_patch_with_msg \
   ccx_mingw.patch \
   ccx_ooc.patch \
   ccx_numeric_format.patch \
   ccx_adapt_main_pastix.patch
}

build() {
  cd "${srcdir}/CalculiX/ccx_${pkgver}/src"

  CFLAGS+=" -fopenmp -Wno-incompatible-pointer-types -Wno-implicit-function-declaration -Wno-return-mismatch"
  if [[ ${MINGW_PACKAGE_PREFIX} != *-clang-* ]]; then
    FC=gfortran
    export FFLAGS="-fallow-argument-mismatch -fopenmp -O2 -cpp"
    export OMP_LIBS="-lgomp -lquadmath"
  else
    FC=flang
    export FFLAGS="-fopenmp -O2 -cpp -I${MINGW_PREFIX}/include"
    export OMP_LIBS="-lomp"
  fi

  make CC=${CC} FC=${FC} CCX_VERSION=${pkgver} -f Makefile_mingw_i4
  make CC=${CC} FC=${FC} CCX_VERSION=${pkgver} -f Makefile_mingw_i8
}

package()
{
  install -Dm755 "${srcdir}"/CalculiX/ccx_${pkgver}/src/ccx_i4/ccx_i4.exe "${pkgdir}"${MINGW_PREFIX}/bin/ccx.exe
  install -Dm755 "${srcdir}"/CalculiX/ccx_${pkgver}/src/ccx_i8/ccx_i8.exe "${pkgdir}"${MINGW_PREFIX}/bin/ccx_i8.exe

  install -Dm755 "${srcdir}"/gpl-2.0.txt "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE
}
