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

_realname=freecad
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=0.21.2
pkgrel=8
pkgdesc="Free and Opensource multiplatform 3D parametric modeler (mingw-w64)"
arch=('any')
mingw_arch=('ucrt64' 'clang64' 'clangarm64')
url='https://freecadweb.org/'
msys2_repository_url="https://github.com/FreeCAD/FreeCAD"
msys2_references=(
  'archlinux: freecad'
)
license=('spdx:GPL-2.0-or-later')
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
         "${MINGW_PACKAGE_PREFIX}-boost"
         "${MINGW_PACKAGE_PREFIX}-coin"
         "${MINGW_PACKAGE_PREFIX}-fmt"
         "${MINGW_PACKAGE_PREFIX}-freetype"
         "${MINGW_PACKAGE_PREFIX}-med"
         "${MINGW_PACKAGE_PREFIX}-omp"
         "${MINGW_PACKAGE_PREFIX}-opencascade"
         "${MINGW_PACKAGE_PREFIX}-openscad"
         "${MINGW_PACKAGE_PREFIX}-python"
         "${MINGW_PACKAGE_PREFIX}-python-numpy"
         "${MINGW_PACKAGE_PREFIX}-python-packaging"
         "${MINGW_PACKAGE_PREFIX}-python-pivy"
         "${MINGW_PACKAGE_PREFIX}-pyside6"
         "${MINGW_PACKAGE_PREFIX}-qt6-base"
         "${MINGW_PACKAGE_PREFIX}-qt6-svg"
         "${MINGW_PACKAGE_PREFIX}-xerces-c"
         "${MINGW_PACKAGE_PREFIX}-vtk"
         "${MINGW_PACKAGE_PREFIX}-zlib")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             "${MINGW_PACKAGE_PREFIX}-eigen3"
             "${MINGW_PACKAGE_PREFIX}-python-matplotlib"
             "${MINGW_PACKAGE_PREFIX}-qt6-tools"
             "${MINGW_PACKAGE_PREFIX}-swig"
             "${MINGW_PACKAGE_PREFIX}-fast_float"
             "${MINGW_PACKAGE_PREFIX}-utf8cpp")
source=("https://github.com/FreeCAD/FreeCAD/archive/${pkgver}/${_realname}-${pkgver}.tar.gz"
        "001-fix-build-on-mingw.patch"
        "002-fix-building-against-vtk9.3.patch"
        "003-fix-building-with-gcc.patch"
        "004-Fix-smesh-does-not-compile-with-boost-1.85.patch::https://github.com/FreeCAD/FreeCAD/commit/f555a25f.patch"
        "005-fix-c++-20-deprecate-copy_option.patch::https://github.com/FreeCAD/FreeCAD/commit/aa54ba73.patch"
        # https://github.com/FreeCAD/FreeCAD/commit/0100a998
        "006-Gui-TypeInitStruct-for-Shiboken6-builds.patch"
        "007-fix-import-pyside6.patch"
        # https://github.com/FreeCAD/FreeCAD/commit/62c3836c
        "008-Addon-Manager-Qt6-fixes.patch"
        "009-fix-import-pyside6-2.patch::https://github.com/FreeCAD/FreeCAD/commit/ac9a88c2.patch"
        "010-Fix-NaviCube-for-Qt6.patch::https://github.com/FreeCAD/FreeCAD/commit/ccaee189.patch"
        "011-fixups-with-qt6-enums.patch"
)
sha256sums=('ceaf77cd12e8ad533d1535cc27ae4ca2a6e80778502dc9cdec906415d674b674'
            'f452aca0557806f61ffb767e0c296305b9271788a76f675bf254aa7d464ea325'
            '194db658ae660d7e10385a4ef9521b2dc6b4264b8b0aedca33eb955fdfda5890'
            'dbd2cd683d0c6ce8c633ce406231e77baf4e6f27898cee55cc11d61178c16dd1'
            '7d79a7ae9420c317766c1a57db475fb5daaa8ba2345fbb398e5857e26c28d4ee'
            'e38bb73741039e5505c6784b7f468ae497a3e7095b18f96c8d4fb68e3f8d5224'
            '15650328a24cb60600d1aa2a9e772f14f28bd0909927a202e21de7d12c2036c3'
            '6bc21acb796a0b87e13925e9f745e62ca182a15cdddca17e671bed48f561d383'
            'cdbb8ca67af1951c2976e60a2311e2b9e58cb1e0ae69df59ceb0420145502f03'
            '4d30deb3a1de642d170fb97ff348727e35b74128121b0ac90ea7c9e5f173ba14'
            '3594834a08b6712d29c0d44a4bfafb05d561ce93283832c31324b917d17bf8dd'
            'abe1839bfcde379fc01bad43958ad941d552b3c897dccabc3fae821f7287ea1d')

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

prepare() {
  cd "${srcdir}"/${_realname}-${pkgver}
  apply_patch_with_msg \
    001-fix-build-on-mingw.patch \
    002-fix-building-against-vtk9.3.patch \
    004-Fix-smesh-does-not-compile-with-boost-1.85.patch \
    005-fix-c++-20-deprecate-copy_option.patch \
    006-Gui-TypeInitStruct-for-Shiboken6-builds.patch \
    007-fix-import-pyside6.patch \
    008-Addon-Manager-Qt6-fixes.patch \
    009-fix-import-pyside6-2.patch \
    010-Fix-NaviCube-for-Qt6.patch

  # https://github.com/FreeCAD/FreeCAD/pull/11560
  apply_patch_with_msg \
    003-fix-building-with-gcc.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

  if [[ ${CC} == clang ]]; then
    CXXFLAGS+=" -Wno-macro-redefined"
  else
    CXXFLAGS+=" -Wno-template-id-cdtor"
  fi

  CXXFLAGS+=" -Wno-deprecated-declarations -Wno-unknown-pragmas" \
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=;" \
    "${MINGW_PREFIX}"/bin/cmake.exe -Wno-dev \
      -GNinja \
      -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \
      -DFREECAD_QT_VERSION="6" \
      -DBUILD_TEST=OFF \
      -DBUILD_WEB=OFF \
      -DENABLE_DEVELOPER_TESTS=OFF \
      -DPython_EXECUTABLE=${MINGW_PREFIX}/bin/python \
      -DPython3_EXECUTABLE=${MINGW_PREFIX}/bin/python \
      -DPYTHON_EXECUTABLE=${MINGW_PREFIX}/bin/python \
      "${_extra_config[@]}" \
      ../${_realname}-${pkgver}

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

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

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

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

  MSYS2_ARG_CONV_EXCL="-d" \
    python -m compileall -o 0 -o 1 -q -d"${MINGW_PREFIX}" "${pkgdir}${MINGW_PREFIX}"
}
