274 lines
5.9 KiB
Bash
274 lines
5.9 KiB
Bash
# Copyright 1999-2010 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
# $Header: $
|
|
|
|
EAPI="2"
|
|
|
|
inherit eutils games toolchain-funcs check-reqs git
|
|
|
|
MY_PN="${PN^}"
|
|
DESCRIPTION="Fork of Nexuiz, Deathmatch FPS based on DarkPlaces, an advanced Quake 1 engine"
|
|
HOMEPAGE="http://www.xonotic.org/"
|
|
BASE_URI="git://git.${PN}.org/${PN}/"
|
|
EGIT_REPO_URI="${BASE_URI}${PN}.git"
|
|
|
|
LICENSE="GPL-2"
|
|
SLOT="0"
|
|
KEYWORDS="~amd64 ~x86"
|
|
IUSE="alsa debug dedicated opengl sdl +zip"
|
|
|
|
UIRDEPEND="
|
|
media-libs/libogg
|
|
media-libs/libtheora
|
|
media-libs/libvorbis
|
|
media-libs/libmodplug
|
|
x11-libs/libX11
|
|
x11-libs/libXau
|
|
x11-libs/libXdmcp
|
|
x11-libs/libXext
|
|
x11-libs/libXxf86dga
|
|
x11-libs/libXxf86vm
|
|
virtual/opengl
|
|
media-libs/freetype:2
|
|
alsa? ( media-libs/alsa-lib )
|
|
sdl? ( media-libs/libsdl[X,audio,joystick,opengl,video,alsa?] )
|
|
"
|
|
UIDEPEND="
|
|
x11-proto/xextproto
|
|
x11-proto/xf86dgaproto
|
|
x11-proto/xf86vidmodeproto
|
|
x11-proto/xproto
|
|
"
|
|
RDEPEND="
|
|
sys-libs/zlib
|
|
media-libs/jpeg
|
|
media-libs/libpng
|
|
net-misc/curl
|
|
opengl? ( ${UIRDEPEND} )
|
|
!dedicated? ( !opengl? ( ${UIRDEPEND} ) )
|
|
"
|
|
DEPEND="${RDEPEND}
|
|
zip? ( app-arch/p7zip )
|
|
opengl? ( ${UIDEPEND} )
|
|
!dedicated? ( !opengl? ( ${UIDEPEND} ) )
|
|
"
|
|
|
|
pkg_setup() {
|
|
ewarn "You need 1,5 Gb diskspace for distfiles."
|
|
if use dedicated && use !opengl; then
|
|
CHECKREQS_DISK_BUILD="1500"
|
|
else
|
|
if use zip; then
|
|
CHECKREQS_DISK_BUILD="2650"
|
|
CHECKREQS_DISK_USR="910"
|
|
else
|
|
CHECKREQS_DISK_BUILD="4800"
|
|
CHECKREQS_DISK_USR="2400"
|
|
fi
|
|
fi
|
|
check_reqs
|
|
}
|
|
|
|
git_pk3_unpack() {
|
|
EGIT_REPO_URI="${BASE_URI}xonotic-${1}.pk3dir.git"
|
|
EGIT_PROJECT="${PN}-${1}.pk3dir"
|
|
S+="/data/${PN}-${1}.pk3dir"
|
|
git_fetch
|
|
S="${WORKDIR}/${P}"
|
|
}
|
|
|
|
src_unpack() {
|
|
# root
|
|
git_src_unpack
|
|
|
|
# Engine
|
|
EGIT_REPO_URI="${BASE_URI}darkplaces.git"
|
|
EGIT_PROJECT="darkplaces"
|
|
S+="/darkplaces"
|
|
# comment next line if you prefer unstable
|
|
EGIT_BRANCH="div0-stable" \
|
|
git_fetch
|
|
S="${WORKDIR}/${P}"
|
|
|
|
# QC compiler
|
|
EGIT_REPO_URI="git://github.com/Blub/qclib.git"
|
|
EGIT_PROJECT="qclib"
|
|
S+="/fteqcc"
|
|
git_fetch
|
|
S="${WORKDIR}/${P}"
|
|
|
|
# Data
|
|
git_pk3_unpack data
|
|
git_pk3_unpack maps
|
|
# needed only for client
|
|
if use opengl || use !dedicated; then
|
|
git_pk3_unpack music
|
|
git_pk3_unpack nexcompat
|
|
else
|
|
rm -rf "${S}/data/font-dejavu.pk3dir" || die "rm failed"
|
|
fi
|
|
}
|
|
|
|
src_prepare() {
|
|
# for darkplaces and fteqcc
|
|
tc-export CC
|
|
|
|
# Engine
|
|
pushd darkplaces
|
|
sed -i \
|
|
-e "/^EXE_/s:darkplaces:${PN}:" \
|
|
-e "s:-O3:${CFLAGS}:" \
|
|
-e "/-lm/s:$: ${LDFLAGS}:" \
|
|
-e '/^STRIP/s/strip/true/' \
|
|
makefile.inc || die "sed failed"
|
|
|
|
if use !alsa; then
|
|
sed -e "/DEFAULT_SNDAPI/s:ALSA:OSS:" \
|
|
-i makefile || die "sed failed"
|
|
fi
|
|
|
|
# rebranding, suddenly it works fine
|
|
for i in nexuiz.*; do
|
|
mv -v "${i}" "${i/nexuiz/${PN}}" || die "mv failed"
|
|
done
|
|
sed -i \
|
|
-e "s/nexuiz/${PN}/g" \
|
|
-e "s/Nexuiz/${PN^}/g" \
|
|
-e "s/NEXUIZ/${PN^^}/g" \
|
|
$(find -type f ! -name '*makefile*') || die "sed failed"
|
|
popd
|
|
|
|
# QC compiler
|
|
pushd fteqcc
|
|
sed -i \
|
|
-e '/^CC/d' \
|
|
-e "s: -O3 : :g" \
|
|
-e "s: -s : :g" \
|
|
-e 's/-o fteqcc.bin/$(LDFLAGS) -o fteqcc.bin/' \
|
|
Makefile || die "sed failed"
|
|
popd
|
|
|
|
# Data
|
|
if use dedicated && use !opengl; then
|
|
pushd data
|
|
rm -rf \
|
|
xonotic-data.pk3dir/gfx \
|
|
xonotic-data.pk3dir/particles \
|
|
xonotic-data.pk3dir/sound/cyberparcour01/rocket.txt \
|
|
xonotic-data.pk3dir/textures \
|
|
xonotic-maps.pk3dir/textures \
|
|
|| die "rm failed"
|
|
rm -f \
|
|
$(find -type f -name '*.jpg') \
|
|
$(find -type f -name '*.png' ! -name 'sky??.png') \
|
|
$(find -type f -name '*.svg') \
|
|
$(find -type f -name '*.tga') \
|
|
$(find -type f -name '*.wav') \
|
|
$(find -type f -name '*.ogg') \
|
|
$(find -type f -name '*.ase') \
|
|
$(find -type f -name '*.map') \
|
|
$(find -type f -name '*.zym') \
|
|
$(find -type f -name '*.obj') \
|
|
$(find -type f -name '*.blend') \
|
|
|| die "rm failed"
|
|
find -type d \
|
|
-exec rmdir '{}' &>/dev/null \;
|
|
sed -i \
|
|
-e '/^qc-recursive:/s/menu.dat//' \
|
|
xonotic-data.pk3dir/Makefile || die "sed failed"
|
|
popd
|
|
fi
|
|
}
|
|
|
|
src_compile() {
|
|
# Engine
|
|
pushd darkplaces
|
|
if use debug; then
|
|
ENGINEOPTS="debug"
|
|
else
|
|
ENGINEOPTS="release"
|
|
fi
|
|
ENGINEOPTS+=" DP_LINK_TO_LIBJPEG=1 DP_FS_BASEDIR=${GAMES_DATADIR}/${PN}"
|
|
|
|
if use opengl || ! use dedicated; then
|
|
emake cl-${ENGINEOPTS} || die "emake cl-${ENGINEOPTS} failed"
|
|
if use sdl; then
|
|
emake sdl-${ENGINEOPTS} || die "emake sdl-${ENGINEOPTS} failed"
|
|
fi
|
|
fi
|
|
|
|
if use dedicated; then
|
|
emake sv-${ENGINEOPTS} || die "emake sv-${ENGINEOPTS} failed"
|
|
fi
|
|
popd
|
|
|
|
# QC compiler
|
|
pushd fteqcc
|
|
emake BASE_CFLAGS="${CFLAGS} -Wall" || die "emake fteqcc failed"
|
|
popd
|
|
|
|
# Data
|
|
pushd data/xonotic-data.pk3dir
|
|
emake \
|
|
FTEQCC="${S}/fteqcc/fteqcc.bin" \
|
|
FTEQCCFLAGS_WATERMARK='' \
|
|
|| die "emake data.pk3 failed"
|
|
popd
|
|
}
|
|
|
|
src_install() {
|
|
# Engine & docs
|
|
pushd darkplaces
|
|
if use opengl || use !dedicated; then
|
|
dogamesbin ${PN}-glx || die "dogamesbin glx failed"
|
|
newicon ../misc/logos/${PN}_icon.svg ${PN}.svg
|
|
make_desktop_entry ${PN}-glx "${MY_PN} (GLX)"
|
|
|
|
if use sdl; then
|
|
dogamesbin ${PN}-sdl || die "dogamesbin sdl failed"
|
|
make_desktop_entry ${PN}-sdl "${MY_PN} (SDL)"
|
|
dosym ${PN}-sdl "${GAMES_BINDIR}"/${PN}
|
|
else
|
|
dosym ${PN}-glx "${GAMES_BINDIR}"/${PN}
|
|
fi
|
|
fi
|
|
|
|
if use dedicated; then
|
|
dogamesbin ${PN}-dedicated || die "dogamesbin dedicated failed"
|
|
fi
|
|
popd
|
|
|
|
dodoc Docs/*.txt
|
|
dohtml -r readme.html Docs
|
|
|
|
insinto "${GAMES_DATADIR}/${PN}"
|
|
|
|
if use dedicated; then
|
|
doins -r server || die "doins server failed"
|
|
fi
|
|
|
|
# Data
|
|
cd data
|
|
rm -rf \
|
|
$(find -name '.git*') \
|
|
$(find -type d -name '.svn') \
|
|
$(find -type d -name 'qcsrc') \
|
|
$(find -type f -name '*.sh') \
|
|
$(find -type f -name '*.pl') \
|
|
$(find -type f -name 'Makefile') \
|
|
|| die "rm failed"
|
|
if use zip; then
|
|
for d in *.pk3dir; do
|
|
pushd "${d}"
|
|
a="${d#xonotic-}"
|
|
7za a -tzip -mx=9 "../${a%dir}" . || die "zip failed"
|
|
popd
|
|
rm -rf "${d}" || die "rm failed"
|
|
done
|
|
fi
|
|
insinto "${GAMES_DATADIR}/${PN}/data"
|
|
doins -r . || die "doins data failed"
|
|
|
|
prepgamesdirs
|
|
}
|