# Author: williamjcm <w.jcm59@gmail.com>
# Contributor: mosra <mosra@centrum.cz>
# Based on the magnum-plugins Arch Linux PKGBUILD maintained by xyproto and the MSYS2/MinGW PKGBUILD templates

_realname=magnum-plugins
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=2020.06
_basis_pkgver=2f43afcc97d0a5dafdb73b4e24e123cf9687a418
_meshopt_pkgver=97c52415c6d29f297a76482ddde22f739292446d
pkgrel=1
pkgdesc='Plugins for the Magnum C++11/C++14 graphics engine'
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64')
url='https://magnum.graphics/'
license=('MIT')
depends=("${MINGW_PACKAGE_PREFIX}-magnum>=$pkgver"
         "${MINGW_PACKAGE_PREFIX}-assimp"
         "${MINGW_PACKAGE_PREFIX}-devil"
         "${MINGW_PACKAGE_PREFIX}-faad2"
         "${MINGW_PACKAGE_PREFIX}-freetype"
         "${MINGW_PACKAGE_PREFIX}-harfbuzz"
         "${MINGW_PACKAGE_PREFIX}-libjpeg-turbo"
         "${MINGW_PACKAGE_PREFIX}-libpng")
makedepends=("${MINGW_PACKAGE_PREFIX}-cmake" "${MINGW_PACKAGE_PREFIX}-ninja" 'unzip')
source=("${_realname}-${pkgver}.zip::https://github.com/mosra/magnum-plugins/archive/v${pkgver}.zip"
        # A commit that's before the UASTC support (which is not implemented
        # yet, because latest versions crash even on trivial tests)
        "https://github.com/BinomialLLC/basis_universal/archive/2f43afcc97d0a5dafdb73b4e24e123cf9687a418.tar.gz"
        "https://github.com/zeux/meshoptimizer/archive/97c52415c6d29f297a76482ddde22f739292446d.tar.gz")
noextract=("${_realname}-${pkgver}.zip")
sha256sums=('8e1e98674ef3f0276f68abbdfecef1d72ae95b5a812b78c1ff45dba10fc72e3f'
            'f983ab5bfc5c32474914a87d9ca572c7fb970bf96f7bc68385c08772f633639f'
            '57bd3ff2ae1c20a2319979013e36a4472372af20580d323a1ce15f0385d5ed75')

prepare() {
  cd ${srcdir}
  rm -rf ${_realname}-${pkgver}
  unzip ../${_realname}-${pkgver}.zip
}

build() {
    mkdir -p "${srcdir}"/build-${CARCH} && cd "${srcdir}"/build-${CARCH}

    # Bundle Basis Universal
    ln -sf $srcdir/basis_universal-${_basis_pkgver}/ "$srcdir/${_realname}-${pkgver}/src/external/basis-universal"

    # Bundle meshoptimizer
    ln -sf $srcdir/meshoptimizer-${_meshopt_pkgver}/ "$srcdir/${_realname}-${pkgver}/src/external/meshoptimizer"

    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=" \
        ${MINGW_PREFIX}/bin/cmake \
            -G'Ninja' \
            -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
            -DWITH_ASSIMPIMPORTER=ON \
            -DWITH_BASISIMPORTER=ON \
            -DWITH_DDSIMPORTER=ON \
            -DWITH_DEVILIMAGEIMPORTER=ON \
            -DWITH_DRFLACAUDIOIMPORTER=ON \
            -DWITH_DRMP3AUDIOIMPORTER=ON \
            -DWITH_DRWAVAUDIOIMPORTER=ON \
            -DWITH_FREETYPEFONT=ON \
            -DWITH_FAAD2AUDIOIMPORTER=ON \
            -DWITH_HARFBUZZFONT=ON \
            -DWITH_ICOIMPORTER=ON \
            -DWITH_JPEGIMAGECONVERTER=ON \
            -DWITH_JPEGIMPORTER=ON \
            -DWITH_MINIEXRIMAGECONVERTER=ON \
            -DWITH_MESHOPTIMIZERSCENECONVERTER=ON \
            -DWITH_PNGIMAGECONVERTER=ON \
            -DWITH_PNGIMPORTER=ON \
            -DWITH_OPENGEXIMPORTER=ON \
            -DWITH_PRIMITIVEIMPORTER=ON \
            -DWITH_STANFORDIMPORTER=ON \
            -DWITH_STANFORDSCENECONVERTER=ON \
            -DWITH_STBIMAGECONVERTER=ON \
            -DWITH_STBIMAGEIMPORTER=ON \
            -DWITH_STBTRUETYPEFONT=ON \
            -DWITH_STBVORBISAUDIOIMPORTER=ON \
            -DWITH_TINYGLTFIMPORTER=ON \
            "${extra_config[@]}" \
            ../${_realname}-${pkgver}
    ninja
}

package() {
    cd "${srcdir}"/build-${CARCH}
    DESTDIR="${pkgdir}" ninja install

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