# Maintainer: Stefan Biereigel <stefan@biereigel.de>

## options
: ${_build_python:=true}

_pkgtype="-git"

_pkgname="openems"
pkgbase="$_pkgname${_pkgtype:-}"
pkgver=0.0.36.r75.g954723d
pkgrel=1
pkgdesc="A free and open source EC-FDTD solver"
url="https://github.com/thliebig/openEMS"
license=('GPL-3.0-or-later')
arch=('i686' 'x86_64')

_depends_openems=(
  'boost-libs'
  'csxcad' # aur/csxcad-git
  'fmt'
  'fparser' # fparser-git
  'hdf5'
  'libpng'
  'tinyxml'
  'verdict'
  'vtk'
)
_depends_python=(
  'python'
  'python-csxcad' # aur/csxcad-git
  'python-h5py'
  'python-matplotlib'
  'python-numpy'
)
_makedeps_python=(
  'cython'
  'python-build'
  'python-installer'
  'python-setuptools'
  'python-wheel'
)

depends=(${_depends_openems[@]})
makedepends=(
  'boost'
  'cmake'
  'fast_float'
  'git'
  'ninja'
  'nlohmann-json'
  'openmpi'
)

if [[ "${_build_python::1}" == "t" ]]; then
  depends+=(${_depends_python[@]})
  makedepends+=(${_makedeps_python[@]})
fi

_pkgsrc="$_pkgname"
source=("$_pkgsrc"::"git+$url.git")
sha256sums=('SKIP')

pkgver() {
  cd "$_pkgsrc"
  git describe --long --tags --abbrev=7 \
    | sed -E 's/^v//;s/([^-]*-g)/r\1/;s/-/./g'
}

_build_openems() {
  local _cmake_options=(
    -B build
    -S "$_pkgsrc"
    -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX=/usr
    -DCMAKE_POLICY_VERSION_MINIMUM=3.5
    -Wno-dev
  )

  cmake "${_cmake_options[@]}"
  cmake --build build
  DESTDIR="$srcdir/deps" cmake --install build
}

_build_python-openems() (
  [ "${_build_python::1}" != "t" ] && return

  cd "$_pkgsrc/python"

  export CXXFLAGS LDFLAGS
  CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=?/_FORTIFY_SOURCE=2}"
  CXXFLAGS+=" -I${srcdir@Q}/deps/usr/include"
  LDFLAGS+=" -L${srcdir@Q}/deps/usr/lib"

  python -m build --no-isolation --wheel --skip-dependency-check
)

build() {
  _build_openems
  _build_python-openems
}

_package_openems() {
  provides=('openems')
  conflicts=('openems')

  depends=(
    ${_depends_openems[@]}
  )

  DESTDIR="$pkgdir" cmake --install build
}

_package_python-openems() {
  pkgdesc+=" - python module"

  depends=(
    ${_depends_python[@]}
    'openems'
  )

  provides=('python-openems')
  conflicts=('python-openems')

  cd "$_pkgsrc/python"
  python -m installer --destdir="$pkgdir" dist/*.whl
}

pkgname=("$_pkgname${_pkgtype:-}")
[[ "${_build_python::1}" == "t" ]] && pkgname+=("python-$_pkgname${_pkgtype:-}")

for _p in "${pkgname[@]}"; do
  _q="${_p%${_pkgtype:-}}"
  eval "package_$_p() {
    $(declare -f _package_$_q)
    _package_$_q
  }"
done