# Maintainer: Sergey Popov <popov.sa@gmail.com>
# Contributor: Mario Emmenlauer <memmenlauer@biodataanalysis.de>

_realname=vtk
pkgbase="mingw-w64-${_realname}"
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=9.2.6
pkgrel=12
pkgdesc="A software system for 3D computer graphics, image processing and visualization (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
url="https://www.vtk.org/"
license=("spdx:BSD-3-Clause")
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
         "${MINGW_PACKAGE_PREFIX}-double-conversion"
         "${MINGW_PACKAGE_PREFIX}-expat"
         "${MINGW_PACKAGE_PREFIX}-fmt"
         "${MINGW_PACKAGE_PREFIX}-glew"
         "${MINGW_PACKAGE_PREFIX}-tbb"
         "${MINGW_PACKAGE_PREFIX}-jsoncpp"
         "${MINGW_PACKAGE_PREFIX}-libharu"
         "${MINGW_PACKAGE_PREFIX}-libwinpthread-git"
         "${MINGW_PACKAGE_PREFIX}-lz4"
         "${MINGW_PACKAGE_PREFIX}-omp"
         "${MINGW_PACKAGE_PREFIX}-openxr-sdk"
         "${MINGW_PACKAGE_PREFIX}-pugixml"
         "${MINGW_PACKAGE_PREFIX}-xz"
         "${MINGW_PACKAGE_PREFIX}-zlib")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             "${MINGW_PACKAGE_PREFIX}-adios2"
             "${MINGW_PACKAGE_PREFIX}-boost"
             "${MINGW_PACKAGE_PREFIX}-cgns"
             "${MINGW_PACKAGE_PREFIX}-cli11"
             "${MINGW_PACKAGE_PREFIX}-eigen3"
             "${MINGW_PACKAGE_PREFIX}-ffmpeg"
             "${MINGW_PACKAGE_PREFIX}-fontconfig"
             "${MINGW_PACKAGE_PREFIX}-freetype"
             "${MINGW_PACKAGE_PREFIX}-gdal"
             "${MINGW_PACKAGE_PREFIX}-gl2ps"
             "${MINGW_PACKAGE_PREFIX}-hdf5"
             "${MINGW_PACKAGE_PREFIX}-libjpeg"
             "${MINGW_PACKAGE_PREFIX}-liblas"
             "${MINGW_PACKAGE_PREFIX}-libmariadbclient"
             "${MINGW_PACKAGE_PREFIX}-libpng"
             "${MINGW_PACKAGE_PREFIX}-libogg"
             "${MINGW_PACKAGE_PREFIX}-libtheora"
             "${MINGW_PACKAGE_PREFIX}-libtiff"
             "${MINGW_PACKAGE_PREFIX}-libxml2"
             "${MINGW_PACKAGE_PREFIX}-netcdf"
             "${MINGW_PACKAGE_PREFIX}-openslide"
             "${MINGW_PACKAGE_PREFIX}-openturns"
             "${MINGW_PACKAGE_PREFIX}-openvdb"
             "${MINGW_PACKAGE_PREFIX}-openvr"
             "${MINGW_PACKAGE_PREFIX}-pdal"
             # "${MINGW_PACKAGE_PREFIX}-pegtl" https://gitlab.kitware.com/vtk/vtk/-/issues/18151
             "${MINGW_PACKAGE_PREFIX}-postgresql"
             "${MINGW_PACKAGE_PREFIX}-proj"
             "${MINGW_PACKAGE_PREFIX}-python"
             $([[ ${CARCH} != i686 ]] && echo \
               "${MINGW_PACKAGE_PREFIX}-qt6-declarative" || echo \
               "${MINGW_PACKAGE_PREFIX}-qt5-declarative")
             "${MINGW_PACKAGE_PREFIX}-sqlite3"
             # "${MINGW_PACKAGE_PREFIX}-tk"
             "${MINGW_PACKAGE_PREFIX}-unixodbc"
             "${MINGW_PACKAGE_PREFIX}-utf8cpp"
             )
optdepends=("${MINGW_PACKAGE_PREFIX}-adios2: I/O ADIOS2"
            "${MINGW_PACKAGE_PREFIX}-boost: InfovisBoost and InfovisBoostGraphAlgorithms modules"
            "${MINGW_PACKAGE_PREFIX}-cgns: CGNS Reader"
            "${MINGW_PACKAGE_PREFIX}-ffmpeg: I/O FFMPEG"
            "${MINGW_PACKAGE_PREFIX}-fontconfig: Freetype/Fontconfig Rendering"
            "${MINGW_PACKAGE_PREFIX}-freetype: Freetype Rendering"
            "${MINGW_PACKAGE_PREFIX}-gdal: I/O GDAL"
            "${MINGW_PACKAGE_PREFIX}-gl2ps: PS Rendering"
            "${MINGW_PACKAGE_PREFIX}-hdf5: I/O HDF5"
            "${MINGW_PACKAGE_PREFIX}-libjpeg: I/O Images"
            "${MINGW_PACKAGE_PREFIX}-liblas"
            "${MINGW_PACKAGE_PREFIX}-libmariadbclient: interface to MySQL/MariaDB"
            "${MINGW_PACKAGE_PREFIX}-libpng: I/O Images"
            "${MINGW_PACKAGE_PREFIX}-libogg: I/O OGG and Theora"
            "${MINGW_PACKAGE_PREFIX}-libtheora: I/O OGG and Theora"
            "${MINGW_PACKAGE_PREFIX}-libtiff: I/O Images"
            "${MINGW_PACKAGE_PREFIX}-libxml2: Infovis"
            "${MINGW_PACKAGE_PREFIX}-netcdf: I/O netCDF"
            "${MINGW_PACKAGE_PREFIX}-openslide: DomainsMicroscopy"
            "${MINGW_PACKAGE_PREFIX}-openturns"
            "${MINGW_PACKAGE_PREFIX}-openvdb: I/O OpenVDB"
            "${MINGW_PACKAGE_PREFIX}-openvr: OpenVR Rendering"
            "${MINGW_PACKAGE_PREFIX}-pdal: I/O PDAL"
            "${MINGW_PACKAGE_PREFIX}-postgresql: interface to PostgreSQL"
            "${MINGW_PACKAGE_PREFIX}-proj: GEOVis"
            "${MINGW_PACKAGE_PREFIX}-python: Python bindings"
            "${MINGW_PACKAGE_PREFIX}-python-matplotlib: Matplotlib renderer"
            "${MINGW_PACKAGE_PREFIX}-sqlite3: Interface to SQL"
            # "${MINGW_PACKAGE_PREFIX}-tk: TCL bindings, Python Tk widgets"
            "${MINGW_PACKAGE_PREFIX}-unixodbc")
if [[ ${CARCH} != i686 ]]; then
  optdepends+=("${MINGW_PACKAGE_PREFIX}-qt6-base: Qt Rendering"
               "${MINGW_PACKAGE_PREFIX}-qt6-declarative: Qt Qml plugin")
else
  optdepends+=("${MINGW_PACKAGE_PREFIX}-qt5-base: Qt Rendering"
               "${MINGW_PACKAGE_PREFIX}-qt5-declarative: Qt Qml plugin")
fi
source=(https://www.vtk.org/files/release/${pkgver%.*}/VTK-${pkgver}.tar.gz
        "001-Fix-PDAL-link-on-windows.patch::https://gitlab.kitware.com/vtk/vtk/-/commit/8f99a16f.patch"
        "007-dll-export-some-functions.patch"
        "https://gitlab.kitware.com/vtk/vtk/-/merge_requests/9857.patch"
        "https://gitlab.kitware.com/vtk/vtk/-/merge_requests/10113.patch"
        "https://gitlab.kitware.com/vtk/vtk/-/merge_requests/10304.patch"
        "fmt-10.patch")
sha256sums=('06fc8d49c4e56f498c40fcb38a563ed8d4ec31358d0101e8988f0bb4d539dd12'
            'f1cea5729a230c97e7421b0928eb6af29e7c138d83a00c146db09bf02c93cf2c'
            'a9b9292be90c259f0aa058e3f4a7a08b6218f20e6cb2a71e214acda2d2302a50'
            'f7a2cf8db2d3ee04460bf692c57cdf8bb9d8fca6dec69333e61f01d902294f07'
            '79eae9ff919a36f79ba91916fdc8b2c7312713ad13a6972a6d38220f229b1887'
            '2f2ee0a2450d190dd6eaab7efef615fe85c8099e28c3dae5d35db6303cc82bfe'
            'c60aa3276a3d7c0e6ae4db5f18a8023ab319ac7d2ff66616936012097e6cebbe')

# 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 \
    001-Fix-PDAL-link-on-windows.patch

  # Succeed with Clang but failed with GCC!
  if [[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]]; then
    apply_patch_with_msg \
      007-dll-export-some-functions.patch
  fi

  # Fix compilation with newer ADIOS2
  apply_patch_with_msg 9857.patch

  # Fix compilation with GCC13
  apply_patch_with_msg 10113.patch

  # Fix building against OpenTURNS 1.21: Drop OPENTURNS_USE_FILE
  apply_patch_with_msg 10304.patch

  # https://gitlab.archlinux.org/archlinux/packaging/packages/vtk/-/raw/bd98ba38/fmt-10.patch
  apply_patch_with_msg fmt-10.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

  CFLAGS+=" ${CPPFLAGS}"
  CXXFLAGS+=" ${CPPFLAGS} -Wno-attributes -Wno-ignored-attributes -Wno-deprecated-declarations"

  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  ${MINGW_PREFIX}/bin/cmake \
    -Wno-dev \
    -G"Ninja" \
    ${extra_config[@]} \
    -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \
    -DCMAKE_INSTALL_LICENSEDIR=share/licenses/vtk \
    -DBUILD_SHARED_LIBS=ON \
    -DPython3_EXECUTABLE="${MINGW_PREFIX}/bin/python.exe" \
    -DVTK_BUILD_TESTING=OFF \
    -DVTK_VERSIONED_INSTALL=OFF \
    -DVTK_BUILD_ALL_MODULES=ON \
    -DVTK_GROUP_ENABLE_MPI=NO \
    -DVTK_GROUP_ENABLE_Web=NO \
    -DVTK_MODULE_ENABLE_VTK_vtkm=NO \
    -DVTK_USE_EXTERNAL=ON \
    -DVTK_MODULE_USE_EXTERNAL_VTK_exprtk=OFF \
    -DVTK_MODULE_USE_EXTERNAL_VTK_ioss=OFF \
    -DVTK_MODULE_USE_EXTERNAL_VTK_pegtl=OFF \
    -DVTK_MODULE_USE_EXTERNAL_VTK_verdict=OFF \
    -DVTK_WRAP_JAVA=OFF \
    -DVTK_WRAP_PYTHON=ON \
    -DVTK_SMP_IMPLEMENTATION_TYPE=TBB \
    -DVTK_SMP_ENABLE_SEQUENTIAL=ON \
    -DVTK_SMP_ENABLE_STDTHREAD=ON \
    -DVTK_SMP_ENABLE_OPENMP=ON \
    -DVTK_USE_VIDEO_FOR_WINDOWS=ON \
    -DVTK_ENABLE_OSPRAY=OFF \
    ../${_realname}-${pkgver}

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

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

  install -Dm644 "${srcdir}/${_realname}-${pkgver}/Copyright.txt" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE"
}
