summaryrefslogtreecommitdiff
blob: 7300fb65bb2ab749df1ad3057b88f2cdec3a8ac0 (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
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit autotools meson toolchain-funcs xdg

GLSLANG_COMMIT="bcf6a2430e99e8fc24f9f266e99316905e6d5134"
SPIRV_COMMIT="1458bae62ec67ea7d12c5a13b740e23ed4bb226c"

DESCRIPTION="Super Nintendo Entertainment System (SNES) emulator"
HOMEPAGE="https://github.com/snes9xgit/snes9x/"
SRC_URI="
	https://github.com/snes9xgit/snes9x/archive/${PV}.tar.gz -> ${P}.tar.gz
	gui? ( glslang? (
		https://github.com/KhronosGroup/glslang/archive/${GLSLANG_COMMIT}.tar.gz -> ${P}-glslang.tar.gz
		https://github.com/KhronosGroup/SPIRV-Cross/archive/${SPIRV_COMMIT}.tar.gz -> ${P}-spirv.tar.gz
	) )"

LICENSE="
	Snes9x GPL-2 GPL-2+ LGPL-2.1 LGPL-2.1+ ISC MIT ZLIB
	gui? ( glslang? ( Apache-2.0 BSD ) )"
SLOT="0"
KEYWORDS="~amd64 ~ppc64 ~x86"
IUSE="alsa debug glslang gui libretro netplay opengl oss png portaudio pulseaudio wayland xinerama +xv"
REQUIRED_USE="glslang? ( gui opengl )"
RESTRICT="bindist test" # has no tests but can lead to bug #737044

RDEPEND="
	sys-libs/zlib:=[minizip]
	x11-libs/libX11
	x11-libs/libXext
	alsa? ( media-libs/alsa-lib )
	gui? (
		dev-cpp/cairomm:0
		dev-cpp/glibmm:2
		dev-cpp/gtkmm:3.0[wayland?]
		dev-libs/glib:2
		dev-libs/libsigc++:2
		media-libs/libsdl2[joystick]
		x11-libs/cairo
		x11-libs/gdk-pixbuf:2
		x11-libs/gtk+:3[wayland?]
		x11-libs/libXrandr
		x11-misc/xdg-utils
		opengl? ( media-libs/libepoxy )
		portaudio? ( media-libs/portaudio )
		pulseaudio? ( media-sound/pulseaudio )
		wayland? ( dev-libs/wayland )
	)
	libretro? ( !games-emulation/libretro-snes9x )
	png? ( media-libs/libpng:= )
	xinerama? ( x11-libs/libXinerama )
	xv? ( x11-libs/libXv )"
DEPEND="
	${RDEPEND}
	x11-base/xorg-proto
	opengl? ( media-libs/libglvnd )"
BDEPEND="virtual/pkgconfig"

PATCHES=(
	"${FILESDIR}"/${PN}-1.53-cross-compile.patch
	"${FILESDIR}"/${PN}-1.59-build-system.patch
	"${FILESDIR}"/${PN}-1.61-libretro-flags.patch
)

src_prepare() {
	if use gui && use glslang; then
		rmdir shaders/{glslang,SPIRV-Cross} || die
		mv ../glslang-${GLSLANG_COMMIT} shaders/glslang || die
		mv ../SPIRV-Cross-${SPIRV_COMMIT} shaders/SPIRV-Cross || die
	fi

	default

	rm -r unzip || die

	cd unix || die
	eautoreconf
}

src_configure() {
	tc-export CC CXX # for libretro

	local econfargs=(
		$(use_enable alsa sound-alsa)
		$(use_enable debug debugger)
		$(use_enable netplay)
		$(use_enable png screenshot)
		$(use_enable xinerama)
		$(use_enable xv xvideo)
		--enable-gamepad
		--enable-gzip
		--enable-zip
		--with-system-zip
	)

	cd unix || die
	econf "${econfargs[@]}"

	if use gui; then
		local emesonargs=(
			$(meson_use alsa)
			$(meson_use debug debugger)
			$(meson_use glslang slang) # TODO?: unbundle
			$(meson_use opengl)
			$(meson_use oss)
			$(meson_use png screenshot)
			$(meson_use portaudio)
			$(meson_use pulseaudio)
			$(meson_use wayland)
			$(meson_use xv)
			-Dsystem-zip=true
			-Dzlib=true
		)

		EMESON_SOURCE=${S}/gtk
		meson_src_configure
	fi
}

src_compile() {
	if use libretro; then
		emake -C libretro
		# rebuild objects given libretro uses different defines (bug #791475)
		rm *.o || die
	fi

	emake -C unix

	use gui && meson_src_compile
}

src_install() {
	if use libretro; then
		exeinto /usr/$(get_libdir)/libretro
		doexe libretro/snes9x_libretro.so
	fi

	dobin unix/${PN}

	local DOCS=(
		README.md
		docs/{changes,control-inputs,controls,snapshots}.txt
		unix/snes9x.conf.default
	)
	einstalldocs

	if use gui; then
		meson_src_install
		dodoc gtk/AUTHORS
	fi
}