Subversion Repositories KardasA Overlay

Rev

Rev 125 | Blame | Compare with Previous | Last modification | View Log | RSS feed

# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=3

inherit eutils games

MY_PN="${PN//-/_}"

DESCRIPTION="Amnesia: The Dark Descent is a first person survival horror. A game about immersion, discovery and living through a nightmare."
HOMEPAGE="http://www.amnesiagame.com"
SRC_URI="${MY_PN}_${PV}.sh"

PROPERTIES="interactive"
RESTRICT="fetch strip"
LICENSE="Frictional_Games-EULA"

SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="doc glew-bundled fltk-bundled linguas_de linguas_en linguas_es linguas_fr linguas_it"

DEPEND="app-arch/xz-utils"
RDEPEND="media-libs/freealut
        !glew-bundled? ( <media-libs/glew-1.6 )
        media-libs/jpeg:62
        media-libs/libogg
        media-libs/libvorbis
        media-libs/libpng:1.2
        media-libs/libtheora
        media-libs/openal
        media-libs/sdl-image
        media-libs/sdl-ttf
        sys-libs/zlib
        !fltk-bundled? ( <x11-libs/fltk-1.2 )
        x11-libs/libX11
        x11-libs/libXau
        x11-libs/libxcb
        x11-libs/libXdmcp
        x11-libs/libXext
        virtual/glu
        virtual/opengl"

S="${WORKDIR}/${PN}"

GAMEDIR="${GAMES_PREFIX_OPT}/${PN}"

#GAMES_CHECK_LICENSE="yes"

pkg_nofetch() {
        einfo "Please buy and download \"${SRC_URI}\" from:"
        einfo "  ${HOMEPAGE}"
        einfo "and move it to \"${DISTDIR}\""
        einfo
}

pkg_setup() {
    check_license
}

src_unpack() {
        mkdir "tmp" || die "mkdir \"tmp\" failed"
        cd "./tmp" || die "cd \"tmp\" failed"

        unpack_makeself || die "unpack_makeself failed"

        mv "subarch" "installer.tar.lzma" || die "move \"subarch\" failed"
        unpack "./installer.tar.lzma" || die "unpack \"installer.tar.lzma\" failed"

        mv "instarchive_all" "../${P}.tar.lzma" || die "move \"instarchive_all\" failed"
        if use amd64
        then
                mv "instarchive_all_x86_64" "../${P}-amd64.tar.lzma" || die "move \"instarchive_all_x86_64\" failed"
        fi
        if use x86
        then
                mv "instarchive_all_x86" "../${P}-x86.tar.lzma" || die "move \"instarchive_all_x86\" failed"
        fi
        mv "icon.xpm" "../${PN}.xpm"

        cd "${WORKDIR}" || die "cd \"${WORKDIR}\" failed"
        unpack ./*.tar.lzma || die "unpack failed"
        mv "Amnesia" "${PN}" || die "mv \"Amnesia\" failed"

        rm ./*.tar.lzma
        rm -r "./tmp"
}

src_prepare() {
        # Files to remove.
        REMOVE="Amnesia.png
                AmnesiaPDF.png
                checklibs*.sh"

        # Collect infos about languages...
        LINGUAS_ARRAY=()
        LANG_ARRAY=()
        LANGUAGE_ARRAY=()
        USE_ARRAY=()
        DEF_ARRAY=()
        DOC_ARRAY=()

        local linguas_def="0"
        local linguas_in_use="0"
        for use in ${IUSE}
        do
                if [[ "${use%%_*}" == "linguas" ]]
                then
                        local tmp="${use}"
                        LINGUAS_ARRAY=(${LINGUAS_ARRAY[@]} "${tmp}")

                        tmp="${tmp##linguas_}"
                        LANG_ARRAY=(${LANG_ARRAY[@]} "${tmp}")

                        case "${tmp}" in
                            "de") tmp="german";;
                            "en") tmp="english";;
                            "es") tmp="spanish";;
                            "fr") tmp="french";;
                            "it") tmp="italian";;
                            *) tmp="";;
                        esac
                        LANGUAGE_ARRAY=(${LANGUAGE_ARRAY[@]} "${tmp}")

                        if use ${use}
                        then
                                USE_ARRAY=(${USE_ARRAY[@]} "1")

                                case "${use}" in
                                        "linguas_${LANG:0:2}") DEF_ARRAY=(${DEF_ARRAY[@]} "2"); linguas_def="2";;
                                        "linguas_en") DEF_ARRAY=(${DEF_ARRAY[@]} "1"); linguas_def="$(( ${linguas_def:-0} < 2 ? 1 : 2 ))";;
                                        *) DEF_ARRAY=(${DEF_ARRAY[@]} "0");;
                                esac

                                if use doc
                                then
                                        DOC_ARRAY=(${DOC_ARRAY[@]} "1")
                                else
                                        DOC_ARRAY=(${DOC_ARRAY[@]} "0")
                                fi

                                linguas_in_use="$(( ${linguas_in_use} + 1 ))"
                        else
                                USE_ARRAY=(${USE_ARRAY[@]} "0")
                                DEF_ARRAY=(${DEF_ARRAY[@]} "0")
                                DOC_ARRAY=(${DOC_ARRAY[@]} "0")
                        fi
                fi
        done

        # ...then process them.
        local n="0"
        local linguas_set="0"
        while [[ "${n}" -lt "${#LINGUAS_ARRAY[@]}" ]]
        do
                if [[ "${USE_ARRAY[${n}]}" != "1" ]]
                then
                        # If no linguas keep at least english.
                        if [[ "${linguas_in_use}" == "0" && "${LINGUAS_ARRAY[${n}]}" == "linguas_en" ]]
                        then
                                if use doc
                                then
                                        DOC_ARRAY[${n}]="1"
                                fi
                        else
                                REMOVE="${REMOVE} config/base_${LANGUAGE_ARRAY[${n}]}.lang config/lang_main/${LANGUAGE_ARRAY[${n}]}.lang"
                        fi
                else
                        # Prefer languages in this order: system lang - english - first of others. Don't change anything if english (linguas_def == 1).
                        if [[ "${DEF_ARRAY[${n}]}" == "${linguas_def}" && "${linguas_def}" != "1" && "${linguas_set}" != "1" ]]
                        then
                                sed -e "s#english.lang#${LANGUAGE_ARRAY[${n}]}.lang#g" \
                                    -i "./config/main_init.cfg" || die "sed \"./config/main_init.cfg\" failed"

                                linguas_set="1"
                        fi
                fi

                if [[ "${DOC_ARRAY[${n}]}" != "1" ]]
                then
                        REMOVE="${REMOVE} EULA_${LANG_ARRAY[${n}]}.rtf Manual_${LANG_ARRAY[${n}]}.pdf"
                fi

                n="$(( ${n} + 1 ))"
        done

        einfo " Removing useless files ..."
        for remove in ${REMOVE}
        do
                rm -r "${S}/"${remove} || die "rm \"${remove}\" failed"
        done

        if use amd64
        then
                mv "Amnesia.bin64" "Amnesia.bin" || die "mv \"Amnesia.bin64\" failed"
                mv "Launcher.bin64" "Launcher.bin" || die "mv \"Launcher.bin64\" failed"
        fi
}

src_install() {
        # Install data
        insinto "${GAMEDIR}" || die "insinto \"${GAMEDIR}\" failed"

        einfo " Installing game data files ..."
        for directory in $(find * -maxdepth 0 -type d ! -name "libs*")
        do
                doins -r ${directory} || die "doins game data files failed"
        done

        # Other files
        find . -maxdepth 1 -type f ! -name "*.bin" \
                                   ! -name "*.pdf" \
                                   ! -name "*.png" \
                                   ! -name "*.rtf" \
                                   ! -name "*.sh" \
                                   -exec doins '{}' \; || die "doins other files failed"


        # Install libraries and executables
        einfo " Installing libraries and executables ..."
        if use amd64
        then
                local libsdir="${GAMEDIR}/libs64"
        fi
        if use x86
        then
                local libsdir="${GAMEDIR}/libs"
        fi

        # Used LibIL (media-libs/devil) isn't in portage as too old
        exeinto "${libsdir}" || die "exeinto \"${libsdir}\" failed"
        doexe libs*/libIL* || die "doexe \"libs\" failed"
        if use glew-bundled
        then
                # Used LibGlEW may not be installed. There is game is using 1.5, there is 1.6 in portage
                doexe libs*/libGLEW* || die "doexe \"libs\" failed"
        fi
        if use fltk-bundled
        then
                # Used Libfltk may not be installed. There is game is using 1.1, there is 1.3 in portage
                exeinto "${libsdir}/all" || die "exeinto \"${libsdir}/all\" failed"
                doexe libs*/all/libfltk* || die "doexe \"libs/all\" failed"
        fi
        exeinto "${GAMEDIR}" || die "exeinto \"${GAMEDIR}\" failed"
        doexe *.bin || die "doexe \".bin\" binaries failed"


        # Make game wrapper
        mkdir -p "${D}/${GAMES_BINDIR}" || die "mkdir \"${D}/${GAMES_BINDIR}\" failed"

        local wrapper="${D}/${GAMES_BINDIR}/${PN}"
        touch "${wrapper}" || die "touch \"${wrapper}\" failed"

        cat << EOF >> "${wrapper}" || die "echo failed"
#!/bin/sh
cd "${GAMEDIR}"
if [[ -w "\${HOME}/.frictionalgames/Amnesia/Main/main_settings.cfg" ]]
then
  exec ./Amnesia.bin "\${@}"
else
  exec ./Launcher.bin "\${@}"
fi
EOF


        # Install icon and desktop file
        doicon "../${PN}.xpm" || die "newicon \"icon.xpm\" failed"
        make_desktop_entry "${PN}" "Amnesia: The Dark Descent" || die "make_desktop_entry failed"


        # Install documentation
        if use doc
        then
                docinto ${PN}
                dodoc *.rtf *.pdf || die "dodoc failed"
        fi


        # Setting permissions.
        einfo " Setting permissions ..."
        prepgamesdirs
}

pkg_postinst() {
        ewarn ""
        ewarn "Amnesia: The Dark Descent needs video drivers"
        ewarn "that provide a complete GLSL 1.20 implementation."
        ewarn ""
        ewarn "Please visit \"http://www.frictionalgames.com/forum/thread-3760.html\""
        ewarn "for more infos."
        ewarn ""
        ewarn "--------------------------------------------------------------------"
        ewarn ""
        ewarn "If you was playing version 1.0 you might experience some oddities"
        ewarn "due to save game differences between 1.0 and 1.0.1."
        ewarn ""
}