summaryrefslogtreecommitdiff
blob: 052af9137a45b03cf162220fb16653bc6fb0fa15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit desktop eutils

CTF_V="1.06"
ROGUE_V="2.06"
XATRIX_V="2.07"

DESCRIPTION="Quake 2 engine focused on single player"
HOMEPAGE="https://www.yamagi.org/quake2/"
SRC_URI="https://deponie.yamagi.org/quake2/quake2-${PV}.tar.xz
	ctf? ( https://deponie.yamagi.org/quake2/quake2-ctf-${CTF_V}.tar.xz )
	rogue? ( https://deponie.yamagi.org/quake2/quake2-rogue-${ROGUE_V}.tar.xz )
	xatrix? ( https://deponie.yamagi.org/quake2/quake2-xatrix-${XATRIX_V}.tar.xz )"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="+client ctf dedicated openal +opengl rogue softrender xatrix"
REQUIRED_USE="
	|| ( client dedicated )
	client? ( || ( opengl softrender ) )
"

COMMON_DEPEND="
	client? (
		media-libs/libsdl2[video]
		!openal? ( media-libs/libsdl2[sound] )
		opengl? (
			media-libs/libsdl2[opengl]
			virtual/opengl
		)
	)
"
RDEPEND="${COMMON_DEPEND}
	client? ( openal? ( media-libs/openal ) )
"
DEPEND="${COMMON_DEPEND}"

S="${WORKDIR}/quake2-${PV}"

PATCHES=(
	"${FILESDIR}"/${PN}-respect-flags.patch
	"${FILESDIR}"/${PN}-7.42-fno-common.patch
)
DOCS=( CHANGELOG README.md doc/. )

mymake() {
	emake \
		VERBOSE=1 \
		WITH_SYSTEMWIDE=yes \
		WITH_SYSTEMDIR="${EPREFIX}"/usr/share/games/quake2 \
		WITH_OPENAL=$(usex openal) \
		"$@"
}

src_prepare() {
	local addon
	for addon in ctf rogue xatrix; do
		use ${addon} || continue

		pushd "${WORKDIR}"/quake2-${addon}-* >/dev/null || die
		if [[ ${addon} = ctf ]]; then
			eapply -l -- "${FILESDIR}"/${PN}-addon-respect-flags-r2.patch
		else
			eapply -l -- "${FILESDIR}"/${PN}-addon-respect-flags-r3.patch
		fi
		popd >/dev/null || die
	done

	default
}

src_compile() {
	local targets=( game )
	if use client; then
		targets+=( client )
		use opengl && targets+=( ref_gl1 ref_gl3 )
		use softrender && targets+=( ref_soft )
	fi
	use dedicated && targets+=( server )

	mymake config
	mymake "${targets[@]}"

	local addon
	for addon in ctf rogue xatrix; do
		use ${addon} || continue
		emake -C "${WORKDIR}"/quake2-${addon}-* VERBOSE=1
	done
}

src_install() {
	insinto /usr/lib/yamagi-quake2
	# Yamagi Quake II expects all binaries to be in the same directory
	# See stuff/packaging.md for more info
	exeinto /usr/lib/yamagi-quake2
	doins -r release/.

	if use client; then
		doexe release/quake2
		dosym ../lib/yamagi-quake2/quake2 /usr/bin/yquake2

		newicon stuff/icon/Quake2.svg "yamagi-quake2.svg"
		make_desktop_entry "yquake2" "Yamagi Quake II"
	fi

	if use dedicated; then
		doexe release/q2ded
		dosym ../lib/yamagi-quake2/q2ded /usr/bin/yq2ded
	fi

	insinto /usr/lib/yamagi-quake2/baseq2
	doins stuff/yq2.cfg

	local addon
	for addon in ctf rogue xatrix; do
		use ${addon} || continue

		insinto /usr/lib/yamagi-quake2/${addon}
		doins "${WORKDIR}"/quake2-${addon}-*/release/game.so

		if use client; then
			local addon_name
			case ${addon} in
				ctf)    addon_name="CTF" ;;
				rogue)  addon_name="Ground Zero" ;;
				xatrix) addon_name="The Reckoning" ;;
			esac

			make_wrapper "yquake2-${addon}" "yquake2 +set game ${addon}"
			make_desktop_entry "yquake2-${addon}" "Yamagi Quake II: ${addon_name}"
		fi
	done

	einstalldocs
	if use client; then
		docinto examples
		dodoc stuff/cdripper.sh
	fi
}

pkg_postinst() {
	if [[ -z ${REPLACING_VERSIONS} ]]; then
		elog
		elog "In order to play, you must at least install:"
		elog "games-fps/quake2-data or games-fps/quake2-demodata or copy game"
		elog "data files to ~/.yq2/ or ${EPREFIX}/usr/share/games/quake2/ manually."
		elog "Read ${EPREFIX}/usr/share/doc/${PF}/README.md* for more information."
		elog
	fi
}