# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=4 inherit check-reqs eutils games unpacker MY_PN="${PN//-/_}" MY_REV="-2" MY_ARCH="${ARCH/amd64/x86_64}" 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}${MY_REV}.sh" RESTRICT="fetch strip" LICENSE="Frictional_Games-EULA" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="doc linguas_de linguas_es linguas_fr linguas_it linguas_ru" DEPEND="app-arch/xz-utils" RDEPEND="media-libs/freealut >=media-libs/glew-1.5 media-libs/jpeg:62 media-libs/libpng:1.2 media-libs/libtheora media-libs/libvorbis media-libs/openal media-libs/sdl-image media-libs/sdl-ttf sys-libs/zlib x11-libs/libxcb x11-libs/libXext virtual/glu virtual/opengl" CHECKREQS_DISK_BUILD="3500M" S="${WORKDIR}/${PN}" GAMEDIR="${GAMES_PREFIX_OPT}/${PN}" pkg_nofetch() { einfo "" einfo "Please buy and download \"${SRC_URI}\" from:" einfo " ${HOMEPAGE}" einfo "and move/link it to \"${DISTDIR}\"" einfo "" } pkg_setup() { games_pkg_setup } src_unpack() { einfo "\nUnpacking files. This will take several minutes.\n" mkdir "${S}" || die "mkdir "${S}" failed" cd "${S}" || die "cd '${S}' failed" unpack_makeself || die "unpack_makeself failed" mv "instarchive_all" "../${P}.tar.lzma" || die "move 'instarchive_all' failed" mv "instarchive_all_${MY_ARCH}" "../${P}-${MY_ARCH}.tar.lzma" || die "move 'instarchive_all_${MY_ARCH}' failed" cd "${WORKDIR}" || die "cd '${WORKDIR}' failed" echo ">>> Unpacking ./${P}.tar.lzma to ${WORKDIR}" #Standard unpack fails due to poor quality of archive xz -F lzma -d -c "./${P}.tar.lzma" 2>/dev/null | tar xf - || die "unpacking '${P}.tar.lzma' failed" rm "./${P}.tar.lzma" unpack "./${P}-${MY_ARCH}.tar.lzma" || die "unpack '${P}-${MY_ARCH}.tar.lzma' failed" rm "./${P}-${MY_ARCH}.tar.lzma" } src_prepare() { # libfltk.so.1.1 is needed because it's no longer in portage mv "${WORKDIR}"/Amnesia/libs*/all/libfltk* "${WORKDIR}"/Amnesia/libs*/ || die "libfltk extraction failed" #reset ${S} for outprocessing rm -rf "${S}" mv "${WORKDIR}/Amnesia" "${S}" || die "mv 'Amnesia' failed" cd ${S} # Files to remove. REMOVE="libs*/* *.pdf *.rtf *.sh" # Files to keep. # Bundled LibIL (media-libs/devil) isn't in portage as too old KEEP="libs*/libIL* libs*/libfltk*" # Collect infos about languages... LINGUAS_ARRAY=() # Linguas - string: E.g.: "linguas_en" LANG_ARRAY=() # Lang - string: E.g.: "en" LANGUAGE_ARRAY=() # Language - string: E.g.: "english" LANGUAGE_SHORT_ARRAY=() # Language Short - string: E.g.: "eng" USE_ARRAY=() # Used - bool (0,1) 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";; "es") tmp="spanish";; "fr") tmp="french";; "it") tmp="italian";; "ru") tmp="russian";; *) tmp="";; esac LANGUAGE_ARRAY=(${LANGUAGE_ARRAY[@]} "${tmp}") LANGUAGE_SHORT_ARRAY=(${LANGUAGE_SHORT_ARRAY[@]} "${tmp:0:3}") if use ${use} then USE_ARRAY=(${USE_ARRAY[@]} "1") linguas_in_use="$(( ${linguas_in_use} + 1 ))" else USE_ARRAY=(${USE_ARRAY[@]} "0") fi fi done # ...then process them. local n="0" local docs_eng="0" while [[ "${n}" -lt "${#LINGUAS_ARRAY[@]}" ]] do if [[ "${USE_ARRAY[${n}]}" -gt "0" ]] then # If only one lang is selected, use it as default. if [[ "${linguas_in_use}" == "1" ]] then sed -e "s#english.lang#${LANGUAGE_ARRAY[${n}]}.lang#g" \ -i config/*main_init.cfg || die "sed \"config/*main_init.cfg\" failed" fi else REMOVE="${REMOVE} $(find config -type f -name "*${LANGUAGE_ARRAY[${n}]}.lang")" if [[ -d "lang/${LANGUAGE_SHORT_ARRAY[${n}]}" ]] then REMOVE="${REMOVE} lang/${LANGUAGE_SHORT_ARRAY[${n}]}" fi fi if use doc then if [[ -f "EULA_${LANG_ARRAY[${n}]}.rtf" && -f "Manual_${LANG_ARRAY[${n}]}.pdf" ]] then KEEP="${KEEP} EULA_${LANG_ARRAY[${n}]}.rtf Manual_${LANG_ARRAY[${n}]}.pdf" else local docs_eng="1" fi fi n="$(( ${n} + 1 ))" done if use doc && [[ ( "${linguas_in_use}" == "0" || "${docs_eng}" != "0" ) ]] then KEEP="${KEEP} EULA_en.rtf Manual_en.pdf Remember*.pdf" fi einfo " Removing useless files ..." for remove in ${REMOVE} do local removable="1" for keep in ${KEEP} do if [[ "${remove}" == "${keep}" && "${removable}" == "1" ]] then local removable="0" fi done if [[ "${removable}" == "1" ]] then rm -r "${S}/"${remove} &> /dev/null fi 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}" 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" else local libsdir="${GAMEDIR}/libs" fi exeinto "${libsdir}" doexe libs*/* || die "doexe \"libs\" failed" dosym "/usr/$(get_libdir)/libGLEW.so" "${libsdir}/libGLEW.so.1.5" exeinto "${GAMEDIR}" doexe *.bin || die "doexe \".bin\" binaries failed" # Make game wrapper local wrapper="${S}/${PN}" local ext="${PN}-justine" cat << EOF > "${wrapper}" || die "echo failed" #!/bin/sh if [[ "\$(basename "\${0}")" == "${ext}" ]] then params="ptest \${@}" fi if [[ -w "\${HOME}/.frictionalgames/Amnesia/Main/main_settings.cfg" ]] then exec ./Amnesia.bin \${params:-"\${@}"} else exec ./Launcher.bin "\${@}" fi EOF # Install wrapper dogamesbin "${wrapper}" || die "dogamesbin ${wrapper} failed" dosym "${PN}" "${GAMES_BINDIR}/${ext}" # Install icon and desktop file newicon "Amnesia.png" "${PN}.png" || die "newicon failed" make_desktop_entry "${PN}" "Amnesia: The Dark Descent" "/usr/share/pixmaps/${PN}.png" || die "make_desktop_entry failed" make_desktop_entry "${ext}" "Amnesia: The Dark Descent - Justine" "/usr/share/pixmaps/${PN}.png" || die "make_desktop_entry failed" # Install documentation if use doc then dodoc *.rtf *.pdf || die "dodoc failed" fi # Setting permissions. einfo " Setting permissions ..." prepgamesdirs } pkg_postinst() { ewarn "" ewarn "Amnesia: The Dark Descent needs video drivers that provide a complete". ewarn "GLSL 1.20 implementation. For more information, please visit:" ewarn "http://www.frictionalgames.com/forum/thread-3760.html" ewarn "" ewarn "--------------------------------------------------------------------" ewarn "" ewarn "Saved games from previous versions may not be fully compatible." ewarn "" }