# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Renato Silva <br.renatosilva@gmail.com>
# Contributor: Brisingr Aerowing <ztgreve@live.com>

_realname=sqlite3
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}"
         "${MINGW_PACKAGE_PREFIX}-sqlite-docs")
_sqlite_year=2024
_amalgamationver=3460100
_docver=${_amalgamationver}
pkgver=3.46.1
pkgrel=1
pkgdesc="A C library that implements an SQL database engine (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
msys2_references=(
  'archlinux: sqlite'
  "cpe: cpe:/a:sqlite:sqlite"
)
msys2_repository_url="https://www.sqlite.org/cgi/src/dir?ci=trunk"
license=(PublicDomain)
url="https://www.sqlite.org/"
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
         "${MINGW_PACKAGE_PREFIX}-readline"
         "${MINGW_PACKAGE_PREFIX}-tcl"
         "${MINGW_PACKAGE_PREFIX}-zlib")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-autotools")
source=(https://www.sqlite.org/${_sqlite_year}/sqlite-src-${_amalgamationver}.zip
        https://www.sqlite.org/${_sqlite_year}/sqlite-doc-${_docver}.zip
        0001-sqlite-pcachetrace-include-sqlite3.patch
        0002-sqlite-sqldiff-makefile-add-console-io.patch
        Makefile.ext.in
        README.md.in
        LICENSE)
sha256sums=('def3fc292eb9ecc444f6c1950e5c79d8462ed5e7b3d605fd6152d145e1d5abb4'
            'e969131f93ca79fbc64d57724a1035735881555a52600dbe69c69eab72c9fcd1'
            '6518119034ceb2820d058afcb099d11f636271f55a41ffae22855af66a369166'
            '4f85775d239b82b5031494a87814838b145d347876dfe0ace4b1d45d03192408'
            '4a8a87289253529cf04c916e5743c8727a5506b5185bc9bd4070b42037e8ae20'
            '5ca42f1f92abfb61bacc9ff60f5836cc56e2ce2af52264f918cb06c3d566d562'
            '0b76663a90e034f3d7f2af5bfada4cedec5ebc275361899eccc5c18e6f01ff1f')
options=('staticlibs' '!buildflags')

# From Debian sqlite3-tools
_sqlite_tools="showdb.exe showjournal.exe showstat4.exe showwal.exe sqlite3_analyzer.exe dbhash.exe sqldiff.exe"

prepare() {
  cd "sqlite-src-${_amalgamationver}"
  patch -p1 -i "${srcdir}/0001-sqlite-pcachetrace-include-sqlite3.patch"
  patch -p1 -i "${srcdir}/0002-sqlite-sqldiff-makefile-add-console-io.patch"
}

build() {
  test -d ${srcdir}/build-${MSYSTEM} && rm -rf ${srcdir}/build-${MSYSTEM}
  mkdir -p ${srcdir}/build-${MSYSTEM} && cd ${srcdir}/build-${MSYSTEM}

  export lt_cv_deplibs_check_method='pass_all'

  declare -a SQLITE_OPTIONS=(
            "-DSQLITE_ENABLE_COLUMN_METADATA=1"
            "-DSQLITE_USE_MALLOC_H=1"
            "-DSQLITE_USE_MSIZE=1"
            "-DSQLITE_DISABLE_DIRSYNC=1"
            "-DSQLITE_ENABLE_DBSTAT_VTAB=1"
            "-DSQLITE_SOUNDEX=1"
            "-DSQLITE_ENABLE_MATH_FUNCTIONS=1"
  )

  CFLAGS+=" -fexceptions -fno-strict-aliasing ${SQLITE_OPTIONS[@]}"

  ../sqlite-src-${_amalgamationver}/configure -C \
    --prefix=${MINGW_PREFIX} \
    --host=${MINGW_CHOST} \
    --target=${MINGW_CHOST} \
    --build=${MINGW_CHOST} \
    --enable-threadsafe \
    --disable-editline \
    --enable-readline \
    --enable-all \
    --enable-session \
    --with-readline-inc=-I${MINGW_PREFIX}/include \
    --with-tcl=${MINGW_PREFIX}/lib \
    TCLLIBDIR=${MINGW_PREFIX}/lib/sqlite${pkgver}

  make

  # build additional tools
  make ${_sqlite_tools}

  # build extensions
  ./config.status --file=ext/misc/Makefile:../Makefile.ext.in
  make -C ext/misc
}

check() {
  cd "${srcdir}/build-${MSYSTEM}"
  # This test run lasts very loooong ... despite the target name
  make quicktest || warning "Tests failed"
}

package_sqlite3() {
  provides=(${MINGW_PACKAGE_PREFIX}-sqlite=${pkgver}
            ${MINGW_PACKAGE_PREFIX}-sqlite-analyzer=${pkgver})
  conflicts=(${MINGW_PACKAGE_PREFIX}-sqlite-analyzer)
  replaces=(${MINGW_PACKAGE_PREFIX}-sqlite-analyzer)

  cd ${srcdir}/build-${MSYSTEM}
  make DESTDIR="${pkgdir}" install

  for tools in ${_sqlite_tools}; do
    install -Dm755 .libs/$tools "${pkgdir}${MINGW_PREFIX}/bin/$tools"
  done
  mv ${pkgdir}${MINGW_PREFIX}/lib/bin/*.* ${pkgdir}${MINGW_PREFIX}/lib/sqlite${pkgver}/
  rm -rf ${pkgdir}${MINGW_PREFIX}/lib/bin

  # Install extensions
  make -C ext/misc DESTDIR="${pkgdir}" install
  cat "${srcdir}/README.md.in" | sed        \
    -e "s|@MINGW_PREFIX@|${MINGW_PREFIX}|g" \
    -e "s|@MSYSTEM@|${MSYSTEM}|g;"          \
    -e "s|@VERSION@|${pkgver}|g;"           \
    > "${pkgdir}${MINGW_PREFIX}/share/sqlite/extensions/README.md"

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

package_sqlite-docs() {
  pkgdesc+=" (documentation)"
  depends=()

  # Install docs
  cd ${srcdir}/sqlite-doc-${_docver}
  mkdir -p ${pkgdir}${MINGW_PREFIX}/share/doc/${_realname}
  cp -R *  ${pkgdir}${MINGW_PREFIX}/share/doc/${_realname}/
}

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