# Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=5 inherit eutils flag-o-matic toolchain-funcs versionator games MY_PN="hexen2" MY_PV=$(replace_version_separator 3 '-') DATA_PV="1.28" DEMO_PV="1.11" HW_PV="0.15" LIT_PV="20140628" DESCRIPTION="Hexen II source port - Hammer of Thyrion" HOMEPAGE="http://uhexen2.sourceforge.net/" SRC_URI="mirror://sourceforge/${PN}/${MY_PN}source-${MY_PV}.tgz mirror://sourceforge/${PN}/gamedata-all-${DATA_PV}.tgz demo? ( mirror://sourceforge/${PN}/${MY_PN}demo-pakfiles-${DEMO_PV}.tgz ) hexenworld? ( mirror://sourceforge/${PN}/hexenworld-pakfiles-${HW_PV}.tgz ) lights? ( mirror://sourceforge/${PN}/${MY_PN}-litfiles-${LIT_PV}.zip )" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="+alsa cdda debug dedicated demo gtk hexenworld lights +mad +midi +mp3 mpg123 +ogg opengl opus oss sdlaudio static +sound +timidity tools tremor +vorbis +wav wildmidi cpu_flags_x86_mmx" REQUIRED_USE=" mp3? ( || ( mad mpg123 ) ) mad? ( mp3 ) mpg123? ( mp3 ) midi? ( || ( timidity wildmidi ) ) timidity? ( midi ) wildmidi? ( midi ) ogg? ( || ( tremor vorbis ) ) tremor? ( ogg ) vorbis? ( ogg ) " GUIDEPEND=">=media-libs/libsdl-1.2.15-r8 gtk? ( >=x11-libs/gtk+-2.24.25:2 ) opengl? ( virtual/opengl ) alsa? ( >=media-libs/alsa-lib-1.0.27.2 ) midi? ( timidity? ( >=media-sound/timidity++-2.13.2-r13 ) wildmidi? ( >=media-sound/wildmidi-0.2.3.5 ) ) mp3? ( mad? ( >=media-libs/libmad-0.15.1b-r6 ) mpg123? ( >=media-sound/mpg123-1.18.1 ) ) ogg? ( tremor? ( >=media-libs/tremor-0_pre20120120 ) vorbis? ( >=media-libs/libvorbis-1.3.3 ) ) opus? ( >=media-libs/opus-1.0.2-r2 >=media-libs/opusfile-0.4 )" RDEPEND="!dedicated? ( ${GUIDEPEND} )" DEPEND="${RDEPEND} x86? ( cpu_flags_x86_mmx? ( || ( >=dev-lang/nasm-2.11.06 >=dev-lang/yasm-1.2.0 ) ) )" S=${WORKDIR}/${MY_PN}source-${MY_PV} dir=${GAMES_DATADIR}/${MY_PN} use demo && dir=${GAMES_DATADIR}/${MY_PN}/demo pkg_pretend() { use dedicated && ewarn "${CATEGORY}/${PN}[dedicated] will only install the dedicated game server" } pkg_setup() { games_pkg_setup } src_prepare() { gl="" if use opengl ; then gl="gl" sed -i -e "/BIN_OGL_PREFIX/s:\"gl\":\"\":" \ launcher/games.h || die "sed games.h failed" fi sed -i -e "/GAME_DATADIR/s:\".*\":\"${dir}\":" \ launcher/games.h || die "sed games.h failed" sed -i -e "/desired_speed/s:= [0-9]*;:= 44100;:" \ engine/h2shared/snd_dma.c || die "sed snd_dma.c failed" sed -i -e "/parms.basedir/s:cwd:\"${dir}\":" \ engine/{hexen2{,/server},hexenworld/{client,server}}/sys_unix.c \ || die "sed sys_unix.c failed" } src_compile() { local g_opts="" local c_opts="" use debug && g_opts+=" DEBUG=1" use demo && g_opts+=" DEMO=1" use static || c_opts+=" LINK_GL_LIBS=no" use sound || c_opts+=" USE_SOUND=no" use cdda || c_opts+=" USE_CDAUDIO=no" use alsa || c_opts+=" USE_ALSA=no" use oss || c_opts+=" USE_OSS=no" use sdlaudio || c_opts+=" USE_SDLAUDIO=no" use midi || c_opts+=" USE_MIDI=no" use timidity || c_opts+=" USE_CODEC_TIMIDITY=no" use wildmidi && c_opts+=" USE_CODEC_TIMIDITY=no" \ && c_opts+=" USE_CODEC_WILDMIDI=yes" use mp3 || c_opts+=" USE_CODEC_MP3=no" use opus && c_opts+=" USE_CODEC_OPUS=yes" use ogg || c_opts+=" USE_CODEC_VORBIS=no" use wav || c_opts+=" USE_CODEC_WAVE=no" use mad || c_opts+=" MP3LIB=mpg123" use vorbis || c_opts+=" VORBISLIB=tremor" use cpu_flags_x86_mmx || c_opts+=" USE_X86_ASM=no" has_version dev-lang/nasm || c_opts+=" NASM=yasm" if ! use dedicated ; then cd ${S}/engine/${MY_PN} einfo "\nBuilding UHexen2 game executable(s)" emake clean emake \ ${g_opts} \ ${c_opts} \ CPUFLAGS="${CFLAGS} -ffast-math" \ ${gl}h2 \ || die "emake Hexen II (${gl}h2) failed" if use gtk ; then cd ${S}/launcher einfo "\nBuilding graphical launcher" emake clean emake \ ${g_opts} \ CPUFLAGS="${CFLAGS} -ffast-math" \ || die "emake launcher failed" fi if use tools ; then cd ${S}/utils einfo "\nBuilding utils" local utils_list+="bspinfo dcc genmodel hcc jsh2color light pak qbsp qfiles texutils/bsp2wal texutils/lmp2pcx vis" for x in ${utils_list} ; do emake -C ${x} clean emake \ ${g_opts} \ CPUFLAGS="${CFLAGS} -ffast-math" \ -C ${x} \ || die "emake ${x} failed" done fi if use hexenworld ; then cd ${S}/engine/hexenworld einfo "\nBuilding Hexenworld servers" emake -C server clean emake \ ${g_opts} \ CPUFLAGS="${CFLAGS} -ffast-math" \ -C server \ || die "emake HexenWorld Server failed" einfo "\nBuilding Hexenworld client(s)" emake -C client clean emake \ ${g_opts} \ ${c_opts} \ CPUFLAGS="${CFLAGS} -ffast-math" \ ${gl}hw \ -C client \ || die "emake Hexenworld Client (${gl}hw) failed" if use tools ; then cd ${S}/hw_utils einfo "\nBuilding Hexenworld utils" local hw_utils="hwmaster hwmquery hwrcon" for x in ${hw_utils} ; do emake -C ${x} clean emake \ ${g_opts} \ CPUFLAGS="${CFLAGS} -ffast-math" \ -C ${x} \ || die "emake ${x} failed" done fi fi else cd ${S}/engine/${MY_PN} einfo "\nBuilding Dedicated Server" emake -C server clean emake \ ${g_opts} \ CPUFLAGS="${CFLAGS} -ffast-math" \ -C server \ || die "emake Dedicated server failed" fi } src_install() { if use demo ; then insinto "${dir}"/data1/maps doins ${WORKDIR}/data1/maps/demo* || die "doins maps/demo* failed" rm -rf ${WORKDIR}/data1/maps else insinto "${dir}" doins -r ${WORKDIR}/portals || die "doins portals failed" rm -f ${WORKDIR}/data1/maps/demo* fi insinto "${dir}" doins -r ${WORKDIR}/data1 || die "doins data1 failed" dodoc docs/README{,.hwcl,.hwmaster,.hwsv,.music} || die "dodoc failed" if ! use dedicated ; then newgamesbin engine/hexen2/${gl}hexen2 ${MY_PN} || die "newgamesbin ${gl}hexen2 failed" newicon engine/resource/hexen2n.png ${MY_PN}.png || die "newicon hexen2n.png failed" make_desktop_entry ${MY_PN} "Hexen 2" ${MY_PN} if use gtk ; then newgamesbin launcher/h2launcher ${MY_PN}-launcher || die "newgamesbin h2launcher failed" make_desktop_entry ${MY_PN}-launcher "Hexen 2 Launcher" ${MY_PN} fi if use tools ; then dobin utils/bspinfo/bspinfo || die "dobin bspinfo failed" dobin utils/dcc/dhcc || die "dobin dhcc failed" dobin utils/genmodel/genmodel || die "dobin genmodel failed" dobin utils/hcc/hcc || die "dobin hcc failed" dobin utils/jsh2color/jsh2colour || die "dobin jsh2colour failed" dobin utils/light/light || die "dobin light failed" dobin utils/pak/paklist || die "dobin paklist failed" dobin utils/pak/pakx || die "dobin pakx failed" dobin utils/qbsp/qbsp || die "dobin qbsp failed" dobin utils/qfiles/qfiles || die "dobin qfiles failed" dobin utils/texutils/lmp2pcx/lmp2pcx || die "dobin lmp2pcx failed" dobin utils/texutils/bsp2wal/bsp2wal || die "dobin bsp2wal failed" dobin utils/vis/vis || die "dobin vis failed" docinto utils dodoc utils/README || die "dodoc README failed" dodoc utils/dcc/dcc.txt || die "dodoc dcc.txt failed" newdoc utils/dcc/README README.dcc || die "newdoc README.dcc failed" newdoc utils/hcc/README README.hcc || die "newdoc README.hcc failed" newdoc utils/jsh2color/README README.jsh2color || die "newdoc README.jsh2color failed" newdoc utils/jsh2color/ChangeLog ChangeLog.jsh2color || die "newdoc Changelog.jsh2color failed" fi if use hexenworld ; then rm -f ${WORKDIR}/hw/pak4_readme.txt insinto "${dir}" doins -r ${WORKDIR}/hw newgamesbin engine/hexenworld/server/hwsv hwsv || die "newgamesbin hwsv failed" newgamesbin engine/hexenworld/client/${gl}hwcl hwcl || die "newgamesbin ${gl}hwcl failed" doicon engine/resource/hexenworld.png || die "doicon hexenworld.png failed" make_desktop_entry hwcl "Hexen 2 Hexenworld Client" hexenworld if use tools ; then dobin hw_utils/hwmaster/hwmaster || die "dobin hwmaster failed" dobin hw_utils/hwmquery/hwmquery || die "dobin hwmquery failed" dobin hw_utils/hwrcon/{hwrcon,hwterm} || die "dobin hwrcon/hwterm failed" docinto utils dodoc hw_utils/hwmquery/hwmquery.txt || die "dodoc hwmquery.txt failed" dodoc hw_utils/hwrcon/{hwrcon,hwterm}.txt || die "dodoc hwrcon/hwterm.txt failed" fi fi else insinto "${dir}"/data1 doins -r ${WORKDIR}/siege/server.cfg || die "doins server.cfg failed" newgamesbin engine/hexen2/server/h2ded ${MY_PN}-ded || die "newgamesbin h2ded failed" fi prepgamesdirs } pkg_postinst() { games_pkg_postinst if ! use dedicated ; then if use demo ; then elog elog "UHexen2 has been compiled specifically to play the demo maps." elog else elog elog "To play the game, you must install the game data files." elog "You must manually copy the pak0.pak and pak1.pak files to" elog "${dir}/data1" elog elog "In order to play the Portal of Praevus expansion pack," elog "you must also manually copy the pak3.pak file to" elog "${dir}/portals" elog elog "To play the demo, emerge with the 'demo' USE flag." elog fi if use gtk ; then elog "To use a graphical launcher, run: hexen2-launcher" elog fi if use tools ; then elog "You've also installed some Hexen2 utilities" elog "(useful for mod developing)" elog elog " - map compiling tools: bspinfo, light, qbsp, vis" elog " - tools for viewing and extracting .pak files: paklist, pakx" elog " - dhcc (old progs.dat compiler/decompiler)" elog " - genmodel (3-D model grabber)" elog " - hcc (HexenC compiler)" elog " - jsh2color (light colouring utility)" elog " - qfiles (build pak files and regenerate bsp models)" elog " - bsp2wal (extract all textures from a bsp file)" elog " - lmp2pcx (convert hexen2 texture data into pcx and tga)" elog if use hexenworld ; then elog "Besides that, you've also installed some Hexenworld utilities:" elog elog " - hwmquery (console app to query HW master servers)" elog " - hwrcon (remote interface to HW rcon command)" elog " - hwterm (HW remote console terminal)" elog fi fi else elog elog "To start the dedicated server, run: hexen2-ded" elog fi }