blob: 3440889a3f198fa6063893dce197e31b6129e2da [file] [log] [blame] [edit]
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/games-q3mod.eclass,v 1.36 2007/03/07 15:23:39 wolf31o2 Exp $
inherit games
EXPORT_FUNCTIONS src_install pkg_postinst
DESCRIPTION="Quake III - ${MOD_DESC}"
SLOT="0"
KEYWORDS="-* amd64 ~ppc x86"
IUSE="dedicated"
DEPEND="app-arch/unzip"
RDEPEND="|| ( games-fps/quake3 games-fps/quake3-bin )
amd64? ( app-emulation/emul-linux-x86-baselibs )
dedicated? ( app-misc/screen )"
S=${WORKDIR}
games-q3mod_src_install() {
[[ -z ${MOD_NAME} ]] && die "what is the name of this q3mod ?"
local bdir=${GAMES_PREFIX_OPT}/quake3
local mdir=${bdir}/${MOD_NAME}
MOD_BINS=${MOD_BINS:-${MOD_NAME}}
if [[ -d ${MOD_NAME} ]] ; then
dodir "${bdir}"
mv ${MOD_NAME} "${D}/${bdir}/"
fi
if [[ -d baseq3 ]] ; then
dodir "${bdir}"
mv baseq3 "${D}/${bdir}/"
fi
if [[ ! -z $(ls "${S}"/* 2> /dev/null) ]] ; then
dodir "${mdir}"
mv "${S}"/* "${D}/${mdir}/"
fi
if use dedicated; then
games-q3mod_make_q3ded_exec
newgamesbin "${T}"/q3${MOD_NAME}-ded.bin q3${MOD_BINS}-ded
fi
games-q3mod_make_quake3_exec
newgamesbin "${T}"/quake3-${MOD_NAME}.bin quake3-${MOD_BINS}
if use dedicated; then
games-q3mod_make_init.d
newinitd "${T}"/q3${MOD_NAME}-ded.init.d q3${MOD_BINS}-ded
games-q3mod_make_conf.d
newconfd "${T}"/q3${MOD_NAME}-ded.conf.d q3${MOD_BINS}-ded
fi
dodir "${GAMES_SYSCONFDIR}"/quake3
dodir "${bdir}"/q3a-homedir
dosym "${bdir}"/q3a-homedir "${GAMES_PREFIX}"/.q3a
keepdir "${bdir}"/q3a-homedir
prepgamesdirs
chmod g+rw "${D}/${mdir}" "${D}/${bdir}"/q3a-homedir
chmod -R g+rw "${D}/${GAMES_SYSCONFDIR}"/quake3
}
games-q3mod_pkg_postinst() {
local samplecfg=${FILESDIR}/server.cfg
local realcfg=${GAMES_PREFIX_OPT}/quake3/${MOD_NAME}/server.cfg
if [[ -e ${samplecfg} ]] && [[ ! -e ${realcfg} ]] ; then
cp "${samplecfg}" "${realcfg}"
fi
einfo "To play this mod: quake3-${MOD_BINS}"
use dedicated && \
einfo "To launch a dedicated server: q3${MOD_BINS}-ded" && \
einfo "To launch server at startup: /etc/init.d/q3${MOD_NAME}-ded"
games_pkg_postinst
}
games-q3mod_make_q3ded_exec() {
cat << EOF > "${T}"/q3${MOD_NAME}-ded.bin
#!/bin/sh
exec "${GAMES_BINDIR}"/q3ded-bin +set fs_game ${MOD_NAME} +set dedicated 1 +exec server.cfg \${@}
EOF
}
games-q3mod_make_quake3_exec() {
cat << EOF > "${T}"/quake3-${MOD_NAME}.bin
#!/bin/sh
exec "${GAMES_BINDIR}"/quake3-bin +set fs_game ${MOD_NAME} \${@}
EOF
}
games-q3mod_make_init.d() {
cat << EOF > "${T}"/q3${MOD_NAME}-ded.init.d
#!/sbin/runscript
$(<"${PORTDIR}"/header.txt)
depend() {
need net
}
start() {
ebegin "Starting ${MOD_NAME} dedicated"
screen -A -m -d -S q3${MOD_BINS}-ded su - ${GAMES_USER_DED} -c "${GAMES_BINDIR}/q3${MOD_BINS}-ded \${${MOD_NAME}_OPTS}"
eend \$?
}
stop() {
ebegin "Stopping ${MOD_NAME} dedicated"
local pid=\`screen -list | grep q3${MOD_BINS}-ded | awk -F . '{print \$1}' | sed -e s/.//\`
if [[ -z "\${pid}" ]] ; then
eend 1 "Lost screen session"
else
pid=\`pstree -p \${pid} | sed -e 's:^.*q3ded::'\`
pid=\${pid:1:\${#pid}-2}
if [[ -z "\${pid}" ]] ; then
eend 1 "Lost q3ded session"
else
kill \${pid}
eend \$? "Could not kill q3ded"
fi
fi
}
status() {
screen -list | grep q3${MOD_BINS}-ded
}
EOF
}
games-q3mod_make_conf.d() {
if [[ -e ${FILESDIR}/${MOD_NAME}.conf.d ]] ; then
cp "${FILESDIR}"/${MOD_NAME}.conf.d "${T}"/q3${MOD_NAME}-ded.conf.d
return 0
fi
cat << EOF > "${T}"/q3${MOD_NAME}-ded.conf.d
$(<"${PORTDIR}"/header.txt)
# Any extra options you want to pass to the dedicated server
${MOD_NAME}_OPTS="+set vm_game 0 +set sv_pure 1 +set bot_enable 0 +set com_hunkmegs 64 +set net_port 27960"
EOF
}