# Copyright 2016 Julian Ospald <hasufell@posteo.de>
# Distributed under the terms of the GNU General Public License v2

require desktop-utils gtk-icon-cache freedesktop-desktop freedesktop-mime
require alternatives

export_exlib_phases src_unpack src_prepare src_configure src_compile src_install pkg_postinst pkg_postrm

SUMMARY="A free RTS engine supporting games like Command & Conquer and Red Alert"
HOMEPAGE="http://www.openra.net/"

LICENCES="GPL-3"

MYOPTIONS="
    ( providers: ijg-jpeg jpeg-turbo ) [[ number-selected = exactly-one ]]
"

DEPENDENCIES="
    build:
        virtual/unzip
    build+run:
        dev-dotnet/libgdiplus
        dev-lang/mono[>=4.2]
        media-libs/SDL:2[X]
        media-libs/freetype:2
        media-libs/openal
        x11-dri/mesa
        providers:ijg-jpeg? ( media-libs/jpeg:= )
        providers:jpeg-turbo? ( media-libs/libjpeg-turbo )
    run:
        !games-strategy/openra:0 [[
            description = [ File conflict with new SLOT layout ]
            resolution = [ uninstall-blocked-after ]
        ]]
        x11-apps/xdg-utils
    suggestion:
        gnome-desktop/zenity [[ description = [ Graphical error dialogs ] ]]
"

WORK=${WORKBASE}/OpenRA-${SLOT}-${PV}

MV_FILES=(
    /usr/share/applications/openra-cnc.desktop
    /usr/share/applications/openra-ra.desktop
    /usr/share/applications/openra-d2k.desktop

    /usr/share/icons/hicolor/128x128/apps/openra-cnc.png
    /usr/share/icons/hicolor/16x16/apps/openra-cnc.png
    /usr/share/icons/hicolor/32x32/apps/openra-cnc.png
    /usr/share/icons/hicolor/48x48/apps/openra-cnc.png
    /usr/share/icons/hicolor/64x64/apps/openra-cnc.png
    /usr/share/icons/hicolor/scalable/apps/openra-cnc.svg

    /usr/share/icons/hicolor/16x16/apps/openra-ra.png
    /usr/share/icons/hicolor/32x32/apps/openra-ra.png
    /usr/share/icons/hicolor/48x48/apps/openra-ra.png
    /usr/share/icons/hicolor/64x64/apps/openra-ra.png
    /usr/share/icons/hicolor/scalable/apps/openra-ra.svg

    /usr/share/icons/hicolor/16x16/apps/openra-d2k.png
    /usr/share/icons/hicolor/32x32/apps/openra-d2k.png
    /usr/share/icons/hicolor/48x48/apps/openra-d2k.png
    /usr/share/icons/hicolor/64x64/apps/openra-d2k.png
)

openra-build_src_unpack() {
    unpack openra-${SLOT}-${PV}.tar.gz

    edo mkdir "${WORK}"/thirdparty/download

    edo cd "${WORK}"/thirdparty
    edo sed -i \
        -e 's|^[[:space:]]+curl .*$|: |' \
        fetch-thirdparty-deps.sh

    cat <<EOF > noget.sh
#!/bin/sh

set -e

archive="\${1/./_}"
version="\${2}"
mkdir -p "${WORK}"/thirdparty/download/\${1}
unzip -o -qq "${FETCHEDDIR}"/\${archive}-\${version}.zip \
    -d "${WORK}"/thirdparty/download/\${1}
EOF

    edo ./fetch-thirdparty-deps.sh

    edo cd "${WORK}"/thirdparty/download
    edo cp "${FETCHEDDIR}"/${SDL2CS##* } ./SDL2-CS.dll
    edo cp "${FETCHEDDIR}"/${Eluant##* } ./Eluant.dll
    edo cp "${FETCHEDDIR}"/${GEO_IP_DB##* } ./GeoLite2-Country.mmdb.gz
    edo cp "${FETCHEDDIR}"/${OpenAL_CS##* } ./OpenAL-CS.dll
    edo cp "${FETCHEDDIR}"/${OpenAL_CS_config##* } ./OpenAL-CS.dll.config
}

openra-build_src_configure() { :; }

openra-build_src_prepare() {
    # register game-version
    emake VERSION="${SLOT}-${PV}" version

    edo sed \
        -e "s/@LIBLUA51@/liblua5.1.so/" \
        "${WORK}"/thirdparty/Eluant.dll.config.in > Eluant.dll.config

    edo cd "${WORK}"/thirdparty/download
    edo cp *.dll *.dll.config GeoLite2-Country.mmdb.gz "${WORK}"/
}

openra-build_src_compile() {
    emake VERSION="${SLOT}-${PV}" core
}

openra-build_src_install() {
    emake \
        datadir="/usr/share" \
        bindir="/usr/$(exhost --target)/bin" \
        libdir="/usr/$(exhost --target)/libexec" \
        gameinstalldir="/usr/$(exhost --target)/libexec/${PN}-${SLOT}" \
        VERSION="${SLOT}-${PV}" \
        DESTDIR="${IMAGE}" \
        install install-linux-scripts install-linux-mime \
        install-linux-icons install-linux-desktop install-linux-appdata

    exeinto /usr/$(exhost --target)/libexec/${PN}-${SLOT}
    doexe Eluant.dll.config

    # fix desktop files
    edo sed -i \
            -e "/^Name=/s#\$# (${SLOT})#" \
            -e "/^Exec=/s#\$#-${SLOT}#" \
            -e "/^Icon=/s#\$#-${SLOT}#" \
            "${IMAGE%/}"/usr/share/applications/*.desktop

    # make sure slots don't have file collisions
    local i
    for i in /usr/$(exhost --target)/bin/openra-{ra,cnc,d2k} \
             /usr/$(exhost --target)/bin/openra-{ra,cnc,d2k}-server \
             /usr/share/mime/packages/openra-{ra,cnc,d2k}.xml \
             /usr/share/appdata/openra-{ra,cnc,d2k}.appdata.xml
    do
        edo mv "${IMAGE%/}"${i} "${IMAGE%/}"${i}-${SLOT}
    done
    unset i
    for i in ${MV_FILES[@]}
    do
        edo mv "${IMAGE%/}"${i} "${IMAGE%/}"${i%.*}-${SLOT}.${i##*.}
    done

    # set up alternatives
    alternatives_for _openra ${SLOT} ${PV} \
        /usr/$(exhost --target)/bin/openra-cnc{,-${SLOT}} \
        /usr/$(exhost --target)/bin/openra-cnc-server{,-${SLOT}} \
        /usr/$(exhost --target)/bin/openra-ra{,-${SLOT}} \
        /usr/$(exhost --target)/bin/openra-ra-server{,-${SLOT}} \
        /usr/$(exhost --target)/bin/openra-d2k{,-${SLOT}} \
        /usr/$(exhost --target)/bin/openra-d2k-server{,-${SLOT}} \
        /usr/share/appdata/openra-cnc.appdata.xml{,-${SLOT}} \
        /usr/share/appdata/openra-ra.appdata.xml{,-${SLOT}} \
        /usr/share/appdata/openra-d2k.appdata.xml{,-${SLOT}} \
        /usr/share/mime/packages/openra-cnc.xml{,-${SLOT}} \
        /usr/share/mime/packages/openra-ra.xml{,-${SLOT}} \
        /usr/share/mime/packages/openra-d2k.xml{,-${SLOT}}
}

openra-build_pkg_postinst() {
    alternatives_pkg_postinst
    gtk-icon-cache_pkg_postinst
    freedesktop-mime_pkg_postinst
    freedesktop-desktop_pkg_postinst
}

openra-build_pkg_postrm() {
    gtk-icon-cache_pkg_postrm
    freedesktop-desktop_pkg_postrm
    freedesktop-mime_pkg_postrm
}