# Maintainer: Bruno Pagani <archange@archlinux.org>
# Maintainer: Carl Smedstad <carsme@archlinux.org>
# Contributor: Ronald van Haren <ronald.archlinux.org>
# Contributor: Stefan Husmann <stefan-husmann@t-online.de>
# Contributor: damir <damir@archlinux.org>
# Contributor: Tom K <tomk@runbox.com>

pkgbase=hdf5
pkgname=(
  hdf5
  hdf5-openmpi
)
pkgver=2.0.0
pkgrel=3
pkgdesc="General purpose library and file format for storing scientific data"
arch=(x86_64 aarch64)
url="https://www.hdfgroup.org/hdf5"
license=(BSD-3-Clause)
depends=(
  bash
  gcc-libs
  glibc
  libaec
  zlib
)
makedepends=(
  cmake
  gcc-fortran
  java-environment
  openmpi
  time
)
replaces=(hdf5-java)
provides=(hdf5-java)
source=("https://github.com/HDFGroup/hdf5/archive/hdf5_$pkgver/$pkgname-$pkgver.tar.gz")
sha512sums=('609e129f78c6777a0e64694de8ec638326a616ff9cbd916f310dc6f78435ef67194c5ab59faedda09c85c045c15ebe2ec4ce04fa905d5f74801600e067c27fcc')

build() {
  cd ${pkgbase}-${pkgbase}_${pkgver/_/-}
  local common_cmake_args=(
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX=/usr
    -Wno-dev
    -DHDF5_USE_GNU_DIRS=ON
    -DBUILD_STATIC_LIBS=OFF
    -DHDF5_BUILD_CPP_LIB=ON
    -DHDF5_BUILD_HL_LIB=ON
    -DHDF5_BUILD_FORTRAN=ON
    -DHDF5_BUILD_JAVA=ON
    -DHDF5_ENABLE_ZLIB_SUPPORT=ON
    -DHDF5_ENABLE_SZIP_SUPPORT=ON
    -DHDF5_ENABLE_SZIP_ENCODING=ON
    -DHDF5_INSTALL_CMAKE_DIR=lib/cmake/hdf5
  )
  cmake -S . -B build "${common_cmake_args[@]}"
  cmake -S . -B build-mpi "${common_cmake_args[@]}" \
    -DALLOW_UNSUPPORTED=ON \
    -DCMAKE_CXX_COMPILER=mpicxx \
    -DCMAKE_C_COMPILER=mpicc \
    -DCMAKE_Fortran_COMPILER=mpif90 \
    -DHDF5_ENABLE_PARALLEL=ON \
    -DHDF5_ALLOW_UNSUPPORTED=ON
  cmake --build build
  cmake --build build-mpi
}

check() {
  cd ${pkgbase}-${pkgbase}_${pkgver/_/-}
  local skipped_tests=(
    # Passes, but takes 100+ seconds, ain't nobody got time for that.
    H5SHELL-test_swmr
    H5TEST-dsets
    H5TEST-set_extent
    MPI_TEST_FORT_async_test
    MPI_TEST_FORT_parallel_test
    MPI_TEST_t_bigio
    MPI_TEST_t_cache
    MPI_TEST_t_pmulti_dset
    MPI_TEST_t_select_io_dset
    # Fails or times out, not sure why.
    H5_H5DUMP-f90_h5ex_t_vlen_F03
    MPI_TEST_H5DIFF-h5diff
    MPI_TEST_H5_f90_ph5_f90_filtered_writes_no_sel
    MPI_TEST_PERFORM_h5perf
    MPI_TEST_t_2Gio
    MPI_TEST_t_filters_parallel
    MPI_TEST_t_shapesame
    MPI_TEST_testphdf5
  )
  skipped_tests_pattern="${skipped_tests[0]}$(printf '|%s' "${skipped_tests[@]:1}")"
  ctest --test-dir build --output-on-failure --parallel -E "$skipped_tests_pattern"
  ctest --test-dir build-mpi --output-on-failure --parallel -E "$skipped_tests_pattern"
}

package_hdf5() {
  cd ${pkgbase}-${pkgbase}_${pkgver/_/-}
  DESTDIR="$pkgdir" cmake --install build
  rm -vr "$pkgdir/usr/share/LICENSE"
  install -vDm644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE
}

package_hdf5-openmpi() {
  pkgdesc+=" (OpenMPI version)"
  depends+=(openmpi)
  provides=(hdf5)
  conflicts=(hdf5)

  cd ${pkgbase}-${pkgbase}_${pkgver/_/-}
  DESTDIR="$pkgdir" cmake --install build-mpi
  rm -vr "$pkgdir/usr/share/LICENSE"
  install -vDm644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE
}
