# Contributor: Mehdi Chinoune <mehdi.chinoune@hotmail.com>

_realname=ADIOS2
pkgbase=mingw-w64-${_realname,,}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname,,}")
pkgver=2.9.2
pkgrel=1
pkgdesc="The Adaptable Input/Output System version 2 (mingw-w64)"
arch=(any)
mingw_arch=('mingw64' 'mingw32' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
msys2_references=(
  'archlinux: adios2'
)
msys2_repository_url="https://github.com/ornladios/ADIOS2/"
url="https://adios2.readthedocs.io/en/latest/"
license=('spdx:Apache-2.0')
depends=("${MINGW_PACKAGE_PREFIX}-blosc2"
         "${MINGW_PACKAGE_PREFIX}-bzip2"
         "${MINGW_PACKAGE_PREFIX}-gcc-libs"
         "${MINGW_PACKAGE_PREFIX}-hdf5"
         "${MINGW_PACKAGE_PREFIX}-libpng"
         "${MINGW_PACKAGE_PREFIX}-libsodium"
         "${MINGW_PACKAGE_PREFIX}-nlohmann-json"
         "${MINGW_PACKAGE_PREFIX}-pugixml"
         "${MINGW_PACKAGE_PREFIX}-pybind11"
         "${MINGW_PACKAGE_PREFIX}-yaml-cpp"
         "${MINGW_PACKAGE_PREFIX}-zeromq"
         "${MINGW_PACKAGE_PREFIX}-zlib")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             $([[ ${MINGW_PACKAGE_PREFIX} == *-clang-* && ${MSYSTEM} != *64 ]] || echo \
               "${MINGW_PACKAGE_PREFIX}-fc")
             "${MINGW_PACKAGE_PREFIX}-python"
             "${MINGW_PACKAGE_PREFIX}-python-numpy")
source=(https://github.com/ornladios/ADIOS2/archive/v${pkgver}/${_realname}-${pkgver}.tar.gz
        003-no-regex_h-with-clang.patch)
sha256sums=('78309297c82a95ee38ed3224c98b93d330128c753a43893f63bbe969320e4979'
            '379fe5edf3df2474edfe6515e0592af681c17f082fb4885b5cd554bdee11cd36')

# Helper macros to help make tasks easier #
apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -Nbp1 -i "${srcdir}/${_patch}"
  done
}

prepare() {
  cd "${srcdir}"/${_realname}-${pkgver}
  apply_patch_with_msg \
    003-no-regex_h-with-clang.patch
}

build() {
  mkdir -p "${srcdir}/build-${MSYSTEM}" && cd "${srcdir}/build-${MSYSTEM}"

  declare -a extra_config
  if check_option "debug" "n"; then
    extra_config+=("-DCMAKE_BUILD_TYPE=Release")
  else
    extra_config+=("-DCMAKE_BUILD_TYPE=Debug")
  fi

  LDFLAGS+=" -Wl,--export-all-symbols"
  CXXFLAGS+=" -Wno-narrowing"

  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  ${MINGW_PREFIX}/bin/cmake \
    -GNinja \
    -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
    ${extra_config[@]} \
    -DCMAKE_C_FLAGS=-Duint="\"unsigned int\"" \
    -DBUILD_SHARED_LIBS=ON \
    -DADIOS2_USE_EXTERNAL_DEPENDENCIES=ON \
    -DADIOS2_USE_Blosc2=ON \
    -DADIOS2_USE_BZip2=ON \
    -DADIOS2_USE_DataMan=ON \
    -DADIOS2_USE_Fortran=$([[ ${MINGW_PACKAGE_PREFIX} != *-clang-* || ${MSYSTEM} == *64 ]] && echo "ON" || echo "OFF") \
    -DADIOS2_USE_HDF5=ON \
    -DADIOS2_USE_Python=ON \
    -DADIOS2_USE_PNG=ON \
    -DADIOS2_USE_ZeroMQ=ON \
    -DADIOS2_USE_DataMan=OFF \
    -DADIOS2_USE_DataSpaces=OFF \
    -DADIOS2_USE_Endian_Reverse=OFF \
    -DADIOS2_USE_IME=OFF \
    -DADIOS2_USE_MGARD=OFF \
    -DADIOS2_USE_MPI=OFF \
    -DADIOS2_USE_Profiling=OFF \
    -DADIOS2_USE_SST=OFF \
    -DADIOS2_USE_SZ=OFF \
    -DADIOS2_USE_ZFP=OFF \
    -DPython_EXECUTABLE=${MINGW_PREFIX}/bin/python \
    -DADIOS2_BUILD_EXAMPLES=OFF \
    -DBUILD_TESTING=OFF \
    ../${_realname}-${pkgver}

  ${MINGW_PREFIX}/bin/cmake --build .
}

package() {
  cd "${srcdir}/build-${MSYSTEM}"
  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install .

  MSYS2_ARG_CONV_EXCL="-p" python -m compileall \
  -o 0 -o 1 -q -s"${pkgdir}" -p"/" "${pkgdir}${MINGW_PREFIX}/lib"

  install -D -m644 "${srcdir}"/${_realname}-${pkgver}/LICENSE \
    "${pkgdir}"${MINGW_PREFIX}/share/${_realname,,}/LICENSE
}
