# Maintainer: Sarah Ottinger <schalaalexiazeal@gmail.com>

_realname=godot
pkgbase=mingw-w64-${_realname}
pkgname=${MINGW_PACKAGE_PREFIX}-${_realname}
pkgver=3.5.1
pkgrel=4
pkgdesc='An advanced, feature packed, multi-platform 2D and 3D game engine (mingw-w64)'
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64')
url="https://www.godotengine.org/"
license=('spdx:MIT')
depends=("${MINGW_PACKAGE_PREFIX}-brotli"
         "${MINGW_PACKAGE_PREFIX}-bullet"
         "${MINGW_PACKAGE_PREFIX}-embree3"
         "${MINGW_PACKAGE_PREFIX}-freetype"
         "${MINGW_PACKAGE_PREFIX}-libogg"
         "${MINGW_PACKAGE_PREFIX}-libpng"
         "${MINGW_PACKAGE_PREFIX}-libsquish"
         "${MINGW_PACKAGE_PREFIX}-libtheora"
         "${MINGW_PACKAGE_PREFIX}-libvorbis"
         "${MINGW_PACKAGE_PREFIX}-libvpx"
         "${MINGW_PACKAGE_PREFIX}-libwebp"
        #  "${MINGW_PACKAGE_PREFIX}-mbedtls" godot doesn't build against mbedtls>=3
         "${MINGW_PACKAGE_PREFIX}-miniupnpc"
         "${MINGW_PACKAGE_PREFIX}-opusfile"
         "${MINGW_PACKAGE_PREFIX}-pcre2"
         "${MINGW_PACKAGE_PREFIX}-wslay"
         "${MINGW_PACKAGE_PREFIX}-zlib"
         "${MINGW_PACKAGE_PREFIX}-zstd")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-scons"
             "${MINGW_PACKAGE_PREFIX}-pkgconf"
             "${MINGW_PACKAGE_PREFIX}-yasm")
source=("https://github.com/godotengine/godot/releases/download/${pkgver}-stable/${_realname}-${pkgver}-stable.tar.xz"
        "001-force-using-pkgconfig.patch"
        "002-fix-build-with-gcc-13.patch")
sha256sums=('f4e0d9045b659d36df07ad6e0c5b54e34551bce2618da2549d8f8089749ac767'
            '771fe57921f0e5cfd0577eb13a23014bf1a04f2ed579594aef14530ac6aeb344'
            'c8db6a53048e84b02e6e6bf37584721f4f58f558f0ea2cadaa48ec1a89df86fa')

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

  # Copied from platform/x11/detect.py
  patch -p1 -i "${srcdir}/001-force-using-pkgconfig.patch"
  patch -p1 -i "${srcdir}/002-fix-build-with-gcc-13.patch"
}

build() {
  [[ -d "${srcdir}/build-${MSYSTEM}" ]] && rm -rf "${srcdir}/build-${MSYSTEM}"
  cp -r "${_realname}-${pkgver}-stable" "build-${MSYSTEM}" && cd "${srcdir}/build-${MSYSTEM}"

  # Copied from Arch
  # mbedtls: requires <3
  local to_unbundle="brotli bullet embree freetype libogg libpng libtheora libvorbis libvpx libwebp miniupnpc opus pcre2 squish wslay zlib zstd"
  local system_libs=""
  for _lib in $to_unbundle; do
    system_libs+="builtin_"$_lib"=no "
    rm -rf thirdparty/$_lib
  done

  declare -a extra_config
  if [ "$CARCH" = "x86_64" ]; then
    extra_config+=("use_lto=yes")
    extra_config+=("bits=64")
    extra_config+=("mingw_prefix_64=${MINGW_PREFIX}/bin/")
  else
    # lto is broken on 32bit
    extra_config+=("use_lto=no")
    extra_config+=("bits=32")
    extra_config+=("mingw_prefix_32=${MINGW_PREFIX}/bin/")
  fi

  if [[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]]; then
    extra_config+=("use_llvm=yes")
    extra_config+=("use_thinlto=yes")
  else
    extra_config+=("use_llvm=no")
  fi

  ${MINGW_PREFIX}/bin/scons ${MAKEFLAGS} \
    platform=windows \
    target=release_debug \
    optimize=speed \
    use_mingw=yes \
    use_static_cpp=no \
    "${extra_config[@]}" \
    tools=yes \
    ${system_libs} \
    verbose=yes
}

package() {
  cd "${srcdir}/build-${MSYSTEM}"
  install -Dm755 bin/godot.windows.opt.tools.*.exe "${pkgdir}${MINGW_PREFIX}/bin/godot.exe"
  install -Dm644 icon.svg "${pkgdir}${MINGW_PREFIX}/share/pixmaps/godot.svg"
  install -D -m644 LICENSE.txt "${pkgdir}${MINGW_PREFIX}/share/licenses/godot/LICENSE.txt"
  install -D -m644 "misc/dist/linux/godot.6" "${pkgdir}${MINGW_PREFIX}/share/man/man6/godot.6"
}
