Subversion Repositories KardasA Overlay

Rev

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
		*.pdf
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
}