# Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI="2" inherit eutils flag-o-matic toolchain-funcs versionator games MY_PV=$(replace_version_separator 3 '-') DATA_PV="1.19a" HW_PV="0.15" MY_PN="hexen2" DEMO_PV="1.4.3" DESCRIPTION="Hexen 2 port - Hammer of Thyrion" HOMEPAGE="http://uhexen2.sourceforge.net/" SRC_URI="mirror://sourceforge/${PN}/${MY_PN}source-${MY_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++ >=media-libs/sdl-mixer-1.2.5[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-cvs ${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-${MY_PV}" dir="${GAMES_DATADIR}/${MY_PN}" pkg_setup() { games_pkg_setup } src_unpack() { unpack ${A} cd "${S}" epatch "${S}/00_Patches/midi_with_sdlaudio-test.diff" 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 some new useful document 8) head -22 "00_Patches/external-music-file-support.diff" > \ "docs/external_music.README" || die "make readme failed" head -9 "00_Patches/midi_with_sdlaudio-test.diff" > \ "docs/midi_with_sdlaudio.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 }