Subversion Repositories KardasA Overlay

Rev

Rev 161 | Go to most recent revision | Details | Compare with Previous | 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//-/_}"
162 kardasa 10
#MY_REV="-2"
157 kardasa 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/"
162 kardasa 15
SRC_URI="${MY_PN}_${PV}.sh"
157 kardasa 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"
159 kardasa 62
 
160 kardasa 63
	unpack_makeself || die "unpack_makeself failed"
64
 
159 kardasa 65
	mv "subarch" "installer.tar.lzma" || die "move \"subarch\" failed"
66
	unpack "./installer.tar.lzma" || die "unpack \"installer.tar.lzma\" failed"
157 kardasa 67
 
68
	mv "instarchive_all" "../${P}.tar.lzma" || die "move 'instarchive_all' failed"
69
	mv "instarchive_all_${MY_ARCH}" "../${P}-${MY_ARCH}.tar.lzma" || die "move 'instarchive_all_${MY_ARCH}' failed"
70
 
71
	cd "${WORKDIR}" || die "cd '${WORKDIR}' failed"
72
 
73
	echo ">>> Unpacking ./${P}.tar.lzma to ${WORKDIR}"
74
	#Standard unpack fails due to poor quality of archive
75
	xz -F lzma -d -c "./${P}.tar.lzma" 2>/dev/null | tar xf - || die "unpacking '${P}.tar.lzma' failed"
76
	rm "./${P}.tar.lzma"
77
 
78
	unpack "./${P}-${MY_ARCH}.tar.lzma" || die "unpack '${P}-${MY_ARCH}.tar.lzma' failed"
79
	rm "./${P}-${MY_ARCH}.tar.lzma"
80
}
81
 
82
src_prepare() {
83
	# libfltk.so.1.1 is needed because it's no longer in portage
84
	mv "${WORKDIR}"/Amnesia/libs*/all/libfltk* "${WORKDIR}"/Amnesia/libs*/ || die "libfltk extraction failed"
85
 
86
	#reset ${S} for outprocessing
87
	rm -rf "${S}"
88
	mv "${WORKDIR}/Amnesia" "${S}" || die "mv 'Amnesia' failed"
89
	cd ${S}
90
 
91
	# Files to remove.
92
	REMOVE="libs*/*
93
		*.pdf
94
		*.rtf
95
		*.sh"
96
 
97
	# Files to keep.
98
	# Bundled LibIL (media-libs/devil) isn't in portage as too old
99
	KEEP="libs*/libIL*
100
		libs*/libfltk*"
101
 
102
	# Collect infos about languages...
103
	LINGUAS_ARRAY=()		# Linguas - string: E.g.: "linguas_en"
104
	LANG_ARRAY=()			# Lang - string: E.g.: "en"
105
	LANGUAGE_ARRAY=()		# Language - string: E.g.: "english"
106
	LANGUAGE_SHORT_ARRAY=()		# Language Short - string: E.g.: "eng"
107
	USE_ARRAY=()			# Used - bool (0,1)
108
 
109
	local linguas_in_use="0"
110
	for use in ${IUSE}
111
	do
112
		if [[ "${use%%_*}" == "linguas" ]]
113
		then
114
			local tmp="${use}"
115
			LINGUAS_ARRAY=(${LINGUAS_ARRAY[@]} "${tmp}")
116
 
117
			tmp="${tmp##linguas_}"
118
			LANG_ARRAY=(${LANG_ARRAY[@]} "${tmp}")
119
 
120
			case "${tmp}" in
121
				"de") tmp="german";;
122
				"es") tmp="spanish";;
123
				"fr") tmp="french";;
124
				"it") tmp="italian";;
125
				"ru") tmp="russian";;
126
				*) tmp="";;
127
			esac
128
			LANGUAGE_ARRAY=(${LANGUAGE_ARRAY[@]} "${tmp}")
129
			LANGUAGE_SHORT_ARRAY=(${LANGUAGE_SHORT_ARRAY[@]} "${tmp:0:3}")
130
 
131
			if use ${use}
132
			then
133
				USE_ARRAY=(${USE_ARRAY[@]} "1")
134
				linguas_in_use="$(( ${linguas_in_use} + 1 ))"
135
			else
136
				USE_ARRAY=(${USE_ARRAY[@]} "0")
137
			fi
138
		fi
139
	done
140
 
141
	# ...then process them.
142
	local n="0"
143
	local docs_eng="0"
144
	while [[ "${n}" -lt "${#LINGUAS_ARRAY[@]}" ]]
145
	do
146
		if [[ "${USE_ARRAY[${n}]}" -gt "0" ]]
147
		then
148
			# If only one lang is selected, use it as default.
149
			if [[ "${linguas_in_use}" == "1" ]]
150
			then
151
				sed -e "s#english.lang#${LANGUAGE_ARRAY[${n}]}.lang#g" \
152
				    -i config/*main_init.cfg || die "sed \"config/*main_init.cfg\" failed"
153
			fi
154
		else
155
			REMOVE="${REMOVE} $(find config -type f -name "*${LANGUAGE_ARRAY[${n}]}.lang")"
156
			if [[ -d "lang/${LANGUAGE_SHORT_ARRAY[${n}]}" ]]
157
			then
158
				REMOVE="${REMOVE} lang/${LANGUAGE_SHORT_ARRAY[${n}]}"
159
			fi
160
		fi
161
 
162
		if use doc
163
		then
164
			if [[ -f "EULA_${LANG_ARRAY[${n}]}.rtf" && -f "Manual_${LANG_ARRAY[${n}]}.pdf" ]]
165
			then
166
				KEEP="${KEEP} EULA_${LANG_ARRAY[${n}]}.rtf Manual_${LANG_ARRAY[${n}]}.pdf"
167
			else
168
				local docs_eng="1"
169
			fi
170
		fi
171
 
172
		n="$(( ${n} + 1 ))"
173
	done
174
 
175
	if use doc && [[ ( "${linguas_in_use}" == "0" || "${docs_eng}" != "0" ) ]]
176
	then
177
		KEEP="${KEEP} EULA_en.rtf Manual_en.pdf Remember*.pdf"
178
	fi
179
 
180
	einfo " Removing useless files ..."
181
	for remove in ${REMOVE}
182
	do
183
		local removable="1"
184
		for keep in ${KEEP}
185
		do
186
			if [[ "${remove}" == "${keep}" && "${removable}" == "1" ]]
187
			then
188
				local removable="0"
189
			fi
190
		done
191
 
192
		if [[ "${removable}" == "1" ]]
193
		then
194
			rm -r "${S}/"${remove} &> /dev/null
195
		fi
196
	done
197
 
198
	if use amd64
199
	then
200
		mv "Amnesia.bin64" "Amnesia.bin" || die "mv \"Amnesia.bin64\" failed"
201
		mv "Launcher.bin64" "Launcher.bin" || die "mv \"Launcher.bin64\" failed"
202
	fi
203
}
204
 
205
src_install() {
206
	# Install data
207
	insinto "${GAMEDIR}"
208
 
209
	einfo " Installing game data files ..."
210
	for directory in $(find * -maxdepth 0 -type d ! -name "libs*")
211
	do
212
		doins -r ${directory} || die "doins game data files failed"
213
	done
214
 
215
	# Other files
216
	find . -maxdepth 1 -type f ! -name "*.bin" \
217
				   ! -name "*.pdf" \
218
				   ! -name "*.png" \
219
				   ! -name "*.rtf" \
220
				   ! -name "*.sh" \
221
				   -exec doins '{}' \; || die "doins other files failed"
222
 
223
 
224
	# Install libraries and executables
225
	einfo " Installing libraries and executables ..."
226
 
227
	if use amd64
228
	then
229
		local libsdir="${GAMEDIR}/libs64"
230
	else
231
		local libsdir="${GAMEDIR}/libs"
232
	fi
233
 
234
	exeinto "${libsdir}"
235
	doexe libs*/* || die "doexe \"libs\" failed"
236
	dosym "/usr/$(get_libdir)/libGLEW.so" "${libsdir}/libGLEW.so.1.5"
237
 
238
	exeinto "${GAMEDIR}"
239
	doexe *.bin || die "doexe \".bin\" binaries failed"
240
 
241
	# Make game wrapper
242
	local wrapper="${S}/${PN}"
243
	local ext="${PN}-justine"
244
 
245
	cat << EOF > "${wrapper}" || die "echo failed"
246
#!/bin/sh
161 kardasa 247
cd "${GAMEDIR}"
157 kardasa 248
if [[ "\$(basename "\${0}")" == "${ext}" ]]
249
then
250
	params="ptest \${@}"
251
fi
252
 
253
if [[ -w "\${HOME}/.frictionalgames/Amnesia/Main/main_settings.cfg" ]]
254
then
255
	exec ./Amnesia.bin \${params:-"\${@}"}
256
else
257
	exec ./Launcher.bin "\${@}"
258
fi
259
EOF
260
 
261
	# Install wrapper
262
	dogamesbin "${wrapper}" || die "dogamesbin ${wrapper} failed"
263
	dosym "${PN}" "${GAMES_BINDIR}/${ext}"
264
 
265
	# Install icon and desktop file
266
	newicon "Amnesia.png" "${PN}.png" || die "newicon failed"
267
	make_desktop_entry "${PN}" "Amnesia: The Dark Descent" "/usr/share/pixmaps/${PN}.png" || die "make_desktop_entry failed"
268
	make_desktop_entry "${ext}" "Amnesia: The Dark Descent - Justine" "/usr/share/pixmaps/${PN}.png" || die "make_desktop_entry failed"
269
 
270
	# Install documentation
271
	if use doc
272
	then
273
		dodoc *.rtf *.pdf || die "dodoc failed"
274
	fi
275
 
276
	# Setting permissions.
277
	einfo " Setting permissions ..."
278
	prepgamesdirs
279
}
280
 
281
pkg_postinst() {
282
	ewarn ""
283
	ewarn "Amnesia: The Dark Descent needs video drivers that provide a complete".
284
	ewarn "GLSL 1.20 implementation.  For more information, please visit:"
285
	ewarn "http://www.frictionalgames.com/forum/thread-3760.html"
286
	ewarn ""
287
	ewarn "--------------------------------------------------------------------"
288
	ewarn ""
289
	ewarn "Saved games from previous versions may not be fully compatible."
290
	ewarn ""
291
}