summaryrefslogtreecommitdiff
blob: dc6ecffce315ff6574633d0f20e014bd0fec8492 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=6
inherit flag-o-matic toolchain-funcs
RESTRICT="mirror"

TARGET="${PN}"

DESCRIPTION="Multiple Arcade Machine Emulator for X11"
HOMEPAGE="http://x.mame.net/"
SRC_URI="http://x.mame.net/download/xmame-${PV}.tar.bz2"

LICENSE="XMAME"
SLOT="0"
KEYWORDS="alpha amd64 hppa ia64 ppc sparc x86"
IUSE="alsa bundled-libs cpu_flags_x86_mmx dga ggi joystick lirc net opengl sdl svga X xinerama xv"

RDEPEND="sys-libs/zlib
	alsa? ( media-libs/alsa-lib )
	dga? (
		x11-libs/libXxf86dga
		x11-libs/libXxf86vm )
	!bundled-libs? ( dev-libs/expat )
	ggi? ( media-libs/libggi )
	lirc? ( app-misc/lirc )
	opengl? (
		virtual/opengl
		virtual/glu )
	sdl? ( >=media-libs/libsdl-1.2.0 )
	svga? ( media-libs/svgalib )
	xinerama? ( x11-libs/libXinerama )
	xv? ( x11-libs/libXv )
	X? ( x11-libs/libXext )"
DEPEND="${RDEPEND}
	dga? (
		x11-proto/xf86dgaproto
		x11-proto/xf86vidmodeproto )
	xinerama? ( x11-proto/xineramaproto )
	xv? ( x11-proto/videoproto )
	x86? ( dev-lang/nasm )"
# Icc sucks. bug #41342
#	icc? ( dev-lang/icc )

S=${WORKDIR}/xmame-${PV}

toggle_feature() {
	if use $1 ; then
		sed -i \
			-e "/$2.*=/s:#::" Makefile \
			|| die "sed Makefile ($1 / $2) failed"
	fi
}

toggle_feature2() {
	use $1 && toggle_feature $2 $3
}

src_prepare() {
	local mycpu

	case ${ARCH} in
		x86)	mycpu="i386";;
		ia64)	mycpu="ia64";;
		amd64)	mycpu="amd64";;
		ppc)	mycpu="risc";;
		sparc)	mycpu="risc";;
		hppa)	mycpu="risc";;
		alpha)	mycpu="alpha";;
		mips)	mycpu="mips";;
	esac

	sed -i \
		-e "/^PREFIX/s:=.*:=/usr:" \
		-e "/^MY_CPU/s:i386:${mycpu}:" \
		-e "/^MANDIR/s:man/man:share/man/man:" \
		-e "/^XMAMEROOT/s:share:share/games:" \
		-e "/^TARGET/s:mame:${TARGET:1}:" \
		-e "/^INSTALL_GROUP/s:bin:root:" \
		-e "/^CFLAGS =/d" \
		-e 's/-s,//' \
		-e 's/-Wl,-s//' \
		-e "/\bCFLAGS +=/d" \
		Makefile \
		|| die "sed Makefile failed"

	if use ppc ; then
		sed -i \
			-e '/LD.*--relax/s:^# ::' Makefile \
			|| die "sed Makefile (ppc/LD) failed"
	fi

	if use cpu_flags_x86_mmx ; then
		cat >> src/unix/effect_asm.asm <<EOF
		%ifidn __OUTPUT_FORMAT__,elf
		section .note.GNU-stack noalloc noexec nowrite progbits
		%endif
EOF
	fi

	toggle_feature x86 X86_MIPS3_DRC
	toggle_feature2 x86 cpu_flags_x86_mmx EFFECT_MMX_ASM
	toggle_feature joystick JOY_STANDARD
	toggle_feature2 joystick X XINPUT_DEVICES
	use net && ewarn "Network support is currently (${PV}) broken :("
	#toggle_feature net XMAME_NET # Broken
	#toggle_feature esd SOUND_ESOUND # No esound in portage anymore
	toggle_feature alsa SOUND_ALSA
	#toggle_feature arts SOUND_ARTS # Deprecated
	toggle_feature dga X11_DGA
	toggle_feature xv X11_XV
	# if we don't have expat on the system, use the internal one
	toggle_feature bundled-libs BUILD_EXPAT
	toggle_feature opengl X11_OPENGL
	toggle_feature lirc LIRC
	toggle_feature xinerama X11_XINERAMA

	case ${ARCH} in
		x86|ia64|amd64)
			append-flags -Wno-unused -fomit-frame-pointer -fstrict-aliasing -fstrength-reduce
			use amd64 || append-flags -ffast-math #54270
			[[ $(gcc-major-version) -ge 3 ]] \
				&& append-flags -falign-functions=2 -falign-jumps=2 -falign-loops=2 \
				|| append-flags -malign-functions=2 -malign-jumps=2 -malign-loops=2
			;;
		ppc)
			append-flags -Wno-unused -funroll-loops -fstrength-reduce -fomit-frame-pointer -ffast-math -fsigned-char
			;;
		hppa)
			append-flags -ffunction-sections
			;;
	esac

	sed -i \
		-e "s:[Xx]mame:${TARGET}:g" \
		doc/*.6 \
		|| die "sed man pages failed"
	# no, we don't want to install setuid (bug #81693)
	sed -i \
		-e 's/^doinstallsuid/notforus/' \
		-e 's/doinstallsuid/doinstall/' \
		-e '/^QUIET/s:^:#:' src/unix/unix.mak \
		|| die "sed src/unix/unix.mak failed"
	eapply -p0 "${FILESDIR}"/${P}-overflow.patch
	eapply_user
}

src_compile() {
	local disp=0
	if use sdl ; then
		emake -j1 DISPLAY_METHOD=SDL \
			CC=$(tc-getCC) \
			LD=$(tc-getCC)
		disp=1
	fi
	if use svga ; then
		emake -j1 DISPLAY_METHOD=svgalib \
			CC=$(tc-getCC) \
			LD=$(tc-getCC)
		disp=1
	fi
	if use ggi ; then
		#emake -j1 DISPLAY_METHOD=ggi
		#disp=1
		ewarn "GGI support is currently (${PV}) broken :("
	fi
	if  [[ ${disp} -eq 0 ]] || use opengl || use X || use dga || use xv ; then
		emake -j1 DISPLAY_METHOD=x11 \
			CC=$(tc-getCC) \
			LD=$(tc-getCC)
	fi
}

src_install() {
	local disp=0 f utils="chdman imgtool dat2html romcmp xml2info"

	if use sdl ; then
		make DISPLAY_METHOD=SDL PREFIX="${ED}/usr" install \
			|| die "install failed (sdl)"
		disp=1
	fi
	if use svga ; then
		make DISPLAY_METHOD=svgalib PREFIX="${ED}/usr" install \
			|| die "install failed (svga)"
		disp=1
	fi
	if use ggi ; then
		#make DISPLAY_METHOD=ggi install || die "install failed (ggi)"
		#disp=1
		ewarn "GGI support is currently (${PV}) broken :("
	fi
	if [[ ${disp} -eq 0 ]] || use opengl || use X || use dga || use xv ; then
		make DISPLAY_METHOD=x11 PREFIX="${ED}/usr" install \
			|| die "install failed (x11)"
	fi
	exeinto "/usr/$(get_libdir)/${PN}"
	for f in $utils
	do
		if [[ -f "${ED}"/usr/bin/$f ]] ; then
			doexe $f
			rm -f "${ED}"/usr/bin/$f 2>/dev/null
		fi
	done

	insinto "/usr/share/games/${PN}"
	doins -r ctrlr
	dodoc doc/{changes.*,*.txt,mame/*,${TARGET}rc.dist} README todo
	docinto html
	dodoc -r doc/img doc/mess doc/*.html doc/*.css

	# default to sdl since the client is a bit more featureful
	if use sdl ; then
		dosym "${TARGET}.SDL" "/usr/bin/${TARGET}"
	elif [[ ${disp} -eq 0 ]] || use opengl || use X || use dga || use xv ; then
		dosym "${TARGET}.x11" "/usr/bin/${TARGET}"
	elif use svga ; then
		dosym ${TARGET}.svgalib "/usr/bin/${TARGET}"
	#elif use ggi ; then
		#dosym ${TARGET}.ggi "/usr/bin/${TARGET}"
	fi
}

pkg_postinst() {
	elog "Your available MAME binaries are: ${TARGET}"
	if use opengl || use X || use dga || use xv ; then
		elog " ${TARGET}.x11"
	fi
	use sdl    && elog " ${TARGET}.SDL"
	#use ggi    && elog " ${TARGET}.ggi"
	use svga   && elog " ${TARGET}.svgalib"

	elog "Helper utilities are located in /usr/$(get_libdir)/${PN}."
}