_realname=libmongocrypt
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}"
         "${MINGW_PACKAGE_PREFIX}-python-pymongocrypt")
pkgver=1.17.3
pkgrel=1
pkgdesc="Required C library for Client Side and Queryable Encryption in MongoDB (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="https://github.com/mongodb/libmongocrypt"
msys2_repository_url=${url}
license=("spdx:Apache-2.0")
msys2_references=(
  'anitya: 388981'
  'archlinux: libmongocrypt'
  'cpe: cpe:2.3:a:mongodb:libmongocrypt'
  'gentoo: dev-libs/libmongocrypt'
)
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             "${MINGW_PACKAGE_PREFIX}-git" # for git apply on intel dfp instead of patch
             "${MINGW_PACKAGE_PREFIX}-python-cryptography"
             "${MINGW_PACKAGE_PREFIX}-python-cffi"
             "${MINGW_PACKAGE_PREFIX}-python-hatchling"
             "${MINGW_PACKAGE_PREFIX}-python-build"
             "${MINGW_PACKAGE_PREFIX}-python-installer"
             "${MINGW_PACKAGE_PREFIX}-mongo-c-driver")
source=("${_realname}-${pkgver}.tar.gz::${msys2_repository_url}/archive/refs/tags/${pkgver}.tar.gz"
        '001-imported-bson-implib.patch'
        '002-inteldfp-fenv.patch'
        'mongo-inteldfp-mingw_fenv.patch'
        '003-mlib-str-test-mojibake.patch'
        '004-python-no-req-check.patch'
        '005-python-dll-name.patch'
        '006-python-wheel-tag.patch')
sha256sums=('12b304874046399ad6567ceba426260bf06a4e1c2974b460a1b1f04b89c86ed5'
            '2359039ecec9daf72bb83a0fc5e04fbff7ed227849f4ff038ad5857024242e72'
            'c25b92f8971e6e32d5b01de468cf621e06101676c986af36734523347cf64797'
            '8ebae3c367f94f3f9cb9dd4213dd5a051f26c3f414e568c2c287580a97162e80'
            '15e8c6b070ea02791683242abbc5ab2953e09031a75478e9c62cbe58a81992c0'
            'b52385062e37df6e81104c2a01620baff59c513cb3dd69cca476533f74a3752b'
            '8c0efc4622498edce75423b158a530d42e34f6d8f3d569c26f52e9fc0dd2149d'
            '95ae919115e21dd874451f27620f5d8c62b96c7b3d04e9ec6658fcb80c086078')

prepare() {
  cd "${srcdir}/${_realname}-${pkgver}"

  patch -Np1 -i "${srcdir}/001-imported-bson-implib.patch"
  patch -Np1 -i "${srcdir}/002-inteldfp-fenv.patch"
  patch -Np1 -i "${srcdir}/003-mlib-str-test-mojibake.patch"
  patch -Np1 -i "${srcdir}/004-python-no-req-check.patch"
  patch -Np1 -i "${srcdir}/005-python-dll-name.patch"
  patch -Np1 -i "${srcdir}/006-python-wheel-tag.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

  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  "${MINGW_PREFIX}"/bin/cmake.exe \
    -GNinja \
    -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \
    -DENABLE_STATIC=ON \
    -DMONGOCRYPT_CRYPTO=CNG \
    -DMONGOCRYPT_MONGOC_DIR=USE-SYSTEM \
    -DUSE_SHARED_LIBBSON=ON \
    -DENABLE_ONLINE_TESTS=OFF \
    -DBUILD_VERSION=${pkgver} \
    "${_extra_config[@]}" \
    ../${_realname}-${pkgver}

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

  cp -r "${srcdir}/${_realname}-${pkgver}/bindings/python" "${srcdir}/python-build-${MSYSTEM}"
  cd "${srcdir}/python-build-${MSYSTEM}"
  python -m build --wheel --skip-dependency-check --no-isolation
}

check() {
  cmake --build "${srcdir}/build-${MSYSTEM}" --target test
}

package_libmongocrypt() {
  cd "${srcdir}/build-${MSYSTEM}"

  DESTDIR="${pkgdir}" "${MINGW_PREFIX}"/bin/cmake.exe --install .
}

package_python-pymongocrypt() {
  pkgdesc="Python bindings for libmongocrypt (mingw-w64)"
  depends=(
    "${MINGW_PACKAGE_PREFIX}-python-cryptography"
    "${MINGW_PACKAGE_PREFIX}-python-cffi"
    "${MINGW_PACKAGE_PREFIX}-libmongocrypt")

  cd "${srcdir}/python-build-${MSYSTEM}"

  MSYS2_ARG_CONV_EXCL="--prefix=" \
    python -m installer --prefix=${MINGW_PREFIX} \
    --destdir="${pkgdir}" dist/*.whl
}

# 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;
