summaryrefslogtreecommitdiff
blob: 34155305c748759c2b03f7e0f694a086e593d6fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=2
fromcvs=0
ECVS_MODULE="duke3d"
if [[ ${fromcvs} -eq 1 ]] ; then
	ECVS_PASS="anonymous"
	ECVS_SERVER="icculus.org:/cvs/cvsroot"
	inherit unpacker cvs eutils flag-o-matic games
else
	inherit unpacker eutils flag-o-matic games
fi

DEMO="3dduke13.zip"

DESCRIPTION="Port of the original Duke Nukem 3D"
HOMEPAGE="http://icculus.org/projects/duke3d/"
SRC_URI="mirror://gentoo/${P}.tar.bz2
	demo? (
		ftp://ftp.3drealms.com/share/${DEMO}
		ftp://ftp.planetmirror.com/pub/gameworld/downloads/${DEMO}
	)"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="hppa ppc x86"
IUSE="demo pic perl opengl"

RDEPEND="media-libs/libsdl
	media-libs/sdl-mixer
	media-sound/timidity++
	media-sound/timidity-eawpatches
	perl? ( dev-lang/perl[-ithreads] )
	opengl? ( virtual/opengl )"
DEPEND="${RDEPEND}
	demo? ( app-arch/unzip )
	!pic? ( x86? ( dev-lang/nasm ) )"

S=${WORKDIR}/${PN}

use_tf() { use ${1} && echo "true" || echo "false"; }

src_unpack() {
	if [[ ${fromcvs} -eq 1 ]] ; then
		cvs_src_unpack
		cd duke3d/source
		ECVS_MODULE="buildengine"
		cvs_src_unpack
	else
		unpack ${A}
	fi

	if use demo ; then
		unpack_zip DN3DSW13.SHR
	fi
}

src_prepare() {
	# configure buildengine
	cd "${S}/source/buildengine"
	sed -i \
		-e "/^useperl := / s:=.*:= $(use_tf perl):" \
		-e "/^useopengl := / s:=.*:= $(use_tf opengl):" \
		-e "/^usephysfs := / s:=.*:= false:" \
		-e 's:-O3::' -e 's: -g : :' \
		-e 's:/usr/lib/perl5/i386-linux/CORE/libperl.a::' \
		Makefile \
		|| die "sed build Makefile failed"
	epatch "${FILESDIR}/${PV}-endian.patch"

	# configure duke3d
	cd "${S}/source"
	# need to sync features with build engine
	epatch \
		"${FILESDIR}/${PV}-credits.patch" \
		"${FILESDIR}/${PV}-duke3d-makefile-opts.patch" \
		"${FILESDIR}/${PV}-gcc34.patch" \
		"${FILESDIR}"/${P}-gcc4.patch \
		"${FILESDIR}"/${P}-noinline.patch \
		"${FILESDIR}"/${P}-as-needed.patch \
		"${FILESDIR}"/${P}-ldflags.patch
	sed -i \
		-e "/^use_opengl := / s:=.*:= $(use_tf opengl):" \
		-e "/^use_physfs := / s:=.*:= false:" \
		Makefile \
		|| die "sed duke3d Makefile failed"
	if ! use pic && use x86 ; then
		sed -i \
			-e 's:^#USE_ASM:USE_ASM:' buildengine/Makefile \
			|| die "sed failed"
		sed -i \
			-e '/^#use_asm := /s:#::' Makefile \
			|| die "sed failed"
	fi

	# causes crazy redefine errors with gcc-3.[2-4].x
	replace-flags -O3 -O2
	strip-flags #203969
}

src_compile() {
	emake -C source/buildengine OPTFLAGS="${CFLAGS}" || die "buildengine failed"
	emake -C source OPTIMIZE="${CFLAGS}" || die "duke3d failed"
}

src_install() {
	games_make_wrapper duke3d "${GAMES_BINDIR}/duke3d.bin" "${GAMES_DATADIR}/${PN}"
	newgamesbin source/duke3d duke3d.bin || die "newgamesbin failed"

	dodoc readme.txt

	cd testdata
	insinto "${GAMES_DATADIR}/${PN}"
	newins defs.con DEFS.CON
	newins game.con GAME.CON
	newins user.con USER.CON
	newins "${FILESDIR}/network.cfg" network.cfg.template
	if use demo ; then
		doins "${WORKDIR}/DUKE3D.GRP" || die "doins DUKE3D.GRP failed"
	fi

	insinto "${GAMES_SYSCONFDIR}"
	doins "${FILESDIR}/duke3d.cfg"
	dosym "${GAMES_SYSCONFDIR}/duke3d.cfg" "${GAMES_DATADIR}/${PN}/DUKE3D.CFG"

	prepgamesdirs
}

pkg_postinst() {
	games_pkg_postinst
	use demo || elog "Put the data files in ${GAMES_DATADIR}/${PN} before playing"
}