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
|
{ lib
, stdenv
, fetchurl
, cmake
, ninja
, p7zip
, pkg-config
, asciidoctor
, gettext
, SDL2
, libtheora
, libvorbis
, openal
, openalSoft
, physfs
, miniupnpc
, libsodium
, curl
, libpng
, freetype
, harfbuzz
, sqlite
, which
, vulkan-headers
, vulkan-loader
, shaderc
, testVersion
, warzone2100
, withVideos ? false
}:
let
pname = "warzone2100";
sequences_src = fetchurl {
url = "mirror://sourceforge/${pname}/warzone2100/Videos/high-quality-en/sequences.wz";
sha256 = "90ff552ca4a70e2537e027e22c5098ea4ed1bc11bb7fc94138c6c941a73d29fa";
};
in
stdenv.mkDerivation rec {
inherit pname;
version = "4.2.6";
src = fetchurl {
url = "mirror://sourceforge/${pname}/releases/${version}/${pname}_src.tar.xz";
sha256 = "sha256-sdHc/i1ffbTAY7ehO6LsIa+ll+LHkuXIwcwTIEOY28g=";
};
buildInputs = [
SDL2
libtheora
libvorbis
openal
openalSoft
physfs
miniupnpc
libsodium
curl
libpng
freetype
harfbuzz
sqlite
] ++ lib.optionals (!stdenv.isDarwin) [
vulkan-headers
vulkan-loader
];
nativeBuildInputs = [
pkg-config
cmake
ninja
p7zip
asciidoctor
gettext
shaderc
];
postPatch = ''
substituteInPlace lib/exceptionhandler/dumpinfo.cpp \
--replace '"which "' '"${which}/bin/which "'
substituteInPlace lib/exceptionhandler/exceptionhandler.cpp \
--replace "which %s" "${which}/bin/which %s"
'';
cmakeFlags = [
"-DWZ_DISTRIBUTOR=NixOS"
# The cmake builder automatically sets CMAKE_INSTALL_BINDIR to an absolute
# path, but this results in an error:
#
# > An absolute CMAKE_INSTALL_BINDIR path cannot be used if the following
# > are not also absolute paths: WZ_DATADIR
#
# WZ_DATADIR is based on CMAKE_INSTALL_DATAROOTDIR, so we set that.
#
# Alternatively, we could have set CMAKE_INSTALL_BINDIR to "bin".
"-DCMAKE_INSTALL_DATAROOTDIR=${placeholder "out"}/share"
] ++ lib.optional stdenv.isDarwin "-P../configure_mac.cmake";
postInstall = lib.optionalString withVideos ''
cp ${sequences_src} $out/share/warzone2100/sequences.wz
'';
passthru.tests = {
version = testVersion {
package = warzone2100;
# The command always exits with code 1
command = "(warzone2100 --version || [ $? -eq 1 ])";
};
};
meta = with lib; {
description = "A free RTS game, originally developed by Pumpkin Studios";
longDescription = ''
Warzone 2100 is an open source real-time strategy and real-time tactics
hybrid computer game, originally developed by Pumpkin Studios and
published by Eidos Interactive.
In Warzone 2100, you command the forces of The Project in a battle to
rebuild the world after mankind has almost been destroyed by nuclear
missiles. The game offers campaign, multi-player, and single-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.
'';
homepage = "https://wz2100.net";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ astsmtl fgaz ];
platforms = platforms.all;
# configure_mac.cmake tries to download stuff
# https://github.com/Warzone2100/warzone2100/blob/master/macosx/README.md
broken = stdenv.isDarwin;
};
}
|