games-fps/eduke32: fix timidity deps
[gentoo.git] / games-fps / eduke32 / eduke32-20190919.8133.ebuild
1 # Copyright 1999-2019 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=7
5
6 inherit desktop toolchain-funcs xdg-utils
7
8 MY_BUILD="$(ver_cut 2)"
9 MY_DATE="$(ver_cut 1)"
10
11 MY_PV_HRP="5.4"
12 MY_PV_OFFENSIVE_XXX="1.33"
13 MY_PV_OPL="2.01"
14 MY_PV_PSX="1.11"
15 MY_PV_SC55="4.02"
16 MY_PV_VOXELS="1.21"
17
18 DESCRIPTION="An open source engine port of the classic PC first person shooter Duke Nukem 3D"
19 HOMEPAGE="http://www.eduke32.com/"
20 SRC_URI="
21         http://dukeworld.com/eduke32/synthesis/${MY_DATE}-${MY_BUILD}/${PN}_src_${MY_DATE}-${MY_BUILD}.tar.xz
22         http://www.eduke32.com/images/eduke32_classic.png
23         hrp? ( http://www.duke4.org/files/nightfright/hrp/duke3d_hrp.zip -> duke3d_hrp-${MY_PV_HRP}.zip )
24         offensive? ( http://www.duke4.org/files/nightfright/related/duke3d_xxx.zip -> duke3d_xxx-${MY_PV_OFFENSIVE_XXX}.zip )
25         opl? ( http://www.moddb.com/downloads/mirror/95750/102/ce9e8f422c6cccdb297852426e96740a -> duke3d_musopl-${MY_PV_OPL}.zip )
26         psx? ( http://www.duke4.org/files/nightfright/related/duke3d_psx.zip -> duke3d_psx-${MY_PV_PSX}.zip )
27         sc-55? ( http://www.duke4.org/files/nightfright/music/duke3d_music-sc55.zip -> duke3d_music-sc55-${MY_PV_SC55}.zip )
28         voxels? ( https://www.dropbox.com/s/yaxfahyvskyvt4r/duke3d_voxels.zip -> duke3d_voxels-${MY_PV_VOXELS}.zip )
29 "
30
31 LICENSE="BUILDLIC GPL-2 HRP"
32 SLOT="0"
33 KEYWORDS="~amd64 ~hppa ~x86"
34 IUSE="cdinstall demo flac fluidsynth gtk hrp offensive opengl opl png psx sc-55 server sdk timidity tools vorbis voxels vpx xmp"
35 REQUIRED_USE="
36         cdinstall? ( !demo )
37         demo? ( !cdinstall )
38         hrp? ( ^^ ( demo cdinstall )
39                 !voxels )
40         offensive? ( ^^ ( demo cdinstall ) )
41         opl? ( ^^ ( demo cdinstall )
42                 !sc-55 )
43         psx? ( ^^ ( demo cdinstall ) )
44         sc-55? ( ^^ ( demo cdinstall )
45                 !opl )
46         voxels? ( !hrp )
47         vpx? ( opengl )
48 "
49
50 RESTRICT="bindist"
51
52 S="${WORKDIR}/${PN}_${MY_DATE}-${MY_BUILD}"
53
54 MY_DEPEND_RDEPEND="
55         media-libs/libsdl2[joystick,opengl?,sound,video]
56         media-libs/sdl2-mixer[flac?,fluidsynth?,midi,timidity?,vorbis?]
57         sys-libs/zlib:=
58         flac? ( media-libs/flac )
59         gtk? ( x11-libs/gtk+:2 )
60         opengl? (
61                 virtual/glu
62                 virtual/opengl
63         )
64         png? ( media-libs/libpng:0= )
65         timidity? ( media-sound/timidity-freepats )
66         vpx? ( media-libs/libvpx:= )
67         vorbis? (
68                 media-libs/libogg
69                 media-libs/libvorbis
70         )
71         xmp? ( media-libs/exempi:= )
72 "
73
74 RDEPEND="
75         ${MY_DEPEND_RDEPEND}
76         cdinstall? ( games-fps/duke3d-data )
77         demo? ( games-fps/duke3d-demodata )
78 "
79
80 DEPEND="
81         ${MY_DEPEND_RDEPEND}
82         app-arch/unzip
83         x86? ( dev-lang/nasm )
84 "
85
86 PATCHES=(
87         "${FILESDIR}/${PN}-20190419.7615-wad2map-buildfix.patch"
88         "${FILESDIR}/${PN}-20190820.8043-log-to-tmpdir.patch"
89         "${FILESDIR}/${PN}-20190820.8043-search-duke3d-path.patch"
90 )
91
92 src_unpack() {
93         # Extract only the eduke32 archive
94         unpack ${PN}_src_${MY_DATE}-${MY_BUILD}.tar.xz
95
96         # Unpack only the documentation
97         if use hrp; then
98                 unzip -q "${DISTDIR}"/duke3d_hrp-${MY_PV_HRP}.zip hrp_readme.txt hrp_todo.txt || die
99         fi
100         if use offensive; then
101                 unzip -q "${DISTDIR}"/duke3d_xxx-${MY_PV_OFFENSIVE_XXX}.zip xxx_readme.txt || die
102         fi
103         if use opl; then
104                 unzip -q "${DISTDIR}"/duke3d_musopl-${MY_PV_OPL}.zip readme.txt || die
105                 mv readme.txt opl_readme.txt || die
106         fi
107         if use sc-55; then
108                 unzip -q "${DISTDIR}"/duke3d_music-sc55-${MY_PV_SC55}.zip readme/music_readme.txt || die
109         fi
110         if use voxels; then
111                 unzip -q "${DISTDIR}"/duke3d_voxels-${MY_PV_VOXELS}.zip voxelpack_readme.txt || die
112         fi
113 }
114
115 src_compile() {
116         local myemakeopts=(
117                 ALLOCACHE_AS_MALLOC=0
118                 AS=$(tc-getAS)
119                 CC=$(tc-getCC)
120                 CXX=$(tc-getCXX)
121                 CLANG=0
122                 CPLUSPLUS=1
123                 CUSTOMOPT=""
124                 DEBUGANYWAY=0
125                 F_JUMP_TABLES=""
126                 FORCEDEBUG=0
127                 HAVE_FLAC=$(usex flac 1 0)
128                 HAVE_GTK2=$(usex gtk 1 0)
129                 HAVE_VORBIS=$(usex vorbis 1 0)
130                 HAVE_XMP=$(usex xmp 1 0)
131                 LINKED_GTK=$(usex gtk 1 0)
132                 LTO=1
133                 LUNATIC=0
134                 KRANDDEBUG=0
135                 MEMMAP=0
136                 MIXERTYPE=SDL
137                 NETCODE=$(usex server 1 0)
138                 NOASM=0
139                 OPTLEVEL=0
140                 OPTOPT=""
141                 PACKAGE_REPOSITORY=1
142                 POLYMER=$(usex opengl 1 0)
143                 PRETTY_OUTPUT=0
144                 PROFILER=0
145                 RELEASE=1
146                 RENDERTYPE=SDL
147                 SDL_TARGET=2
148                 SIMPLE_MENU=0
149                 STRIP=""
150                 TANDALONE=0
151                 STARTUP_WINDOW=$(usex gtk 1 0)
152                 USE_OPENGL=$(usex opengl 1 0)
153                 USE_LIBVPX=$(usex vpx 1 0)
154                 USE_LIBPNG=$(usex png 1 0)
155                 USE_LUAJIT_2_1=0
156                 WITHOUT_GTK=$(usex gtk 0 1)
157         )
158
159         emake "${myemakeopts[@]}"
160
161         if use tools; then
162                 emake utils "${myemakeopts[@]}"
163         fi
164 }
165
166 src_test() {
167         # There are no tests
168         # Instead it tries to build a test game, which does not compile
169         :;
170 }
171
172 src_install() {
173         dobin eduke32 mapster32 "${FILESDIR}"/eduke32-bin
174
175         if use tools; then
176                 local tools=(
177                         arttool
178                         bsuite
179                         cacheinfo
180                         generateicon
181                         givedepth
182                         ivfrate
183                         kextract
184                         kgroup
185                         kmd2tool
186                         makesdlkeytrans
187                         map2stl
188                         md2tool
189                         mkpalette
190                         transpal
191                         unpackssi
192                         wad2art
193                         wad2map
194                 )
195
196                 dobin "${tools[@]}"
197         fi
198
199         keepdir /usr/share/games/eduke32
200         insinto /usr/share/games/eduke32
201
202         if use hrp; then
203                 doins "${DISTDIR}"/duke3d_hrp-${MY_PV_HRP}.zip
204         fi
205         if use offensive; then
206                 doins "${DISTDIR}"/duke3d_xxx-${MY_PV_OFFENSIVE_XXX}.zip
207         fi
208         if use opl; then
209                 doins "${DISTDIR}"/duke3d_musopl-${MY_PV_OPL}.zip
210         fi
211         if use psx; then
212                 doins "${DISTDIR}"/duke3d_psx-${MY_PV_PSX}.zip
213         fi
214         if use sc-55; then
215                 doins "${DISTDIR}"/duke3d_music-sc55-${MY_PV_SC55}.zip
216         fi
217         if use sdk; then
218                 doins -r package/sdk
219         fi
220         if use voxels; then
221                 doins "${DISTDIR}"/duke3d_voxels-${MY_PV_VOXELS}.zip
222         fi
223
224         newicon "${DISTDIR}"/eduke32_classic.png eduke32.png
225
226         make_desktop_entry eduke32-bin EDuke32 eduke32 Game
227         make_desktop_entry mapster32 Mapster32 eduke32 Game
228
229         local DOCS=( package/sdk/samples/*.txt source/build/doc/*.txt source/duke3d/src/lunatic/doc/*.txt )
230
231         if use hrp; then
232                 DOCS+=( "${WORKDIR}"/hrp_readme.txt "${WORKDIR}"/hrp_todo.txt )
233         fi
234         if use offensive; then
235                 DOCS+=( "${WORKDIR}"/xxx_readme.txt )
236         fi
237         if use opl; then
238                 DOCS+=( "${WORKDIR}"/opl_readme.txt )
239         fi
240         if use sc-55; then
241                 DOCS+=( "${WORKDIR}"/readme/music_readme.txt )
242         fi
243         if use voxels; then
244                 DOCS+=( "${WORKDIR}"/voxelpack_readme.txt )
245         fi
246
247         einstalldocs
248 }
249
250 pkg_postinst() {
251         xdg_icon_cache_update
252 }
253
254 pkg_postrm() {
255         xdg_icon_cache_update
256 }