# 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=1.14.6
pkgrel=5
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"
  "$pkgbase-make-reproducible.patch"
)
sha256sums=('09ee1c671a87401a5201c06106650f62badeea5a3b3941e9b1e2e1e08317357f'
            '37eb26bd2fab59299401c5702b8f0ad23a57e6368a257c426f7ef5ed0ef5c9ca')

prepare() {
  cd ${pkgbase}-${pkgbase}_${pkgver/_/-}
  # Avoid injecting "Host system" into the libhdf5.settings, results in
  # differences when building on a host with different kernel version.
  patch -p1 < ../$pkgbase-make-reproducible.patch
}

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_Z_LIB_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
  cmake --build build
  cmake --build build-mpi
}

check() {
  cd ${pkgbase}-${pkgbase}_${pkgver/_/-}
  ctest --test-dir build --output-on-failure --parallel \
    -E 'H5_H5DUMP-f90_h5ex_t_stringC_F03'

  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_t_bigio
    MPI_TEST_t_cache
    # Fails or times out, not sure why.
    MPI_TEST_t_2Gio
    MPI_TEST_t_filters_parallel
    MPI_TEST_t_shapesame
    MPI_TEST_testphdf5
    # Holo: failing in CI
    MPI_TEST_H5DIFF-h5diff_601
  )
  skipped_tests_pattern="${skipped_tests[0]}$(printf '|%s' "${skipped_tests[@]:1}")"
  ctest --test-dir build-mpi --output-on-failure -E "$skipped_tests_pattern"
}

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

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/COPYING"
  install -vDm644 -t "$pkgdir/usr/share/licenses/$pkgname" COPYING
}
