# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Raed Rizqie <raed.rizqie@gmail.com>

_realname=firebird
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=5.0.3.1683
pkgrel=1
pkgdesc="Cross-platform relational database offering many ANSI SQL standard features (mingw-w64)"
url="https://www.firebirdsql.org/"
license=('spdx:Interbase-1.0 AND MPL-1.0')
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
msys2_references=(
  'archlinux: firebird'
  "cpe: cpe:/a:firebirdsql:firebird"
)
msys2_repository_url='https://github.com/FirebirdSQL/firebird/'
msys2_documentation_url='https://www.firebirdsql.org/en/documentation/'
conflicts=("${MINGW_PACKAGE_PREFIX}-firebird2-git")
replaces=("${MINGW_PACKAGE_PREFIX}-firebird2-git")
depends=("${MINGW_PACKAGE_PREFIX}-libiconv"
         "${MINGW_PACKAGE_PREFIX}-libtomcrypt"
         "${MINGW_PACKAGE_PREFIX}-libtommath"
         "${MINGW_PACKAGE_PREFIX}-re2")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-autotools"
             "${MINGW_PACKAGE_PREFIX}-icu"
             "unzip")
source=("https://github.com/FirebirdSQL/firebird/archive/v${pkgver%.*}.tar.gz"
        001-configure-fixes.patch
        002-mingw-makefiles-fixes.patch
        003-substitute-extauth-makefile.patch
        004-external-sources-fixes.patch
        005-firebird-sources-fixes.patch
        006-resource-file-fixes.patch
        007-pathtools-fixes.patch
        008-add-script-and-batch-files.patch
        009-const-char.patch
        pathtools.cpp
        pathtools.h)
sha256sums=('626fa67067e7ebf425366667f960a1093d69b4ca5344b3c2fa604b454f7ed139'
            'be70056bebc87a4834ff7785e32915b547b5d62cf14042851d54e5762ea05368'
            '70b4b5327e128409b9dc2bf14871062a6b36fcffb3e69d30bb6a7f0e36f95b90'
            'd99dc050c57c43e351000c161d51c0ec0420004de912547fcf04e9325cd6de27'
            '88959ee452b2950ebaac5e1a034cbb54eb95c886616a322664074704a02ba43e'
            '84714bc93ba21368b35fe9de757eafbc390742eeb4b5641d2f8330d828b72bba'
            '76f337487b62c99cff3dd2045f4143a69b0395c82d76ebf42d18d7ca3f5eca66'
            'f9babbf59dfb99a5d0048647bb64fce39f821c110e768049aa955614396382e2'
            '094896b8614981854eadcca789726e8eb646918811829f58cde43a27870156ed'
            'ebaf28f864f70bcdbf1ffd5d8cc903c978c86db2754fda0bbd2ca2035ffdb01f'
            '2f357fe2c6cdec3bfd90979616cfd075aee2de51beeaa08cd7a4192878efa64e'
            '0e6014650703817bc106825bb6a92bea72d9d790e89975c88d058fba2a26eddc')

pkgver() {
  cd ${_realname}-${pkgver%.*}
  source "${srcdir}"/${_realname}-${pkgver%.*}/src/misc/writeBuildNum.sh
  printf '%s.%s.%s.%s' ${MajorVer} ${MinorVer} ${RevNo} ${BuildNum}
}

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

prepare() {
  cd ${_realname}-${pkgver%.*}
  cp -f ../pathtools.h src/common
  cp -f ../pathtools.cpp src/common/os/win32

  apply_patch_with_msg \
    001-configure-fixes.patch \
    002-mingw-makefiles-fixes.patch \
    003-substitute-extauth-makefile.patch \
    004-external-sources-fixes.patch \
    005-firebird-sources-fixes.patch \
    006-resource-file-fixes.patch \
    007-pathtools-fixes.patch \
    008-add-script-and-batch-files.patch \
    009-const-char.patch
}

build() {
  cp -rf ${_realname}-${pkgver%.*} "build-${MSYSTEM}" && cd "build-${MSYSTEM}"

  if [[ ${MSYSTEM} == CLANG* ]]; then
    CXXFLAGS="-Wno-null-conversion -Wno-deprecated-copy-with-user-provided-copy -Wno-macro-redefined -Wno-nontrivial-memcall -Wno-varargs -Wno-constant-conversion -Wno-inconsistent-missing-override -Wno-tautological-constant-out-of-range-compare -Wno-c++11-narrowing"
  else
    CXXFLAGS="-Wno-deprecated-copyimplicitly-declared -Wno-deprecated-copy -Wno-class-memaccess -Wno-overflow -Wno-return-local-addr -Wno-stringop-overread -Wno-stringop-overflow -Wno-narrowing"
  fi

  ./autogen.sh \
    --prefix=${MINGW_PREFIX} \
    --build=${MINGW_CHOST} \
    --disable-rpath \
    --with-system-re2 \
    --with-fbbin=${MINGW_PREFIX}/bin \
    --with-fbsbin=${MINGW_PREFIX}/bin \
    --with-fbconf=${MINGW_PREFIX}/etc/${_realname} \
    --with-fbsecure-db=${MINGW_PREFIX}/etc/${_realname} \
    --with-fbmsg=${MINGW_PREFIX}/etc/${_realname} \
    --with-fblib=${MINGW_PREFIX}/lib \
    --with-fbinclude=${MINGW_PREFIX}/include \
    --with-fbdoc=${MINGW_PREFIX}/share/${_realname}/doc \
    --with-fbsample=${MINGW_PREFIX}/share/${_realname}/examples \
    --with-fbsample-db=${MINGW_PREFIX}/share/${_realname}/examples/empbuild \
    --with-fbintl=${MINGW_PREFIX}/share/${_realname}/intl \
    --with-fbmisc=${MINGW_PREFIX}/share/${_realname}/misc \
    --with-fbplugins=${MINGW_PREFIX}/share/${_realname}/plugins \
    --with-fbtzdata=${MINGW_PREFIX}/share/${_realname}/tzdata \
    --with-fblog=${MINGW_PREFIX}/share/${_realname} \
    --with-fbglock=${MINGW_PREFIX}/share/${_realname}

  make
}

package() {
  cd "build-${MSYSTEM}"

  local _target=Release
  if check_option "debug" "y"; then
    _target=Debug
  fi

  mkdir -p "${pkgdir}"${MINGW_PREFIX}/{bin,etc/${_realname},include,lib,share/${_realname}/{doc,examples,intl,misc,plugins,tzdata}}
  cp -f gen/${_target}/firebird/bin/*                   "${pkgdir}"${MINGW_PREFIX}/bin/
  cp -f gen/${_target}/firebird/lib/libfbclient.dll.a   "${pkgdir}"${MINGW_PREFIX}/lib/
  cp -f gen/${_target}/firebird/lib/libib_util.dll.a    "${pkgdir}"${MINGW_PREFIX}/lib/
  cp -rf gen/${_target}/firebird/include/*              "${pkgdir}"${MINGW_PREFIX}/include/
  cp -f src/misc/pascal/ib_util.pas                     "${pkgdir}"${MINGW_PREFIX}/include/
  cp -f src/include/gen/Firebird.pas                    "${pkgdir}"${MINGW_PREFIX}/include/${_realname}/
  cp -f gen/${_target}/firebird/intl/*                  "${pkgdir}"${MINGW_PREFIX}/share/${_realname}/intl/
  cp -f src/misc/intl.sql                               "${pkgdir}"${MINGW_PREFIX}/share/${_realname}/misc/
  cp -rf src/misc/upgrade                               "${pkgdir}"${MINGW_PREFIX}/share/${_realname}/misc/
  cp -rf doc/*                                          "${pkgdir}"${MINGW_PREFIX}/share/${_realname}/doc/
  cp -rf gen/${_target}/firebird/examples/*             "${pkgdir}"${MINGW_PREFIX}/share/${_realname}/examples/
  cp -rf gen/${_target}/firebird/plugins/*              "${pkgdir}"${MINGW_PREFIX}/share/${_realname}/plugins/
  cp -rf gen/${_target}/firebird/tzdata/*               "${pkgdir}"${MINGW_PREFIX}/share/${_realname}/tzdata/

  cp -f gen/${_target}/firebird/*.conf                  "${pkgdir}"${MINGW_PREFIX}/etc/${_realname}/
  cp -f gen/${_target}/firebird/*.msg                   "${pkgdir}"${MINGW_PREFIX}/etc/${_realname}/
  cp -f gen/${_target}/firebird/*.fdb                   "${pkgdir}"${MINGW_PREFIX}/etc/${_realname}/

  # Remove build tools
  rm -f "${pkgdir}"${MINGW_PREFIX}/bin/{gpre_*,build*}.exe
  rm -f "${pkgdir}"${MINGW_PREFIX}/bin/*.sh

  install -Dm644 builds/install/misc/IDPLicense.txt "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}/IDPLicense.txt
  install -Dm644 builds/install/misc/IPLicense.txt "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}/IPLicense.txt
}
