# Author: mosra <mosra@centrum.cz>
pkgname=emscripten-magnum
pkgver=dev.wasm
pkgrel=1
pkgdesc="C++11/C++14 graphics middleware for games and data visualization (Emscripten, wasm)"
arch=('any')
url="https://magnum.graphics"
license=('MIT')
depends=('emscripten-corrade')
makedepends=('cmake' 'emscripten' 'corrade' 'ninja' 'rsync')
options=('!strip' '!buildflags')

_rootdir=$startdir/../../

prepare() {
    # rsync can't create the directory on its own if it doesn't exist at all,
    # heh
    mkdir -p $(em-config CACHE)/sysroot/include/
    # This is needed in order to fill ~/.emscripten_cache/sysroot/ with
    # up-to-date dependency headers and libs. There's
    #   embuilder build sysroot --force
    # as suggested in https://github.com/emscripten-core/emscripten/pull/13090
    # that does the same in a builtin way, but it DELIBERATELY does not
    # preserve timestamps in any way, forcing a full rebuild every time. Why?!
    #   https://github.com/emscripten-core/emscripten/blob/0566a76b500bd2bbd535e108f657fce1db7f6f75/tools/shared.py#L687
    # Could use cp -rp instead of rsync if the system include dir didn't have
    # that stupid designed-to-fail version.h :(
    rsync -rlt /usr/lib/emscripten/system/include/ --exclude=emscripten/version.h $(em-config CACHE)/sysroot/include/
}

build() {
    if [ ! -d "$_rootdir/build-emscripten-wasm" ] ; then
        mkdir "$_rootdir/build-emscripten-wasm"
        cd "$_rootdir/build-emscripten-wasm"

        cmake .. \
            -DCMAKE_TOOLCHAIN_FILE="$_rootdir/toolchains/generic/Emscripten-wasm.cmake" \
            -G Ninja
    fi

    cd "$_rootdir/build-emscripten-wasm"

    # Put tests into a separate target as they take ages to build. They're
    # built only inside check() so `makepkg --nocheck` will skip building them.
    #
    # Colored output is enabled implicitly. If Ninja detects it's outputting to
    # a pipe, it strips it away from the output; Clang unfortunately doesn't
    # have any env var to temporarily disable colors. The inverse, i.e.
    # preserving colors when Ninja outputs to a pipe can be done with
    # CLICOLOR_FORCE=1: https://github.com/ninja-build/ninja/issues/2196
    cmake .. \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \
        -DCMAKE_COLOR_DIAGNOSTICS=ON \
        -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten \
        -DMAGNUM_WITH_AUDIO=ON \
        -DMAGNUM_WITH_EMSCRIPTENAPPLICATION=ON \
        -DMAGNUM_WITH_SDL2APPLICATION=ON \
        -DMAGNUM_WITH_WINDOWLESSEGLAPPLICATION=ON \
        -DMAGNUM_WITH_ANYAUDIOIMPORTER=ON \
        -DMAGNUM_WITH_ANYIMAGECONVERTER=ON \
        -DMAGNUM_WITH_ANYIMAGEIMPORTER=ON \
        -DMAGNUM_WITH_ANYSCENECONVERTER=ON \
        -DMAGNUM_WITH_ANYSCENEIMPORTER=ON \
        -DMAGNUM_WITH_ANYSHADERCONVERTER=ON \
        -DMAGNUM_WITH_MAGNUMFONT=ON \
        -DMAGNUM_WITH_OBJIMPORTER=ON \
        -DMAGNUM_WITH_TGAIMAGECONVERTER=ON \
        -DMAGNUM_WITH_TGAIMPORTER=ON \
        -DMAGNUM_WITH_WAVAUDIOIMPORTER=ON \
        -DMAGNUM_WITH_DISTANCEFIELDCONVERTER=OFF \
        -DMAGNUM_WITH_FONTCONVERTER=OFF \
        -DMAGNUM_WITH_IMAGECONVERTER=ON \
        -DMAGNUM_WITH_SCENECONVERTER=ON \
        -DMAGNUM_WITH_SHADERCONVERTER=ON \
        -DMAGNUM_WITH_GL_INFO=ON \
        -DMAGNUM_WITH_AL_INFO=ON \
        -DMAGNUM_BUILD_TESTS=ON \
        -DMAGNUM_BUILD_GL_TESTS=ON \
        -DCORRADE_TESTSUITE_TEST_TARGET=build-tests
    ninja
}

check() {
    cd "$_rootdir/build-emscripten-wasm"

    ninja build-tests

    CORRADE_TEST_COLOR=ON ctest -j9 --output-on-failure -E "(GLTest|GLBenchmark|ALTest)"
}

package() {
    cd "$_rootdir/build-emscripten-wasm"
    DESTDIR="$pkgdir/" ninja install
}
