Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
157 | kardasa | 1 | # Copyright 1999-2012 Gentoo Foundation |
2 | # Distributed under the terms of the GNU General Public License v2 |
||
3 | # $Header: $ |
||
4 | |||
5 | EAPI=4 |
||
6 | |||
7 | inherit check-reqs eutils games unpacker |
||
8 | |||
9 | MY_PN="${PN//-/_}" |
||
10 | MY_REV="-2" |
||
11 | MY_ARCH="${ARCH/amd64/x86_64}" |
||
12 | |||
13 | DESCRIPTION="Amnesia: The Dark Descent is a first person survival horror. A game about immersion, discovery and living through a nightmare." |
||
14 | HOMEPAGE="http://www.amnesiagame.com/" |
||
15 | SRC_URI="${MY_PN}_${PV}${MY_REV}.sh" |
||
16 | |||
17 | RESTRICT="fetch strip" |
||
18 | LICENSE="Frictional_Games-EULA" |
||
19 | |||
20 | SLOT="0" |
||
21 | KEYWORDS="~amd64 ~x86" |
||
22 | IUSE="doc linguas_de linguas_es linguas_fr linguas_it linguas_ru" |
||
23 | |||
24 | DEPEND="app-arch/xz-utils" |
||
25 | RDEPEND="media-libs/freealut |
||
26 | >=media-libs/glew-1.5 |
||
27 | media-libs/jpeg:62 |
||
28 | media-libs/libpng:1.2 |
||
29 | media-libs/libtheora |
||
30 | media-libs/libvorbis |
||
31 | media-libs/openal |
||
32 | media-libs/sdl-image |
||
33 | media-libs/sdl-ttf |
||
34 | sys-libs/zlib |
||
35 | x11-libs/libxcb |
||
36 | x11-libs/libXext |
||
37 | virtual/glu |
||
38 | virtual/opengl" |
||
39 | |||
40 | CHECKREQS_DISK_BUILD="3500M" |
||
41 | |||
42 | S="${WORKDIR}/${PN}" |
||
43 | |||
44 | GAMEDIR="${GAMES_PREFIX_OPT}/${PN}" |
||
45 | |||
46 | pkg_nofetch() { |
||
47 | einfo "" |
||
48 | einfo "Please buy and download \"${SRC_URI}\" from:" |
||
49 | einfo " ${HOMEPAGE}" |
||
50 | einfo "and move/link it to \"${DISTDIR}\"" |
||
51 | einfo "" |
||
52 | } |
||
53 | |||
54 | pkg_setup() { |
||
55 | games_pkg_setup |
||
56 | } |
||
57 | |||
58 | src_unpack() { |
||
59 | einfo "\nUnpacking files. This will take several minutes.\n" |
||
60 | mkdir "${S}" || die "mkdir "${S}" failed" |
||
61 | cd "${S}" || die "cd '${S}' failed" |
||
62 | |||
63 | unpack_makeself || die "unpack_makeself failed" |
||
64 | |||
65 | mv "instarchive_all" "../${P}.tar.lzma" || die "move 'instarchive_all' failed" |
||
66 | mv "instarchive_all_${MY_ARCH}" "../${P}-${MY_ARCH}.tar.lzma" || die "move 'instarchive_all_${MY_ARCH}' failed" |
||
67 | |||
68 | cd "${WORKDIR}" || die "cd '${WORKDIR}' failed" |
||
69 | |||
70 | echo ">>> Unpacking ./${P}.tar.lzma to ${WORKDIR}" |
||
71 | #Standard unpack fails due to poor quality of archive |
||
72 | xz -F lzma -d -c "./${P}.tar.lzma" 2>/dev/null | tar xf - || die "unpacking '${P}.tar.lzma' failed" |
||
73 | rm "./${P}.tar.lzma" |
||
74 | |||
75 | unpack "./${P}-${MY_ARCH}.tar.lzma" || die "unpack '${P}-${MY_ARCH}.tar.lzma' failed" |
||
76 | rm "./${P}-${MY_ARCH}.tar.lzma" |
||
77 | } |
||
78 | |||
79 | src_prepare() { |
||
80 | # libfltk.so.1.1 is needed because it's no longer in portage |
||
81 | mv "${WORKDIR}"/Amnesia/libs*/all/libfltk* "${WORKDIR}"/Amnesia/libs*/ || die "libfltk extraction failed" |
||
82 | |||
83 | #reset ${S} for outprocessing |
||
84 | rm -rf "${S}" |
||
85 | mv "${WORKDIR}/Amnesia" "${S}" || die "mv 'Amnesia' failed" |
||
86 | cd ${S} |
||
87 | |||
88 | # Files to remove. |
||
89 | REMOVE="libs*/* |
||
90 | |||
91 | *.rtf |
||
92 | *.sh" |
||
93 | |||
94 | # Files to keep. |
||
95 | # Bundled LibIL (media-libs/devil) isn't in portage as too old |
||
96 | KEEP="libs*/libIL* |
||
97 | libs*/libfltk*" |
||
98 | |||
99 | # Collect infos about languages... |
||
100 | LINGUAS_ARRAY=() # Linguas - string: E.g.: "linguas_en" |
||
101 | LANG_ARRAY=() # Lang - string: E.g.: "en" |
||
102 | LANGUAGE_ARRAY=() # Language - string: E.g.: "english" |
||
103 | LANGUAGE_SHORT_ARRAY=() # Language Short - string: E.g.: "eng" |
||
104 | USE_ARRAY=() # Used - bool (0,1) |
||
105 | |||
106 | local linguas_in_use="0" |
||
107 | for use in ${IUSE} |
||
108 | do |
||
109 | if [[ "${use%%_*}" == "linguas" ]] |
||
110 | then |
||
111 | local tmp="${use}" |
||
112 | LINGUAS_ARRAY=(${LINGUAS_ARRAY[@]} "${tmp}") |
||
113 | |||
114 | tmp="${tmp##linguas_}" |
||
115 | LANG_ARRAY=(${LANG_ARRAY[@]} "${tmp}") |
||
116 | |||
117 | case "${tmp}" in |
||
118 | "de") tmp="german";; |
||
119 | "es") tmp="spanish";; |
||
120 | "fr") tmp="french";; |
||
121 | "it") tmp="italian";; |
||
122 | "ru") tmp="russian";; |
||
123 | *) tmp="";; |
||
124 | esac |
||
125 | LANGUAGE_ARRAY=(${LANGUAGE_ARRAY[@]} "${tmp}") |
||
126 | LANGUAGE_SHORT_ARRAY=(${LANGUAGE_SHORT_ARRAY[@]} "${tmp:0:3}") |
||
127 | |||
128 | if use ${use} |
||
129 | then |
||
130 | USE_ARRAY=(${USE_ARRAY[@]} "1") |
||
131 | linguas_in_use="$(( ${linguas_in_use} + 1 ))" |
||
132 | else |
||
133 | USE_ARRAY=(${USE_ARRAY[@]} "0") |
||
134 | fi |
||
135 | fi |
||
136 | done |
||
137 | |||
138 | # ...then process them. |
||
139 | local n="0" |
||
140 | local docs_eng="0" |
||
141 | while [[ "${n}" -lt "${#LINGUAS_ARRAY[@]}" ]] |
||
142 | do |
||
143 | if [[ "${USE_ARRAY[${n}]}" -gt "0" ]] |
||
144 | then |
||
145 | # If only one lang is selected, use it as default. |
||
146 | if [[ "${linguas_in_use}" == "1" ]] |
||
147 | then |
||
148 | sed -e "s#english.lang#${LANGUAGE_ARRAY[${n}]}.lang#g" \ |
||
149 | -i config/*main_init.cfg || die "sed \"config/*main_init.cfg\" failed" |
||
150 | fi |
||
151 | else |
||
152 | REMOVE="${REMOVE} $(find config -type f -name "*${LANGUAGE_ARRAY[${n}]}.lang")" |
||
153 | if [[ -d "lang/${LANGUAGE_SHORT_ARRAY[${n}]}" ]] |
||
154 | then |
||
155 | REMOVE="${REMOVE} lang/${LANGUAGE_SHORT_ARRAY[${n}]}" |
||
156 | fi |
||
157 | fi |
||
158 | |||
159 | if use doc |
||
160 | then |
||
161 | if [[ -f "EULA_${LANG_ARRAY[${n}]}.rtf" && -f "Manual_${LANG_ARRAY[${n}]}.pdf" ]] |
||
162 | then |
||
163 | KEEP="${KEEP} EULA_${LANG_ARRAY[${n}]}.rtf Manual_${LANG_ARRAY[${n}]}.pdf" |
||
164 | else |
||
165 | local docs_eng="1" |
||
166 | fi |
||
167 | fi |
||
168 | |||
169 | n="$(( ${n} + 1 ))" |
||
170 | done |
||
171 | |||
172 | if use doc && [[ ( "${linguas_in_use}" == "0" || "${docs_eng}" != "0" ) ]] |
||
173 | then |
||
174 | KEEP="${KEEP} EULA_en.rtf Manual_en.pdf Remember*.pdf" |
||
175 | fi |
||
176 | |||
177 | einfo " Removing useless files ..." |
||
178 | for remove in ${REMOVE} |
||
179 | do |
||
180 | local removable="1" |
||
181 | for keep in ${KEEP} |
||
182 | do |
||
183 | if [[ "${remove}" == "${keep}" && "${removable}" == "1" ]] |
||
184 | then |
||
185 | local removable="0" |
||
186 | fi |
||
187 | done |
||
188 | |||
189 | if [[ "${removable}" == "1" ]] |
||
190 | then |
||
191 | rm -r "${S}/"${remove} &> /dev/null |
||
192 | fi |
||
193 | done |
||
194 | |||
195 | if use amd64 |
||
196 | then |
||
197 | mv "Amnesia.bin64" "Amnesia.bin" || die "mv \"Amnesia.bin64\" failed" |
||
198 | mv "Launcher.bin64" "Launcher.bin" || die "mv \"Launcher.bin64\" failed" |
||
199 | fi |
||
200 | } |
||
201 | |||
202 | src_install() { |
||
203 | # Install data |
||
204 | insinto "${GAMEDIR}" |
||
205 | |||
206 | einfo " Installing game data files ..." |
||
207 | for directory in $(find * -maxdepth 0 -type d ! -name "libs*") |
||
208 | do |
||
209 | doins -r ${directory} || die "doins game data files failed" |
||
210 | done |
||
211 | |||
212 | # Other files |
||
213 | find . -maxdepth 1 -type f ! -name "*.bin" \ |
||
214 | ! -name "*.pdf" \ |
||
215 | ! -name "*.png" \ |
||
216 | ! -name "*.rtf" \ |
||
217 | ! -name "*.sh" \ |
||
218 | -exec doins '{}' \; || die "doins other files failed" |
||
219 | |||
220 | |||
221 | # Install libraries and executables |
||
222 | einfo " Installing libraries and executables ..." |
||
223 | |||
224 | if use amd64 |
||
225 | then |
||
226 | local libsdir="${GAMEDIR}/libs64" |
||
227 | else |
||
228 | local libsdir="${GAMEDIR}/libs" |
||
229 | fi |
||
230 | |||
231 | exeinto "${libsdir}" |
||
232 | doexe libs*/* || die "doexe \"libs\" failed" |
||
233 | dosym "/usr/$(get_libdir)/libGLEW.so" "${libsdir}/libGLEW.so.1.5" |
||
234 | |||
235 | exeinto "${GAMEDIR}" |
||
236 | doexe *.bin || die "doexe \".bin\" binaries failed" |
||
237 | |||
238 | # Make game wrapper |
||
239 | local wrapper="${S}/${PN}" |
||
240 | local ext="${PN}-justine" |
||
241 | |||
242 | cat << EOF > "${wrapper}" || die "echo failed" |
||
243 | #!/bin/sh |
||
244 | if [[ "\$(basename "\${0}")" == "${ext}" ]] |
||
245 | then |
||
246 | params="ptest \${@}" |
||
247 | fi |
||
248 | |||
249 | if [[ -w "\${HOME}/.frictionalgames/Amnesia/Main/main_settings.cfg" ]] |
||
250 | then |
||
251 | exec ./Amnesia.bin \${params:-"\${@}"} |
||
252 | else |
||
253 | exec ./Launcher.bin "\${@}" |
||
254 | fi |
||
255 | EOF |
||
256 | |||
257 | # Install wrapper |
||
258 | dogamesbin "${wrapper}" || die "dogamesbin ${wrapper} failed" |
||
259 | dosym "${PN}" "${GAMES_BINDIR}/${ext}" |
||
260 | |||
261 | # Install icon and desktop file |
||
262 | newicon "Amnesia.png" "${PN}.png" || die "newicon failed" |
||
263 | make_desktop_entry "${PN}" "Amnesia: The Dark Descent" "/usr/share/pixmaps/${PN}.png" || die "make_desktop_entry failed" |
||
264 | make_desktop_entry "${ext}" "Amnesia: The Dark Descent - Justine" "/usr/share/pixmaps/${PN}.png" || die "make_desktop_entry failed" |
||
265 | |||
266 | # Install documentation |
||
267 | if use doc |
||
268 | then |
||
269 | dodoc *.rtf *.pdf || die "dodoc failed" |
||
270 | fi |
||
271 | |||
272 | # Setting permissions. |
||
273 | einfo " Setting permissions ..." |
||
274 | prepgamesdirs |
||
275 | } |
||
276 | |||
277 | pkg_postinst() { |
||
278 | ewarn "" |
||
279 | ewarn "Amnesia: The Dark Descent needs video drivers that provide a complete". |
||
280 | ewarn "GLSL 1.20 implementation. For more information, please visit:" |
||
281 | ewarn "http://www.frictionalgames.com/forum/thread-3760.html" |
||
282 | ewarn "" |
||
283 | ewarn "--------------------------------------------------------------------" |
||
284 | ewarn "" |
||
285 | ewarn "Saved games from previous versions may not be fully compatible." |
||
286 | ewarn "" |
||
287 | } |