summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorJulian Ospald <hasufell@gentoo.org>2014-11-21 21:47:16 +0000
committerJulian Ospald <hasufell@gentoo.org>2014-11-21 21:47:16 +0000
commit7f147e5e25edcd7edd537dd68b1dc1a261f144db (patch)
tree42dbbabb83d4ed9843e961357e4fa7e1974ed35f /eclass
parentAutomated update. (diff)
downloadgentoo-2-7f147e5e25edcd7edd537dd68b1dc1a261f144db.tar.gz
gentoo-2-7f147e5e25edcd7edd537dd68b1dc1a261f144db.tar.bz2
gentoo-2-7f147e5e25edcd7edd537dd68b1dc1a261f144db.zip
add documentation for games.eclass, rm unnecessary exports
Diffstat (limited to 'eclass')
-rw-r--r--eclass/ChangeLog5
-rw-r--r--eclass/games.eclass212
2 files changed, 191 insertions, 26 deletions
diff --git a/eclass/ChangeLog b/eclass/ChangeLog
index edc3b0cdc351..239d94c23734 100644
--- a/eclass/ChangeLog
+++ b/eclass/ChangeLog
@@ -1,6 +1,9 @@
# ChangeLog for eclass directory
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.1436 2014/11/21 01:55:45 floppym Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.1437 2014/11/21 21:47:16 hasufell Exp $
+
+ 21 Nov 2014; Julian Ospald <hasufell@gentoo.org> games.eclass:
+ add documentation for games.eclass, rm unnecessary exports
21 Nov 2014; Mike Gilbert <floppym@gentoo.org> -twisted.eclass:
Remove unused eclass.
diff --git a/eclass/games.eclass b/eclass/games.eclass
index 28f2ba3cdd47..0b4ded7d8295 100644
--- a/eclass/games.eclass
+++ b/eclass/games.eclass
@@ -1,12 +1,25 @@
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/games.eclass,v 1.158 2014/07/11 08:21:58 ulm Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/games.eclass,v 1.159 2014/11/21 21:47:16 hasufell Exp $
-# devlist: games@gentoo.org
+# @ECLASS: games
+# @MAINTAINER:
+# Games team <games@gentoo.org>
+# @BLURB: Standardizing the install of games.
+# @DESCRIPTION:
+# This eclass makes sure that games are consistently handled in gentoo.
+# It installs game files by default in FHS-compatible directories
+# like /usr/share/games and sets more restrictive permissions in order
+# to avoid some security bugs.
#
-# This is the games eclass for standardizing the install of games ...
-# you better have a *good* reason why you're *not* using games.eclass
-# in a games-* ebuild
+# The installation directories as well as the user and group files are
+# installed as can be controlled by the user. See the variables like
+# GAMES_BINDIR, GAMES_USER etc. below. These are NOT supposed to be set
+# by ebuilds!
+#
+# For a general guide on writing games ebuilds, see:
+# https://wiki.gentoo.org/wiki/Project:Games/Ebuild_howto
+
if [[ -z ${_GAMES_ECLASS} ]]; then
_GAMES_ECLASS=1
@@ -24,25 +37,91 @@ if [[ ${CATEGORY}/${PN} != "games-misc/games-envd" ]] ; then
RDEPEND="games-misc/games-envd"
fi
-export GAMES_PREFIX=${GAMES_PREFIX:-/usr/games}
-export GAMES_PREFIX_OPT=${GAMES_PREFIX_OPT:-/opt}
-export GAMES_DATADIR=${GAMES_DATADIR:-/usr/share/games}
-export GAMES_DATADIR_BASE=${GAMES_DATADIR_BASE:-/usr/share} # some packages auto append 'games'
-export GAMES_SYSCONFDIR=${GAMES_SYSCONFDIR:-/etc/games}
-export GAMES_STATEDIR=${GAMES_STATEDIR:-/var/games}
-export GAMES_LOGDIR=${GAMES_LOGDIR:-/var/log/games}
-export GAMES_BINDIR=${GAMES_BINDIR:-${GAMES_PREFIX}/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:-root}
-export GAMES_USER_DED=${GAMES_USER_DED:-games}
-export GAMES_GROUP=${GAMES_GROUP:-games}
+# @ECLASS-VARIABLE: GAMES_PREFIX
+# @DESCRIPTION:
+# Prefix where to install games, mostly used by GAMES_BINDIR. Games data should
+# still go into GAMES_DATADIR. May be set by the user.
+GAMES_PREFIX=${GAMES_PREFIX:-/usr/games}
+
+# @ECLASS-VARIABLE: GAMES_PREFIX_OPT
+# @DESCRIPTION:
+# Prefix where to install precompiled/blob games, usually followed by
+# package name. May be set by the user.
+GAMES_PREFIX_OPT=${GAMES_PREFIX_OPT:-/opt}
+
+# @ECLASS-VARIABLE: GAMES_DATADIR
+# @DESCRIPTION:
+# Base directory where to install game data files, usually followed by
+# package name. May be set by the user.
+GAMES_DATADIR=${GAMES_DATADIR:-/usr/share/games}
+
+# @ECLASS-VARIABLE: GAMES_DATADIR_BASE
+# @DESCRIPTION:
+# Similar to GAMES_DATADIR, but only used when a package auto appends 'games'
+# to the path. May be set by the user.
+GAMES_DATADIR_BASE=${GAMES_DATADIR_BASE:-/usr/share}
+
+# @ECLASS-VARIABLE: GAMES_SYSCONFDIR
+# @DESCRIPTION:
+# Where to install global games configuration files, usually followed by
+# package name. May be set by the user.
+GAMES_SYSCONFDIR=${GAMES_SYSCONFDIR:-/etc/games}
+
+# @ECLASS-VARIABLE: GAMES_STATEDIR
+# @DESCRIPTION:
+# Where to install/store global variable game data, usually followed by
+# package name. May be set by the user.
+GAMES_STATEDIR=${GAMES_STATEDIR:-/var/games}
+
+# @ECLASS-VARIABLE: GAMES_LOGDIR
+# @DESCRIPTION:
+# Where to store global game log files, usually followed by
+# package name. May be set by the user.
+GAMES_LOGDIR=${GAMES_LOGDIR:-/var/log/games}
+
+# @ECLASS-VARIABLE: GAMES_BINDIR
+# @DESCRIPTION:
+# Where to install the game binaries. May be set by the user. This is in PATH.
+GAMES_BINDIR=${GAMES_BINDIR:-${GAMES_PREFIX}/bin}
+
+# @ECLASS-VARIABLE: GAMES_ENVD
+# @INTERNAL
+# @DESCRIPTION:
+# The games environment file name which sets games specific LDPATH and PATH.
+GAMES_ENVD="90games"
+
+# @ECLASS-VARIABLE: GAMES_USER
+# @DESCRIPTION:
+# The USER who owns all game files and usually has write permissions.
+# May be set by the user.
+GAMES_USER=${GAMES_USER:-root}
+# @ECLASS-VARIABLE: GAMES_USER_DED
+# @DESCRIPTION:
+# The USER who owns all game files related to the dedicated server part
+# of a package. May be set by the user.
+GAMES_USER_DED=${GAMES_USER_DED:-games}
+
+# @ECLASS-VARIABLE: GAMES_GROUP
+# @DESCRIPTION:
+# The GROUP that owns all game files and usually does not have
+# write permissions. May be set by the user.
+# If you want games world-executable, then you can at least set this variable
+# to 'users' which is almost the same.
+GAMES_GROUP=${GAMES_GROUP:-games}
+
+# @FUNCTION: games_get_libdir
+# @DESCRIPTION:
+# Gets the directory where to install games libraries. This is in LDPATH.
games_get_libdir() {
echo ${GAMES_PREFIX}/$(get_libdir)
}
+# @FUNCTION: egamesconf
+# @USAGE: [<args>...]
+# @DESCRIPTION:
+# Games equivalent to 'econf' for autotools based build systems. It passes
+# the necessary games specific directories automatically.
egamesconf() {
# handle verbose build log pre-EAPI5
local _gamesconf
@@ -67,6 +146,12 @@ egamesconf() {
"$@"
}
+# @FUNCTION: gameswrapper
+# @USAGE: <command> [<args>...]
+# @INTERNAL
+# @DESCRIPTION:
+# Wraps an install command like dobin, dolib etc, so that
+# it has GAMES_PREFIX as prefix.
gameswrapper() {
# dont want to pollute calling env
(
@@ -77,18 +162,75 @@ gameswrapper() {
)
}
+# @FUNCTION: dogamesbin
+# @USAGE: <path>...
+# @DESCRIPTION:
+# Install one or more games binaries.
dogamesbin() { gameswrapper ${FUNCNAME/games} "$@"; }
+
+# @FUNCTION: dogamessbin
+# @USAGE: <path>...
+# @DESCRIPTION:
+# Install one or more games system binaries.
dogamessbin() { gameswrapper ${FUNCNAME/games} "$@"; }
+
+# @FUNCTION: dogameslib
+# @USAGE: <path>...
+# @DESCRIPTION:
+# Install one or more games libraries.
dogameslib() { gameswrapper ${FUNCNAME/games} "$@"; }
+
+# @FUNCTION: dogameslib.a
+# @USAGE: <path>...
+# @DESCRIPTION:
+# Install one or more static games libraries.
dogameslib.a() { gameswrapper ${FUNCNAME/games} "$@"; }
+
+# @FUNCTION: dogameslib.so
+# @USAGE: <path>...
+# @DESCRIPTION:
+# Install one or more shared games libraries.
dogameslib.so() { gameswrapper ${FUNCNAME/games} "$@"; }
+
+# @FUNCTION: newgamesbin
+# @USAGE: <path> <newname>
+# @DESCRIPTION:
+# Install one games binary with a new name.
newgamesbin() { gameswrapper ${FUNCNAME/games} "$@"; }
+
+# @FUNCTION: newgamessbin
+# @USAGE: <path> <newname>
+# @DESCRIPTION:
+# Install one system games binary with a new name.
newgamessbin() { gameswrapper ${FUNCNAME/games} "$@"; }
+# @FUNCTION: games_make_wrapper
+# @USAGE: <wrapper> <target> [chdir] [libpaths] [installpath]
+# @DESCRIPTION:
+# Create a shell wrapper script named wrapper in installpath
+# (defaults to the games bindir) to execute target (default of wrapper) by
+# first optionally setting LD_LIBRARY_PATH to the colon-delimited
+# libpaths followed by optionally changing directory to chdir.
games_make_wrapper() { gameswrapper ${FUNCNAME/games_} "$@"; }
+# @FUNCTION: gamesowners
+# @USAGE: [<args excluding owner/group>...] <path>...
+# @DESCRIPTION:
+# Run 'chown' with the given args on the given files. Owner and
+# group are GAMES_USER and GAMES_GROUP and must not be passed
+# as args.
gamesowners() { chown ${GAMES_USER}:${GAMES_GROUP} "$@"; }
+
+# @FUNCTION: gamesperms
+# @USAGE: <path>...
+# @DESCRIPTION:
+# Run 'chmod' with games specific permissions on the given files.
gamesperms() { chmod u+rw,g+r-w,o-rwx "$@"; }
+
+# @FUNCTION: prepgamesdirs
+# @DESCRIPTION:
+# Fix all permissions/owners of files in games related directories,
+# usually called at the end of src_install().
prepgamesdirs() {
local dir f mode
for dir in \
@@ -129,6 +271,10 @@ prepgamesdirs() {
find "${D}/${GAMES_BINDIR}" -maxdepth 1 -type f -exec chmod 750 '{}' \;
}
+# @FUNCTION: games_pkg_setup
+# @DESCRIPTION:
+# Export some toolchain specific variables and create games related groups
+# and users. This function is exported as pkg_setup().
games_pkg_setup() {
tc-export CC CXX LD AR RANLIB
@@ -145,10 +291,17 @@ games_pkg_setup() {
&& usermod -s /bin/bash "${GAMES_USER_DED}"
}
+# @FUNCTION: games_src_configure
+# @DESCRIPTION:
+# Runs egamesconf if there is a configure file.
+# This function is exported as src_configure().
games_src_configure() {
[[ -x "${ECONF_SOURCE:-.}"/configure ]] && egamesconf
}
+# @FUNCTION: games_src_compile
+# @DESCRIPTION:
+# Runs base_src_make(). This function is exported as src_compile().
games_src_compile() {
case ${EAPI:-0} in
0|1) games_src_configure ;;
@@ -156,6 +309,9 @@ games_src_compile() {
base_src_make
}
+# @FUNCTION: games_pkg_preinst
+# @DESCRIPTION:
+# Synchronizes GAMES_STATEDIR of the ebuild image with the live filesystem.
games_pkg_preinst() {
local f
@@ -171,7 +327,9 @@ games_pkg_preinst() {
done < <(find "${D}/${GAMES_STATEDIR}" -type f -printf '%P\n' 2>/dev/null)
}
-# pkg_postinst function ... warn about games group
+# @FUNCTION: games_pkg_postinst
+# @DESCRIPTION:
+# Prints some warnings and infos, also related to games groups.
games_pkg_postinst() {
if [[ -z "${GAMES_SHOW_WARNING}" ]] ; then
ewarn "Remember, in order to play games, you have to"
@@ -189,8 +347,10 @@ games_pkg_postinst() {
fi
}
-# Unpack .uz2 files for UT2003/UT2004
-# $1: directory or file to unpack
+# @FUNCTION: games_ut_unpack
+# @USAGE: <directory or file to unpack>
+# @DESCRIPTION:
+# Unpack .uz2 files for UT2003/UT2004.
games_ut_unpack() {
local ut_unpack="$1"
local f=
@@ -211,9 +371,11 @@ games_ut_unpack() {
fi
}
-# Unpacks .umod/.ut2mod/.ut4mod files for UT/UT2003/UT2004
-# Usage: games_umod_unpack $1
-# oh, and don't forget to set 'dir' and 'Ddir'
+# @FUNCTION: games_umod_unpack
+# @USAGE: <file to unpack>
+# @DESCRIPTION:
+# Unpacks .umod/.ut2mod/.ut4mod files for UT/UT2003/UT2004.
+# Don't forget to set 'dir' and 'Ddir'.
games_umod_unpack() {
local umod=$1
mkdir -p "${Ddir}"/System