# Maintainer: Taozuhong <taozuhong@gmail.com>

_realname=arrow-adbc
pkgbase=mingw-w64-${_realname}
pkgname=(
  "${MINGW_PACKAGE_PREFIX}-${_realname}"
  "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-bigquery"
  "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-flightsql"
  "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-postgresql"
  "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-sqlite"
  "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-snowflake"
)
pkgver=23
pkgrel=2
pkgdesc="Database connectivity API for Apache Arrow"
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="https://arrow.apache.org/adbc/current/index.html"
msys2_repository_url='https://github.com/apache/arrow-adbc'
license=('Apache-2.0')
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-cmake"
  "${MINGW_PACKAGE_PREFIX}-git" # required in go
  "${MINGW_PACKAGE_PREFIX}-go"
  "${MINGW_PACKAGE_PREFIX}-ninja"
  "${MINGW_PACKAGE_PREFIX}-postgresql"
  "${MINGW_PACKAGE_PREFIX}-sqlite3"
)
source=("${msys2_repository_url}/archive/refs/tags/apache-${_realname}-${pkgver}.tar.gz"
        "0001-golang-fixes.patch"
        "0002-disable-windows-version-script.patch")
sha256sums=('a76fb542b8b2a446c2edec21df18869c84fb5beca705b3fb6512951970d9bc51'
            '5c040f72ecea8bc7ff9d650dd75fb57a51c51121e61c70bf2960a22e9c1e2f0a'
            '0628ba3df9a97867859d9b2928e0e4b214f4e90c6bf7b079b1fbe6d5d0e632c0')

prepare() {
  mv "${_realname}-apache-${_realname}-${pkgver}" "${_realname}-${pkgver}" && cd "${_realname}-${pkgver}"

  patch -Nbp1 -i "${srcdir}/0001-golang-fixes.patch"
  patch -Nbp1 -i "${srcdir}/0002-disable-windows-version-script.patch"
}

build() {
  # Update Go compiler path
  export GOROOT=${MINGW_PREFIX}/lib/go

  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=" \
    cmake \
      -GNinja \
      -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \
      -DADBC_DRIVER_MANAGER=ON \
      -DADBC_DRIVER_BIGQUERY=ON \
      -DADBC_DRIVER_FLIGHTSQL=ON \
      -DADBC_DRIVER_POSTGRESQL=ON \
      -DADBC_DRIVER_SQLITE=ON \
      -DADBC_DRIVER_SNOWFLAKE=ON \
      "${_extra_config[@]}" \
      -S ${_realname}-${pkgver}/c \
      -B build-${MSYSTEM}

  cmake --build build-${MSYSTEM}
}

package_arrow-adbc() {
  pkgdesc+=" (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-cc-libs")
  optdepends=(
    "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-bigquery: BigQuery driver"
    "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-flightsql: Flight SQL driver"
    "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-postgresql: PostgreSQL driver"
    "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-sqlite: SQLite driver"
    "${MINGW_PACKAGE_PREFIX}-${_realname}-driver-snowflake: Snowflake driver"
  )

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

package_arrow-adbc-driver-bigquery() {
  pkgdesc+=" - BigQuery driver (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-cc-libs")

  DESTDIR="${pkgdir}" cmake --install build-${MSYSTEM}/driver/bigquery
}

package_arrow-adbc-driver-flightsql() {
  pkgdesc+=" - Flight SQL driver (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-cc-libs")

  DESTDIR="${pkgdir}" cmake --install build-${MSYSTEM}/driver/flightsql
}

package_arrow-adbc-driver-postgresql() {
  pkgdesc+=" - PostgreSQL driver (mingw-w64)"
  depends=(
    "${MINGW_PACKAGE_PREFIX}-cc-libs"
    "${MINGW_PACKAGE_PREFIX}-postgresql"
  )

  DESTDIR="${pkgdir}" cmake --install build-${MSYSTEM}/driver/postgresql
}

package_arrow-adbc-driver-sqlite() {
  pkgdesc+=" - SQLite driver (mingw-w64)"
  depends=(
    "${MINGW_PACKAGE_PREFIX}-cc-libs"
    "${MINGW_PACKAGE_PREFIX}-sqlite3"
  )

  DESTDIR="${pkgdir}" cmake --install build-${MSYSTEM}/driver/sqlite
}

package_arrow-adbc-driver-snowflake() {
  pkgdesc+=" - Snowflake driver (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-cc-libs")

  DESTDIR="${pkgdir}" cmake --install build-${MSYSTEM}/driver/snowflake
}

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