/
Portfile
388 lines (348 loc) · 15.5 KB
/
Portfile
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
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
name warzone2100
set pretty_name "Warzone 2100"
categories games
license GPL-2+
maintainers @jasonliu--
homepage https://wz2100.net
if {$subport eq ${name}} {
description 3-D real-time strategy game
}
subport ${name}-music {
description music soundtrack files for $pretty_name
}
subport ${name}-videos {
description in-game cinematic sequences for $pretty_name
}
long_description In $pretty_name, you take on the role of a member \
of a group named \"The Project\", in a battle to \
rebuild the world after mankind has nearly been \
destroyed by nuclear missiles. \
\
\n\nThe game offers campaign, tutorial, and \
single- and multi-player skirmish modes. An \
extensive tech tree with over 400 different \
technologies, combined with the unit design \
system, allows for a wide variety of possible \
units and tactics.
if {$subport eq ${name} || $subport eq "${name}-music"} {
PortGroup github 1.0
}
if {$subport eq ${name}} {
PortGroup cmake 1.1
PortGroup legacysupport 1.1
github.setup Warzone2100 ${name} 4.3.0
revision 6
github.tarball_from releases
distname ${name}_src
use_xz yes
dist_subdir ${name}/${version}
checksums rmd160 ead5dccf8860d2096e506d94d41e14eba0ae6fdb \
sha256 417665f4cc678e0cbf2f27905a8fbf0bc51771a0138385abec54d31254582cb3 \
size 320501020
set port_libfmt libfmt9
cmake.module_path-append \
${prefix}/lib/${port_libfmt}/cmake
depends_build-append port:pkgconfig \
port:gettext \
port:asciidoctor
depends_lib-append port:libzip \
port:miniupnpc \
port:gettext-runtime \
port:curl \
port:sqlite3 \
port:sqlitecpp \
port:re2 \
port:${port_libfmt} \
port:discord-rpc \
port:libpng \
port:libsdl2 \
port:openal-soft \
port:libogg \
port:libvorbis \
port:libtheora \
port:libopus \
port:libsodium \
port:libutf8proc \
port:fribidi \
port:physfs \
port:freetype \
port:glm \
path:lib/pkgconfig/harfbuzz.pc:harfbuzz \
port:zlib
depends_run-append port:${name}-music \
port:${name}-videos
# This (sub)port is getting flagged with a '"warzone2100" is not
# distributable because its license "gpl" conflicts with license
# "OpenSSL" of dependency "openssl11"' on the buildbot builders.
# However, warzone2100 is in fact NOT dependent on openssl11; the
# curl port has already been transitioned to using openssl3, and the
# port that is still dependent on openssl11 is asciidoctor, one of
# the tools that warzone2100 is using during the build process.
license_noconflict asciidoctor
worksrcdir ${name}
compiler.cxx_standard 2011
compiler.thread_local_storage yes
# Fix compile errors on macOS <= 10.10 due to files included from
# /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1
legacysupport.newest_darwin_requires_legacy 14
legacysupport.use_mp_libcxx yes
post-patch {
# The source code resets the CMAKE_MODULE_PATH, instead of
# adding to the list. This causes CMake to not be able to
# find any packages that are available through MacPorts Cmake.
reinplace {s/^set.\(CMAKE_MODULE_PATH.*PROJECT_SOURCE_DIR.*cmake\)/list(PREPEND \1/} \
${worksrcpath}/CMakeLists.txt
# Prevent the upstream source from trying to compile these as
# internal libraries, since we have made them available as
# dependencies through MacPorts.
foreach dep [list utf8proc fmt discord-rpc SQLiteCpp] {
reinplace -E \
"/add_subdirectory.$dep/,/set_property.*$dep/d" \
${worksrcpath}/3rdparty/CMakeLists.txt
}
reinplace "/target_link_lib.*fmt/i\\
target_link_libraries(${name} utf8proc)\\
find_package(fmt REQUIRED)\\
" \
${worksrcpath}/src/CMakeLists.txt
reinplace -E {s|(#include.*)utf8proc/utf8proc|\1utf8proc|} \
${worksrcpath}/lib/framework/wzstring.cpp
reinplace \
{/SET.RE2_BUILD_TESTING/,/set_property.*re2.*XCODE_ATTRIBUTE_WARNING_CFLAGS/d} \
${worksrcpath}/3rdparty/CMakeLists.txt
reinplace {s/re2::re2/re2/} \
${worksrcpath}/src/CMakeLists.txt \
${worksrcpath}/lib/netplay/CMakeLists.txt
reinplace "/if.ENABLE_DISCORD/a\\
\\ find_package(DiscordRPC)\\
" \
${worksrcpath}/3rdparty/CMakeLists.txt \
${worksrcpath}/src/CMakeLists.txt \
${worksrcpath}/src/integrations/CMakeLists.txt
reinplace {s/\(TARGET discord-rpc\)/DiscordRPC_FOUND OR \1/} \
${worksrcpath}/src/CMakeLists.txt \
${worksrcpath}/src/integrations/CMakeLists.txt
foreach re [list \
{/target_include_directories.*3rdparty/s/".*"/"${DiscordRPC_INCLUDE_DIR}"/} \
{/target_link_libraries.*discord-rpc/s/discord-rpc/"${DiscordRPC_LIBRARY}"/} \
] {
reinplace $re ${worksrcpath}/src/integrations/CMakeLists.txt
}
reinplace {/include_directories.*glm/d} \
${worksrcpath}/CMakeLists.txt
# The following method to create a conditional to test for an
# Apple Clang version number was taken from the mpiutil 1.0
# PortGroup.
if {${configure.compiler} eq "clang"} {
set compiler_version \
[compiler.command_line_tools_version \
${configure.compiler}]
if {[vercmp $compiler_version 900.0.37] < 0} {
# The '-Wunguarded-availability' flag was introduced in
# Xcode 9, so if we are compiling using an older Xcode,
# we need to remove this #pragma line.
reinplace {/Wunguarded-availability/d} \
${worksrcpath}/lib/framework/cocoa_wrapper.mm
}
}
if {${os.platform} eq "darwin" && ${os.major} <= 13} {
reinplace {/pragma.*push/,/pragma.*pop/d} \
${worksrcpath}/lib/framework/cocoa_wrapper.mm
}
# Compile Objective-C files with
# Automatic Reference Counting turned on
reinplace "/cocoa_wrapper.mm/i\\
\\ add_compile_options(\"-fobjc-arc\")\\
" \
${worksrcpath}/lib/framework/CMakeLists.txt
reinplace "/cocoa_wz_menus.mm/i\\
\\ add_compile_options(\"-fobjc-arc\")\\
" \
${worksrcpath}/lib/sdl/CMakeLists.txt
# Remove the "Check for a newer version" button
reinplace {/Check for a newer version/d} \
${worksrcpath}/src/frontend.cpp
}
configure.args-append -DWZ_DISTRIBUTOR=MacPorts \
-DWZ_ENABLE_WARNINGS=ON \
-DWZ_ENABLE_WARNINGS_AS_ERRORS=OFF \
-DWZ_ENABLE_BACKEND_VULKAN=OFF
# ^
# Unfortunately, we have to disable compiling with Vulkan support,
# because currently the vulkan ports are only at version 1.1.112,
# and warzone requires one that is newer.
post-build {
if {![catch {exec grep MACOSX_BUNDLE_BUNDLE_NAME \
${worksrcpath}/src/CMakeLists.txt} result]} \
{
regexp {MACOSX_BUNDLE_BUNDLE_NAME "(.*)"} $result match \
executable_name
}
if {![catch {exec grep MACOSX_BUNDLE_GUI_IDENTIFIER \
${worksrcpath}/src/CMakeLists.txt} result]} \
{
regexp {MACOSX_BUNDLE_GUI_IDENTIFIER "(.*)"} $result match \
bundle_identifier
}
foreach re [list \
"s/\$(EXECUTABLE_NAME)/$executable_name/" \
"s/\$(PRODUCT_BUNDLE_IDENTIFIER)/$bundle_identifier/" \
"s/\$(MACOSX_DEPLOYMENT_TARGET)/${macosx_deployment_target}/" \
] {
reinplace $re ${build.dir}/src/Warzone-Info.plist
}
}
post-destroot {
move "${destroot}${prefix}/$pretty_name.app" \
${destroot}${applications_dir}/
set app_contents "${applications_dir}/$pretty_name.app/Contents"
delete -force ${destroot}$app_contents/Resources/data
ln -s ${prefix}/share/${name} \
${destroot}$app_contents/Resources/data
delete -force ${destroot}$app_contents/Resources/docs
ln -s ${prefix}/share/doc/${name} \
${destroot}$app_contents/Resources/docs
ln -s "$app_contents/MacOS/$pretty_name" \
${destroot}${prefix}/bin/${name}
delete -force ${destroot}${prefix}/share/${name}/music
# For whatever unknown reason, the upstream source code doesn't
# overwrite the CMake-generated Info.plist file, after going to
# the trouble of generating one themselves. So we do it manually
# here.
xinstall -m 644 ${build.dir}/src/Warzone-Info.plist \
${destroot}$app_contents/Info.plist
}
}
if {$subport eq "${name}-music"} {
set subport_version 0.0.0
revision 1
platforms any
supported_archs noarch
long_description-append \
\n\nThis package ($subport) contains the music \
soundtrack files.
variant standard conflicts high \
description {Install standard-quality music soundtrack} \
{
github.setup Warzone2100 data-music-opus \
81ae966cc68c242a1452ad1f168fb02bab82acea
version $subport_version
checksums rmd160 95f18b1b31f640842a1d085d22195f3354c6873e \
sha256 1a86e9b08999b3a13c484a81a3c2dee7922a71bd243ef1e2607a66859c27189d \
size 87292224
}
variant high conflicts standard \
description {Install high-quality music soundtrack} \
{
github.setup Warzone2100 data-music-opus-hq \
41dc5aac2afe5de04b2de2dc8cf699e8cbbae131
version $subport_version
checksums rmd160 7601e86b019e0895fd3a07cf5475b63ea239d0e8 \
sha256 2afd7c59fa02749ecad718da26cb0f99c5d9103eb6c73bb0f37917d985c5ab46 \
size 184129091
}
default_variants +high
pre-fetch {
if {![variant_isset high] && ![variant_isset standard]} {
ui_error "You must install this port with one of the audio quality variants selected!"
return -code error "No audio quality variant selected"
}
}
use_configure no
build {}
destroot {
set music_dir ${prefix}/share/${name}/music
xinstall -d ${destroot}$music_dir
xinstall -m 644 ${worksrcpath}/menu.opus ${destroot}$music_dir/
copy ${worksrcpath}/albums ${destroot}$music_dir/
}
}
if {$subport eq "${name}-videos"} {
version 0.0.0
revision 0
platforms any
supported_archs noarch
long_description-append \
\n\nThis package ($subport) contains the \
in-game video sequences. All videos were made \
from the original 320x160 source material. \
\n* The high quality videos are just upscaled \
and filtered. Do not expect miracles. \
\n* The standard quality videos are pretty \
close to the original videos, plus some \
filtering. \
\n* The low quality videos use a much lower \
bitrate.
distname sequences
# Note: A .wz file is just a .zip with a custom file extension
extract.suffix .wz
set sf_vids_subdir project/${name}/${name}/Videos
variant high conflicts standard low \
description {Install high quality videos} \
{
set vidquality high-quality
set vidlang en
master_sites sourceforge:$sf_vids_subdir/$vidquality-$vidlang
dist_subdir ${name}/$vidquality-$vidlang
}
variant standard conflicts high low \
description {Install standard quality videos} \
{
set vidquality standard-quality
if {[variant_isset de]} {
set vidlang de
} else {
set vidlang en
}
master_sites sourceforge:$sf_vids_subdir/$vidquality-$vidlang
dist_subdir ${name}/$vidquality-$vidlang
}
variant low conflicts high standard \
description {Install low quality videos} \
{
set vidquality low-quality
set vidlang en
master_sites sourceforge:$sf_vids_subdir/$vidquality-$vidlang
dist_subdir ${name}/$vidquality-$vidlang
}
variant de requires standard conflicts high low \
description {Installieren Sie die Videosequenzen mit den deutschsprachigen Audiodaten} {}
default_variants +high
if {[variant_isset high]} {
checksums rmd160 ac26f1e00849b84cc5b761a3e5471e733d8d3ef1 \
sha256 90ff552ca4a70e2537e027e22c5098ea4ed1bc11bb7fc94138c6c941a73d29fa \
size 964260204
} elseif {[variant_isset standard]} {
if {[variant_isset de]} {
checksums rmd160 1a5e557507b057dde28859da628cffe8317b6768 \
sha256 d285c85ffa57a5663ac11073ef954afb97097089306877860e8e9d9119116fd8 \
size 499187492
} else {
checksums rmd160 7350fa47b0dc0db631ad22763039e29bf420a847 \
sha256 142ae905be288cca33357a49f42b884c190e828fc0b1b1773ded5dff774f41a3 \
size 571937134
}
} elseif {[variant_isset low]} {
checksums rmd160 88ea130925e4a886f0063dc923c794aef068519a \
sha256 4a1939a1e401f3b0f68736ff19689abed5e1e9d3dfe4fc07b04953c0dfaf7ad6 \
size 169607304
}
pre-fetch {
if {![variant_isset high] && ![variant_isset standard] && \
![variant_isset low]} \
{
ui_error "You must install this port with one of the video quality variants selected!"
return -code error "No video quality variant selected"
}
}
extract {}
use_configure no
build {}
destroot {
xinstall -d ${destroot}${prefix}/share/${name}
xinstall -m 644 ${distpath}/${distfiles} \
${destroot}${prefix}/share/${name}/
}
}