# Maintainer: Mario Emmenlauer <memmenlauer@biodataanalysis.de>

_realname=gdcm
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=3.2.5
pkgrel=2
pkgdesc="The Grassroots DICOM library (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="https://gdcm.sourceforge.io/wiki/index.php"
msys2_repository_url="https://github.com/malaterre/GDCM"
license=("spdx:BSD-3-Clause-Clear")
depends=("${MINGW_PACKAGE_PREFIX}-expat"
         "${MINGW_PACKAGE_PREFIX}-cc-libs"
         "${MINGW_PACKAGE_PREFIX}-json-c"
         "${MINGW_PACKAGE_PREFIX}-libiconv"
         "${MINGW_PACKAGE_PREFIX}-libxml2"
         "${MINGW_PACKAGE_PREFIX}-openjpeg2"
         "${MINGW_PACKAGE_PREFIX}-openssl"
         "${MINGW_PACKAGE_PREFIX}-poppler"
         "${MINGW_PACKAGE_PREFIX}-zlib")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             "${MINGW_PACKAGE_PREFIX}-pkgconf"
             "${MINGW_PACKAGE_PREFIX}-libxslt"
             "${MINGW_PACKAGE_PREFIX}-docbook-xsl")
source=(#"https://downloads.sourceforge.net/project/gdcm/gdcm%202.x/GDCM%20${pkgver}/gdcm-${pkgver}.tar.bz2"
        https://github.com/malaterre/GDCM/archive/v${pkgver}/gdcm-${pkgver}.tar.gz
        0002-cmake-config-destination.patch
        0004-fix-find-openssl.patch
        0005-fix-cross-initializing.patch
        0007-getopt-global-var.patch
        0009-link-to-iconv.patch
        0010-poppler.patch
        0020-more-popper.patch
        https://github.com/malaterre/GDCM/commit/48be278a807dabdd91bbdb32a3301d36dc7f1a35.patch)
sha256sums=('1763d94228ef31babe68a2b5f3b0d4fc66bc0afae641d9a4c38ea5269e06ba5d'
            '94e68cbc4d7582e4cc90dccb6762a4c46c3c4b191ee54aa53a79449650e6ccd6'
            '77645101ea8425c601fb0717630b334c8a4ced3ea7f3625c11d338c56529e5fb'
            '018b083e74091776afaef9894fcb1c7554b36828f162bc4c9b2ea2a6b154b159'
            'ed9c4020bd39cadf4d78c72aa4be5afaf3d0a743406e8bee6c5936299e5d1d33'
            '6cd51dcc48fe587f655fdcb4ba1b15adff8b95a97a943d94b59d6cb85143e0e9'
            '229503058c3627a8677f9498f72bafd78556a63d538f4f8440871eb237c0626c'
            '9f4b56899629f7c6b549e24fe4d43af0729e56c702d8854449a5f586029f599c'
            'a38b5a881de6e201e69af542b7c0612b4a482d42572dd23c1d78e22b8a780fd5')

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 \
    0002-cmake-config-destination.patch \
    0004-fix-find-openssl.patch \
    0005-fix-cross-initializing.patch \
    0007-getopt-global-var.patch \
    0009-link-to-iconv.patch \
    0010-poppler.patch \
    0020-more-popper.patch
}

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

  if [[ ${CARCH} == aarch64 ]]; then
    _extra_config+=("-DGDCM_BUILD_DOCBOOK_MANPAGES=OFF")
  fi

  echo "==> Build static version"
  mkdir -p "${srcdir}/build-static-${MSYSTEM}" && cd "${srcdir}/build-static-${MSYSTEM}"

  CXXFLAGS+=" -Wno-ignored-attributes" \
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  ${MINGW_PREFIX}/bin/cmake.exe \
    -G"Ninja" \
    -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \
    -DCMAKE_CXX_STANDARD=20 \
    "${_extra_config[@]}" \
    -DCMAKE_SYSTEM_PREFIX_PATH="${MINGW_PREFIX}" \
    -DGDCM_BUILD_SHARED_LIBS=OFF \
    -DGDCM_USE_SYSTEM_ZLIB=ON \
    -DGDCM_USE_SYSTEM_OPENSSL=ON \
    -DGDCM_USE_SYSTEM_UUID=OFF \
    -DGDCM_USE_SYSTEM_EXPAT=ON \
    -DGDCM_USE_SYSTEM_JSON=ON \
    -DGDCM_USE_SYSTEM_PAPYRUS3=OFF \
    -DGDCM_USE_SYSTEM_SOCKETXX=OFF \
    -DGDCM_USE_SYSTEM_LJPEG=OFF \
    -DGDCM_USE_SYSTEM_OPENJPEG=OFF \
    -DGDCM_USE_SYSTEM_CHARLS=OFF \
    -DGDCM_USE_SYSTEM_POPPLER=ON \
    -DGDCM_USE_SYSTEM_LIBXML2=ON \
    -DGDCM_BUILD_EXAMPLES=OFF \
    -DGDCM_BUILD_TESTING=OFF \
    -DGDCM_WRAP_PYTHON=OFF \
    -DGDCM_WRAP_PERL=OFF \
    -DGDCM_WRAP_PHP=OFF \
    -DGDCM_WRAP_JAVA=OFF \
    -DGDCM_WRAP_CSHARP=OFF \
    -DGDCM_USE_JPEGLS=ON \
    -DGDCM_DOCUMENTATION=OFF \
    -DGDCM_USE_VTK=OFF \
    -DGDCM_USE_PARAVIEW=OFF \
    -DGDCM_BUILD_APPLICATIONS=OFF \
    ../${_realname}-${pkgver}

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

  echo "==> Build shared version"
  mkdir -p "${srcdir}/build-shared-${MSYSTEM}" && cd "${srcdir}/build-shared-${MSYSTEM}"

  CXXFLAGS+=" -Wno-ignored-attributes" \
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  ${MINGW_PREFIX}/bin/cmake.exe \
    -G"Ninja" \
    -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \
    -DCMAKE_CXX_STANDARD=20 \
    "${_extra_config[@]}" \
    -DCMAKE_SYSTEM_PREFIX_PATH="${MINGW_PREFIX}" \
    -DGDCM_BUILD_SHARED_LIBS=ON \
    -DGDCM_USE_SYSTEM_ZLIB=ON \
    -DGDCM_USE_SYSTEM_OPENSSL=ON \
    -DGDCM_USE_SYSTEM_UUID=OFF \
    -DGDCM_USE_SYSTEM_EXPAT=ON \
    -DGDCM_USE_SYSTEM_JSON=ON \
    -DGDCM_USE_SYSTEM_PAPYRUS3=OFF \
    -DGDCM_USE_SYSTEM_SOCKETXX=OFF \
    -DGDCM_USE_SYSTEM_LJPEG=OFF \
    -DGDCM_USE_SYSTEM_OPENJPEG=ON \
    -DGDCM_USE_SYSTEM_CHARLS=OFF \
    -DGDCM_USE_SYSTEM_POPPLER=ON \
    -DGDCM_USE_SYSTEM_LIBXML2=ON \
    -DGDCM_BUILD_EXAMPLES=OFF \
    -DGDCM_BUILD_TESTING=OFF \
    -DGDCM_WRAP_PYTHON=OFF \
    -DGDCM_WRAP_PERL=OFF \
    -DGDCM_WRAP_PHP=OFF \
    -DGDCM_WRAP_JAVA=OFF \
    -DGDCM_WRAP_CSHARP=OFF \
    -DGDCM_USE_JPEGLS=ON \
    -DGDCM_DOCUMENTATION=OFF \
    -DGDCM_USE_VTK=OFF \
    -DGDCM_USE_PARAVIEW=OFF \
    -DGDCM_BUILD_APPLICATIONS=ON \
    ../${_realname}-${pkgver}

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

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

  cd "${srcdir}/build-shared-${MSYSTEM}"
  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake.exe --install .
}
