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

_realname=avogadrolibs
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}"
         "${MINGW_PACKAGE_PREFIX}-${_realname}-qt")
pkgver=2.0.0
pkgrel=2
pkgdesc='Libraries that provide 3D rendering, visualization, analysis and data processing useful in computational chemistry, molecular modeling, bioinformatics, materials science, and related areas (mingw-w64)'
arch=(any)
mingw_arch=(ucrt64 clang64 clangarm64)
url='https://www.openchemistry.org/'
msys2_repository_url="https://github.com/OpenChemistry/avogadrolibs"
msys2_references=(
  'archlinux: avogadrolibs'
)
license=(spdx:BSD-3-Clause)
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-eigen3"
             #"${MINGW_PACKAGE_PREFIX}-genxrdpattern"
             "${MINGW_PACKAGE_PREFIX}-glew"
             "${MINGW_PACKAGE_PREFIX}-hdf5"
             "${MINGW_PACKAGE_PREFIX}-jkqtplotter"
             "${MINGW_PACKAGE_PREFIX}-libarchive"
             "${MINGW_PACKAGE_PREFIX}-libmsym"
             "${MINGW_PACKAGE_PREFIX}-mmtf-cpp"
             "${MINGW_PACKAGE_PREFIX}-nlohmann-json"
             "${MINGW_PACKAGE_PREFIX}-pybind11"
             "${MINGW_PACKAGE_PREFIX}-python"
             "${MINGW_PACKAGE_PREFIX}-pugixml"
             "${MINGW_PACKAGE_PREFIX}-qt6-base"
             "${MINGW_PACKAGE_PREFIX}-qt6-svg"
             "${MINGW_PACKAGE_PREFIX}-qt6-tools"
             "${MINGW_PACKAGE_PREFIX}-spglib"
             "${MINGW_PACKAGE_PREFIX}-fast_float"
             "${MINGW_PACKAGE_PREFIX}-utf8cpp")
source=(https://github.com/OpenChemistry/avogadrolibs/archive/${pkgver}/${_realname}-${pkgver}.tar.gz
        https://github.com/OpenChemistry/crystals/archive/${pkgver}/crystals-${pkgver}.tar.gz
        https://github.com/OpenChemistry/fragments/archive/${pkgver}/fragments-${pkgver}.tar.gz
        https://github.com/OpenChemistry/molecules/archive/${pkgver}/molecules-${pkgver}.tar.gz
        005-fix-cmake-config-file.patch)
sha256sums=('08adefeb8122cf018587fc12872ed470bbf92b72fb73f0af1861ab58031cadfd'
            '2747a70fab3d5f32ead0622229189fc74732aa0eadf4ea60b80f75368fb0b442'
            'e9a4ba1dd1b357bef94188dbf8fb7f60219dba7854b69be767e28a4fb1938ce9'
            'bb7377f254932ccd4156035eabfc5b1ed9f551359b520ed86b51064a114a1d99'
            '38f452b157ed6f89f0ffc584066abd14fe62c75ad452970d3cdcfdc4aba390a9')

apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -Nbp1 -i "${srcdir}/${_patch}"
  done
}

prepare() {
  for _dir in crystals fragments molecules; do
    mv ${_dir}-${pkgver} ${_realname}-${pkgver}/${_dir}
  done

  cd ${_realname}-${pkgver}
  apply_patch_with_msg \
    005-fix-cmake-config-file.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

  CXXFLAGS+=" -D_USE_MATH_DEFINES -Wno-ignored-attributes" \
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  ${MINGW_PREFIX}/bin/cmake \
    -GNinja \
    -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
    -DCMAKE_DLL_NAME_WITH_SOVERSION=ON \
    "${_extra_config[@]}" \
    -DUSE_HDF5=ON \
    -DUSE_LIBARCHIVE=ON \
    -DUSE_LIBMSYM=ON \
    -DUSE_MMTF=ON \
    -DUSE_PYTHON=ON \
    -DUSE_QT=ON \
    -DUSE_SPGLIB=ON \
    -DUSE_EXTERNAL_NLOHMANN=ON \
    -DUSE_EXTERNAL_PUGIXML=ON \
    -DUSE_SYSTEM_GENXRDPATTERN=ON \
    -DBUILD_STATIC_PLUGINS=OFF \
    -DQT_VERSION=6 \
    -DPython_EXECUTABLE=${MINGW_PREFIX}/bin/python \
    -DPython3_EXECUTABLE=${MINGW_PREFIX}/bin/python \
    -B build-${MSYSTEM} \
    -S ${_realname}-${pkgver}

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

package_avogadrolibs() {
  depends=("${MINGW_PACKAGE_PREFIX}-cc-libs"
           "${MINGW_PACKAGE_PREFIX}-glew"
           "${MINGW_PACKAGE_PREFIX}-hdf5"
           "${MINGW_PACKAGE_PREFIX}-pugixml"
           "${MINGW_PACKAGE_PREFIX}-spglib")
  optdepends=("${MINGW_PACKAGE_PREFIX}-python: Python bindings"
              "${MINGW_PACKAGE_PREFIX}-avogadrolibs-qt: For Qt plugins")

  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install build-${MSYSTEM}

  rm -r "${pkgdir}"${MINGW_PREFIX}/bin/libAvogadroQt* \
        "${pkgdir}"${MINGW_PREFIX}/lib/libAvogadroQt* \
        "${pkgdir}"${MINGW_PREFIX}/bin/libAvogadroMoleQueue* \
        "${pkgdir}"${MINGW_PREFIX}/lib/libAvogadroMoleQueue* \
        "${pkgdir}"${MINGW_PREFIX}/include/avogadro/{molequeue,qt*} \
        "${pkgdir}"${MINGW_PREFIX}/lib/avogadro2/plugins

  for _dir in crystals fragments molecules; do
    cp -r ${_realname}-${pkgver}/${_dir} "${pkgdir}"${MINGW_PREFIX}/share/avogadro2/
  done

  install -Dm644 ${_realname}-${pkgver}/LICENSE -t "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}
}

package_avogadrolibs-qt() {
  pkgdesc="Qt modules for Avogadro (mingw-w64)"
  provides=("${MINGW_PACKAGE_PREFIX}-avogadrolibs-qt6")
  conflicts=("${MINGW_PACKAGE_PREFIX}-avogadrolibs-qt6")
  replaces=("${MINGW_PACKAGE_PREFIX}-avogadrolibs-qt6")
  depends=("${MINGW_PACKAGE_PREFIX}-avogadrolibs"
           "${MINGW_PACKAGE_PREFIX}-cc-libs"
           "${MINGW_PACKAGE_PREFIX}-glew"
           "${MINGW_PACKAGE_PREFIX}-jkqtplotter"
           "${MINGW_PACKAGE_PREFIX}-libarchive"
           "${MINGW_PACKAGE_PREFIX}-libmsym"
           "${MINGW_PACKAGE_PREFIX}-qt6-base"
           "${MINGW_PACKAGE_PREFIX}-qt6-svg")

  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install build-${MSYSTEM}/avogadro/molequeue
  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install build-${MSYSTEM}/avogadro/qtgui
  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install build-${MSYSTEM}/avogadro/qtopengl
  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install build-${MSYSTEM}/avogadro/qtplugins

  for _dir in crystals fragments molecules; do
    rm -rf "${pkgdir}"${MINGW_PREFIX}/share/avogadro2/${_dir}
  done

  install -Dm644 ${_realname}-${pkgver}/LICENSE -t "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}-qt6
}

# template start; name=mingw-w64-splitpkg-wrappers; version=1.0;
# vim: set ft=bash :

# generate wrappers
for _name in "${pkgname[@]}"; do
  _short="package_${_name#${MINGW_PACKAGE_PREFIX}-}"
  _func="$(declare -f "${_short}")"
  eval "${_func/#${_short}/package_${_name}}"
done
# template end;
