# Copyright 1999-2003 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/eclass/games.eclass,v 1.58 2004/01/08 14:31:05 vapier Exp $ # # devlist: {vapier,wolf31o2,msterret}@gentoo.org # # This is the games ebuild for standardizing the install of games ... # you better have a *good* reason why you're *not* using games.eclass # in an ebuild in app-games inherit eutils ECLASS=games INHERITED="$INHERITED $ECLASS" EXPORT_FUNCTIONS pkg_postinst src_compile pkg_setup DESCRIPTION="Based on the ${ECLASS} eclass" IUSE="dedicated" export GAMES_PREFIX="/usr/games" export GAMES_PREFIX_OPT="/opt" export GAMES_DATADIR="/usr/share/games" export GAMES_DATADIR_BASE="/usr/share" # some packages auto append 'games' export GAMES_SYSCONFDIR="/etc/games" export GAMES_STATEDIR="/var/games" export GAMES_LOGDIR="/var/log/games" export GAMES_LIBDIR="/usr/games/lib" export GAMES_BINDIR="/usr/games/bin" export GAMES_ENVD="90games" # if you want to use a different user/group than games.games, # just add these two variables to your environment (aka /etc/profile) export GAMES_USER="${GAMES_USER:-games}" export GAMES_USER_DED="${GAMES_USER_DED:-games-ded}" export GAMES_GROUP="${GAMES_GROUP:-games}" egamesconf() { if [ -x ./configure ] ; then ./configure \ --prefix=${GAMES_PREFIX} \ --host=${CHOST} \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ --datadir=${GAMES_DATADIR} \ --sysconfdir=${GAMES_SYSCONFDIR} \ --localstatedir=${GAMES_STATEDIR} \ "$@" || die "egamesconf failed" else die "no configure script found" fi } egamesinstall() { if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then make prefix=${D}${GAMES_PREFIX} \ mandir=${D}/usr/share/man \ infodir=${D}/usr/share/info \ datadir=${D}${GAMES_DATADIR} \ sysconfdir=${D}${GAMES_SYSCONFDIR} \ localstatedir=${D}${GAMES_STATEDIR} \ "$@" install || die "einstall failed" else die "no Makefile found" fi } gameswrapper() { local oldtree=${DESTTREE} into ${GAMES_PREFIX} local cmd=$1; shift ${cmd} "$@" local ret=$? into ${oldtree} return ${ret} } dogamesbin() { gameswrapper ${FUNCNAME/games} "$@"; } dogamessbin() { gameswrapper ${FUNCNAME/games} "$@"; } dogameslib() { gameswrapper ${FUNCNAME/games} "$@"; } dogameslib.a() { gameswrapper ${FUNCNAME/games} "$@"; } dogameslib.so() { gameswrapper ${FUNCNAME/games} "$@"; } newgamesbin() { gameswrapper ${FUNCNAME/games} "$@"; } newgamessbin() { gameswrapper ${FUNCNAME/games} "$@"; } gamesowners() { chown ${GAMES_USER}:${GAMES_GROUP} "$@"; } gamesperms() { chmod u+rw,g+r-w,o-rwx "$@"; } prepgamesdirs() { local dir="" for dir in ${GAMES_PREFIX} ${GAMES_PREFIX_OPT} ${GAMES_DATADIR} ${GAMES_SYSCONFDIR} \ ${GAMES_STATEDIR} ${GAMES_LIBDIR} ${GAMES_BINDIR} "$@" ; do ( gamesowners -R ${D}/${dir} find ${D}/${dir} -type d -print0 | xargs --null chmod 750 find ${D}/${dir} -type f -print0 | xargs --null chmod o-rwx,g+r ) >& /dev/null done local f="" for f in `find ${D}/${GAMES_STATEDIR} -type f -printf '%P ' 2>/dev/null` ; do if [ -e "${ROOT}/${GAMES_STATEDIR}/${f}" ] ; then cp -p "${ROOT}/${GAMES_STATEDIR}/${f}" "${D}/${GAMES_STATEDIR}/${f}" touch "${D}/${GAMES_STATEDIR}/${f}" fi done chmod 750 ${D}/${GAMES_BINDIR}/* >& /dev/null } gamesenv() { cat << EOF > /etc/env.d/${GAMES_ENVD} LDPATH="${GAMES_LIBDIR}" PATH="${GAMES_BINDIR}" EOF } games_pkg_setup() { enewgroup ${GAMES_GROUP} 35 enewuser ${GAMES_USER} 35 /bin/false /usr/games ${GAMES_GROUP} enewuser ${GAMES_USER_DED} 36 /bin/bash /usr/games ${GAMES_GROUP} } games_src_compile() { [ -x ./configure ] && { egamesconf || die "egamesconf failed"; } [ -e [Mm]akefile ] && { emake || die "emake failed"; } } # pkg_postinst function ... create env.d entry and warn about games group games_pkg_postinst() { gamesenv ewarn "Remember, in order to play games, you have to" ewarn "be in the '${GAMES_GROUP}' group." echo einfo "See the usermod(8) manpage for more information." echo } # some games require cdrom's to install datafiles ... # $1: directory or file to check for on cdrom # after function call, cdrom should be in ${GAMES_CD} games_get_cd() { export GAMES_CD=${GAMES_CDROM} if [ -z "${GAMES_CD}" ] ; then local dir="$(dirname $1)" local file="$(basename $1)" local mline="" for mline in `mount | egrep -e '(iso|cdrom)' | awk '{print $3}'` ; do [ -d "${mline}/${dir}" ] || continue find ${mline}/${dir} -iname ${file} -maxdepth 1 -printf '' && GAMES_CD=${mline} done fi [ ! -z "${GAMES_CD}" ] && einfo "Using ${GAMES_CD} as the data source" } # Pass a description of the cd to the function games_verify_cd() { if [ -z "${GAMES_CD}" ] ; then echo eerror "You must mount the $* CD first!" echo ewarn "If you do not have the CD, but have the data files" ewarn "mounted somewhere on your filesystem, just export" ewarn "the variable GAMES_CDROM so that it points to the" ewarn "directory containing the files." echo die "You must provide the $* data before running the install" fi } # Unpack .uz(2) files for UT/UT2003 # $1: directory or file to unpack games_ut_unpack() { local ut_unpack="$1" export UT_DATA_PATH="${Ddir}/System" cd "${UT_DATA_PATH}" LD_LIBRARY_PATH=.:${UT2003_DATA_PATH}:${LD_LIBRARY_PATH} if [ -z "${ut_unpack}" ]; then die "You must provide an argument to games_ut_unpack" fi if [ -f "${ut_unpack}" ]; then ./ucc-bin decompress ${ut_unpack} --nohomedir || die "uncompressing file ${ut_unpack}" fi if [ -d "${ut_unpack}" ]; then for f in `find ${ut_unpack} -name '*.uz*' -printf '%f '` ; do ./ucc-bin decompress ${ut_unpack}/${f} --nohomedir || die "uncompressing file ${f}" #mv System/${f:0:${#f}-3} ${ut_unpack} || die "moving file ${f} rm ${ut_unpack}/${f} || die "deleting compressed file ${f}" done #for f in `find ${ut_unpack} -name '*.uz' -printf '%f '` ; do # ./ucc-bin decompress ${ut_unpack}/${f} --nohomedir || die "uncompressing file ${f}" # mv System/${f:0:${#f}-4} ${ut_unpack} || die "moving file ${f}" # rm ${ut_unpack}/${f} || die "deleting compressed file ${f}" #done fi } # make a wrapper script ... games_make_wrapper() { local wrapper=$1 ; shift local bin=$1 ; shift local chdir=$1 ; shift local tmpwrapper="`mymktemp ${T}`" cat << EOF > ${tmpwrapper} #!/bin/sh cd "${chdir}" exec ${bin} "\$@" EOF newgamesbin ${tmpwrapper} ${wrapper} }