# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit eutils flag-o-matic toolchain-funcs versionator games DATA_PV="1.19" HW_PV="0.15" MY_PN="hexen2" DEMO_PV="1.4.1" DESCRIPTION="Hexen 2 port - Hammer of Thyrion (CVS snapshot)" HOMEPAGE="http://uhexen2.sourceforge.net/" SRC_URI="mirror://sourceforge/${PN}/${MY_PN}source-${PV}.tgz mirror://sourceforge/u${MY_PN}/gamedata-all-${DATA_PV}.tgz hexenworld? ( mirror://sourceforge/u${MY_PN}/hexenworld-pakfiles-${HW_PV}.tgz )" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64 ~ppc ~x86" IUSE="3dfx alsa asm cdaudio debug dedicated demo dynamic hexenworld gtk lights midi opengl optimize-cflags oss sdlaudio sdlcd tools" QA_EXECSTACK="${GAMES_BINDIR:1}/hexen2 ${GAMES_BINDIR:1}/glhexen2 ${GAMES_BINDIR:1}/hexen2-demo ${GAMES_BINDIR:1}/glhexen2-demo ${GAMES_BINDIR:1}/hwcl ${GAMES_BINDIR:1}/glhwcl ${GAMES_BINDIR:1}/hwcl-demo ${GAMES_BINDIR:1}/glhwcl-demo" UIDEPEND=">=media-libs/libsdl-1.2.7 >=media-libs/sdl-mixer-1.2.5 3dfx? ( media-libs/glide-v3 ) alsa? ( >=media-libs/alsa-lib-1.0.7 ) midi? ( media-sound/timidity++ ) opengl? ( virtual/opengl )" # Launcher depends from GTK+ libs LNCHDEPEND="gtk? ( =x11-libs/gtk+-2* )" # xdelta is needed to manually run the patch script RDEPEND="!games-fps/uhexen2 ${UIDEPEND} ${LNCHDEPEND} demo? ( >=games-fps/hexen2-demodata-${DEMO_PV} ) lights? ( games-fps/hexen2-lights ) >=dev-util/xdelta-1.1.3-r1" DEPEND="${UIDEPEND} ${LNCHDEPEND} x86? ( asm? ( >=dev-lang/nasm-0.98.38 ) )" S="${WORKDIR}/hexen2source-${PV}" dir="${GAMES_DATADIR}/${MY_PN}" pkg_setup() { games_pkg_setup if use midi ; then if ! built_with_use "media-libs/sdl-mixer" timidity ; then eerror "Recompile media-libs/sdl-mixer with 'timidity' USE flag." die "sdl-mixer without timidity support detected" fi use sdlaudio && ewarn "MIDI music does not work with sdlaudio." else ewarn "MIDI support disabled! MIDI music won't be played at all." ewarn "If you want to hear it, recompile this package" ewarn "with \"midi\" USE flag enabled." fi use alsa || ewarn "alsa is the recommended sound driver." } src_unpack() { unpack ${A} cd "${S}" cd hexen2 epatch "${S}/00_Patches/external-music-file-support.diff" cd .. # Whether to use the demo directory local demo use demo && demo="/demo" # Use default basedir - has 2 variations sed -i \ -e "s:parms.basedir = cwd;:parms.basedir = \"${dir}${demo}\";:" \ -e "s:parms.basedir = \".\";:parms.basedir = \"${dir}${demo}\";:" \ {hexen2,hexen2/server,hexenworld/{Client,Server}}/sys_unix.c \ || die "sed sys_unix.c failed" # Change default sndspeed from 22050 to 44100, # to improve the quality/reliability. sed -i \ -e "s:desired_speed = 22050:desired_speed = 44100:" \ {hexen2,hexenworld/Client}/snd_dma.c || die "sed snd_dma.c failed" # Change patch script to be suitable sed -i \ -e "s:chmod :#chmod :" \ -e 's:"xdelta113":"/usr/bin/xdelta":' \ -e "s:./xdelta113:xdelta": \ "${WORKDIR}"/update_xdelta.sh || die "sed update_xdelta.sh failed" # Honour Portage CFLAGS also when debuggins is enabled use debug && append-flags "-g2" for u in `grep -lr '\-g \-Wall' *`; do sed -i \ -e "s/^CFLAGS \:\= \-g \-Wall/CFLAGS \:\= ${CFLAGS}/" \ ${u} || die "sed ${u} failed" done if use demo ; then # Allow lightmaps in demo sed -i \ -e "s:!override_pack:0:" \ hexen2/common.c || die "sed common.c demo failed" fi if use gtk ; then # Tweak the default games data dir for graphical launcher sed -i \ -e "/int basedir_nonstd/s:= 0:= 1:" \ -e "/game_basedir\[0\]/d" \ launcher/config_file.c || die "sed config_file.c failed" # Tweak the default name for binary executables,if DEMO version is enabled if use demo ; then sed -i \ -e "/BINARY_NAME/s:\"$:-demo\":" \ launcher/games.h || die "sed games.h failed" fi fi rm -rf docs/{activision,COMPILE,COPYING,LICENSE,README.win32} } src_compile() { local h2bin="h2" hwbin="hw" link_gl_libs="no" opts local \ h2bin="h2" hwbin="hw" \ USE_ALSA="no" \ USE_CDAUDIO="no" \ LINK_GL_LIBS="no" \ USE_MIDI="no" \ OPT_EXTRA="no" \ USE_OSS="no" \ USE_SDLCD="no" \ X86_ASM="no" \ USE_3DFX="no" \ opts if use opengl ; then h2bin="${h2bin} gl${h2bin}" hwbin="${hwbin} gl${hwbin}" use dynamic && LINK_GL_LIBS="yes" fi use debug && opts="${opts} DEBUG=1" use demo && opts="${opts} DEMO=1" use alsa && USE_ALSA="yes" use cdaudio && USE_CDAUDIO="yes" use optimize-cflags && OPT_EXTRA="yes" use oss && USE_OSS="yes" use sdlcd && USE_SDLCD="yes" use midi && USE_MIDI="yes" use x86 && use asm && X86_ASM="yes" use 3dfx && USE_3DFX="yes" if use gtk ; then # Build launcher cd "${S}/launcher" einfo "Building graphical launcher" emake \ AUTOTOOLS=1 \ ${opts} \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ || die "emake launcher failed" fi if use tools ; then # Build Hexen2 utils cd "${S}/utils" einfo "Building utils" local utils_list="hcc maputils genmodel qfiles dcc jsh2color hcc_old texutils/bsp2wal texutils/lmp2pcx" for x in ${utils_list} do emake -C ${x} \ ${opts} \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ || die "emake ${x} failed" done fi if use dedicated ; then # Dedicated Server cd "${S}/${MY_PN}" einfo "Building Dedicated Server" emake \ ${opts} \ OPT_EXTRA=${OPT_EXTRA} \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ -f Makefile.sv \ || die "emake Dedicated server failed" fi if use hexenworld ; then if use tools; then # Hexenworld utils local hw_utils="hwmquery hwrcon" einfo "Building Hexenworld utils" cd "${S}/hw_utils" for x in ${hw_utils} ; do emake \ ${opts} \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ -C ${x} \ || die "emake ${x} failed" done fi # Hexenworld einfo "Building Hexenworld servers" cd "${S}"/hexenworld # Hexenworld servers emake \ ${opts} \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ -C Server \ || die "emake HexenWorld Server failed" emake \ ${opts} \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ -C Master \ || die "emake HexenWorld Master failed" # Hexenworld client einfo "Building Hexenworld client(s)" for m in ${hwbin} ; do emake -C Client clean emake \ ${opts} \ USE_ALSA=${USE_ALSA} \ USE_OSS=${USE_OSS} \ USE_CDAUDIO=${USE_CDAUDIO} \ USE_MIDI=${USE_MIDI} \ USE_SDLAUDIO=${USE_SDLAUDIO} \ USE_SDLCD=${USE_SDLCD} \ USE_X86_ASM=${X86_ASM} \ OPT_EXTRA=${OPT_EXTRA} \ LINK_GL_LIBS=${LINK_GL_LIBS} \ USE_3DFXGAMMA="${USE_3DFX}" \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ ${m} \ -C Client \ || die "emake Hexenworld Client (${m}) failed" done fi # Hexen 2 game executable cd "${S}/${MY_PN}" einfo "Building UHexen2 game executable(s)" for m in ${h2bin} ; do emake clean emake \ ${opts} \ USE_ALSA=${USE_ALSA} \ USE_OSS=${USE_OSS} \ USE_CDAUDIO=${USE_CDAUDIO} \ USE_MIDI=${USE_MIDI} \ USE_SDLAUDIO=${USE_SDLAUDIO} \ USE_SDLCD=${USE_SDLCD} \ USE_X86_ASM=${X86_ASM} \ OPT_EXTRA=${OPT_EXTRA} \ LINK_GL_LIBS=${LINK_GL_LIBS} \ USE_3DFXGAMMA=${USE_3DFX} \ CPUFLAGS="${CFLAGS}" \ CC="$(tc-getCC)" \ ${m} \ || die "emake Hexen2 (${m}) failed" done } src_install() { local demo demo_title demo_suffix use demo && demo="-demo" && demo_title=" (Demo)" && demo_suffix="demo" newicon hexen2/icons/h2_32x32x4.png ${PN}.png || die make_desktop_entry "${MY_PN}${demo}" "Hexen 2${demo_title}" ${PN}.png newgamesbin "${MY_PN}/${MY_PN}" "${MY_PN}${demo}" \ || die "newgamesbin ${MY_PN} failed" if use opengl ; then make_desktop_entry "gl${MY_PN}${demo}" "GLHexen 2${demo_title}" ${PN}.png newgamesbin "${MY_PN}/gl${MY_PN}" "gl${MY_PN}${demo}" \ || die "newgamesbin gl${MY_PN} failed" fi if use dedicated ; then newgamesbin "${MY_PN}"/h2ded "${MY_PN}${demo}-ded" \ || die "newgamesbin h2ded failed" fi if use hexenworld ; then if use tools; then # Hexenworld utils dobin hw_utils/hwmquery/hwmquery || die "dobin hwmquery failed" dobin hw_utils/hwrcon/{hwrcon,hwterm} || die "dobin hwrcon/hwterm failed" 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 # Hexenworld Servers newgamesbin hexenworld/Server/hwsv hwsv${demo} \ || die "newgamesbin hwsv failed" newgamesbin hexenworld/Master/hwmaster hwmaster${demo} \ || die "newgamesbin hwmaster failed" # HexenWorld client(s) newicon hexenworld/icons/hw2_32x32x8.png hwcl.png || die make_desktop_entry \ "hwcl${demo}" "Hexen 2${demo_title} Hexenworld Client" hwcl.png newgamesbin "hexenworld/Client/hwcl" "hwcl${demo}" \ || die "newgamesbin hwcl failed" if use opengl ; then make_desktop_entry \ "glhwcl${demo}" "GLHexen 2${demo_title} Hexenworld Client" hwcl.png newgamesbin "hexenworld/Client/glhwcl" "glhwcl${demo}" \ || die "newgamesbin glhwcl failed" fi insinto "${dir}"/${demo_suffix} doins -r "${WORKDIR}"/hw || die "doins hexenworld pak failed" fi if use gtk ; then # GTK launcher local lnch_name="h2launcher" use demo && lnch_name="h2demo" newgamesbin launcher/${lnch_name} h2launcher \ || die "newgamesbin h2launcher failed" make_desktop_entry \ "h2launcher" "Hexen 2${demo_title} Launcher" ${PN}.png fi # Forge a new useful document 8) head -22 "00_Patches/external-music-file-support.diff" > \ "docs/external_music.README" || die "make readme failed" dodoc docs/* if ! use demo ; then # Install updated game data insinto "${dir}" doins -r "${WORKDIR}"/{data1,patchdata,portals,siege} || die # Patching should really be done by a future "hexen2-data" ebuild. # But this works for now. doins "${WORKDIR}"/update_xdelta.sh || die dodoc "${WORKDIR}"/*.txt fi if use tools ; then dobin \ utils/bin/{bsp2wal,bspinfo,dhcc,genmodel,hcc} \ || die "dobin utils part 1 failed" dobin \ utils/bin/{jsh2colour,light,lmp2pcx,qbsp,qfiles,vis} \ || die "dobin utils part 2 failed" newbin utils/hcc_old/hcc hcc_old || die "newbin hcc_old failed" docinto utils dodoc utils/README || die "dodoc README failed" newdoc utils/dcc/README README.dcc || die "newdoc dcc failed" dodoc utils/dcc/dcc.txt || die "dodoc dcc.txt failed" newdoc utils/hcc/README README.hcc || die "newdoc hcc failed" newdoc utils/hcc_old/README hcc_old.txt || die "newdoc hcc_old failed" newdoc utils/jsh2color/README README.jsh2color \ || die "newdoc README.jsh2color failed" newdoc utils/jsh2color/ChangeLog ChangeLog.jsh2color \ || die "newdoc Changelog.jsh2color failed" fi prepgamesdirs } pkg_postinst() { games_pkg_postinst if use demo ; then elog "uhexen2 has been compiled specifically to play the demo maps." elog "Example command-line:" elog " hexen2-demo -width 1024 -height 768 -conwidth 640" echo else elog "To play the demo, emerge with the 'demo' USE flag." elog elog "For the Hexen 2 original game..." elog "Put the following files into ${dir}/data1 before playing:" elog " pak0.pak pak1.pak" elog "Then to play: hexen2" elog elog "For the 'Portal of Praevus' mission pack..." elog "Put the following file into ${dir}/portals before playing:" elog " pak3.pak" elog "Then to play: hexen2 -portals" elog elog "To ensure the data files from the CD are patched, run as root:" elog " cd ${dir} && sh update_xdelta.sh" elog elog "Example command-line:" elog " hexen2 -width 1024 -height 768 -conwidth 640" echo fi if use gtk ; then elog "You've also installed a nice graphical launcher. Simply run:" elog elog " h2launcher" elog elog "to enjoy it :)" echo fi if use tools ; then if use hexenworld; then elog "You've also installed some Hexenworld utility:" elog elog " - hwmquery (console app to query HW master servers)" elog " - hwrcon (remote interface to HW rcon command)" elog " - hwterm (HW remote console terminal)" echo fi elog "You've also installed some Hexen2 utility" elog "(useful for mod developing)" elog elog " - dhcc (old progs.dat compiler/decompiler)" elog " - genmodel (3-D model grabber)" elog " - hcc (HexenC compiler)" elog " - hcc_old (old version of HexenC compiler)" elog " - jsh2color (light colouring utility)" elog " - maputils (Map compiling tools: bspinfo, light, qbsp, vis)" 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 elog "See relevant documentation for further informations" echo fi }