# Copyright 2015-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 lua [ whitelist="5.1" multibuild=false ]
require github [ user=OpenRA project=OpenRA tag=release-${PV} ]

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

## this is a massive amount of 3rd party deps that would otherwise
## be fetched during build time
NG_SRC="https://nuget.org/api/v2/package"
# 3rd party deps
StyleCopPlus_MSBuild="${NG_SRC}/StyleCopPlus.MSBuild/4.7.49.5 -> StyleCopPlus_MSBuild-4.7.49.5.zip"
StyleCop_MSBuild="${NG_SRC}/StyleCop.MSBuild/4.7.49.0 -> StyleCop_MSBuild-4.7.49.0.zip"
SharpZipLib="${NG_SRC}/SharpZipLib/0.86.0 -> SharpZipLib-0.86.0.zip"
MaxMind_Db="${NG_SRC}/MaxMind.Db/1.1.0.0 -> MaxMind_Db-1.1.0.0.zip"
Newtonsoft_Json="${NG_SRC}/Newtonsoft.Json/7.0.1 -> Newtonsoft_Json-7.0.1.zip"
RestSharp="${NG_SRC}/RestSharp/105.2.3 -> RestSharp-105.2.3.zip"
MaxMind_GeoIP2="${NG_SRC}/MaxMind.GeoIP2/2.3.1 -> MaxMind_GeoIP2-2.3.1.zip"
SharpFont="${NG_SRC}/SharpFont/3.1.0 -> SharpFont-3.1.0.zip"
NUnit="${NG_SRC}/NUnit/3.0.1 -> NUnit-3.0.1.zip"
NUnit_Console="${NG_SRC}/NUnit.Console/3.0.1 -> NUnit_Console-3.0.1.zip"
Mono_Nat="${NG_SRC}/Mono.Nat/1.2.24 -> Mono_Nat-1.2.24.zip"
FuzzyLogicLibrary="${NG_SRC}/FuzzyLogicLibrary/1.2.0 -> FuzzyLogicLibrary-1.2.0.zip"
SDL2CS="https://github.com/OpenRA/SDL2-CS/releases/download/20150709/SDL2-CS.dll -> SDL2-CS.dll.20150709"
Eluant="https://github.com/OpenRA/Eluant/releases/download/20140425/Eluant.dll -> Eluant.dll.20140425"
SmartIrc4net="${NG_SRC}/SmartIrc4net/0.4.5.1 -> SmartIrc4net-0.4.5.1.zip"
# unfortunately, this may randomly change
GEO_IP_DB="http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz -> GeoLite2-Country-2015-10-18.mmdb.gz"
OpenAL_CS="https://github.com/OpenRA/OpenAL-CS/releases/download/20151227/OpenAL-CS.dll -> OpenAL-CS-20151227.dll"
OpenAL_CS_config="https://github.com/OpenRA/OpenAL-CS/releases/download/20151227/OpenAL-CS.dll.config -> OpenAL-CS-20151227.dll.config"

DOWNLOADS="${DOWNLOADS}
${StyleCopPlus_MSBuild}
${StyleCop_MSBuild}
${SharpZipLib}
${MaxMind_Db}
${Newtonsoft_Json}
${RestSharp}
${MaxMind_GeoIP2}
${SharpFont}
${NUnit}
${NUnit_Console}
${Mono_Nat}
${FuzzyLogicLibrary}
${SDL2CS}
${Eluant}
${SmartIrc4net}
${GEO_IP_DB}
${OpenAL_CS}
${OpenAL_CS_config}
"

LICENCES="GPL-3"
SLOT="0"
PLATFORMS="~amd64 ~x86"

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:
        x11-apps/xdg-utils
    suggestion:
        gnome-desktop/zenity [[ description = [ Graphical error dialogs ] ]]
"

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

src_unpack() {
    unpack openra-release-${PV}.tar.gz

    # this is pure crapshit, but it will successfully die
    # if upstream has added/changed files
    edo cd "${WORK}"/thirdparty
    edo sed -i \
        -e 's/get()/furz()/' \
        -e 's|curl |: |' \
        fetch-thirdparty-deps.sh

    edo mkdir "${WORK}"/thirdparty/download
    get() {
        # don't add dies here
        local archive="${1/./_}"
        local version="${2}"
        mkdir -p "${WORK}"/thirdparty/download/${1}
        unzip -o -qq "${FETCHEDDIR}"/${archive}-${version}.zip \
            -d "${WORK}"/thirdparty/download/${1}
    }
    export -f get
    edo ./fetch-thirdparty-deps.sh
    unset get
    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
}

src_configure() { :; }

src_prepare() {
    # register game-version
    emake VERSION="release-${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}"/
}

src_compile() {
    emake VERSION="release-${PV}" core tools
}

src_install() {
    emake \
        datadir="/usr/share" \
        bindir="/usr/$(exhost --target)/bin" \
        libdir="/usr/$(exhost --target)/libexec" \
        VERSION="release-${PV}" \
        DESTDIR="${IMAGE}" \
        install-all install-linux-scripts install-linux-mime install-linux-icons

    exeinto /usr/$(exhost --target)/libexec/openra
    doexe Eluant.dll.config

    # desktop entries
    install_desktop_entry "Exec=${PN} Game.Mod=cnc" "Name=OpenRA CNC"
    install_desktop_entry "Exec=${PN} Game.Mod=ra" "Name=OpenRA RA"
    install_desktop_entry "Exec=${PN} Game.Mod=d2k" "Name=OpenRA Dune2k"
    install_desktop_entry "Exec=${PN}-editor" "Name=OpenRA Map Editor"
}

pkg_postinst() {
    gtk-icon-cache_pkg_postinst
    freedesktop-mime_pkg_postinst
    freedesktop-desktop_pkg_postinst
}

pkg_postrm() {
    gtk-icon-cache_pkg_postrm
    freedesktop-desktop_pkg_postrm
    freedesktop-mime_pkg_postrm
}