Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / games / warzone2100 / default.nix
blob9979d16247c020008ae1d6b82229fc5c9e4bb4be
1 { lib
2 , stdenv
3 , fetchurl
4 , cmake
5 , ninja
6 , p7zip
7 , pkg-config
8 , asciidoctor
9 , gettext
11 , SDL2
12 , libtheora
13 , libvorbis
14 , libopus
15 , openal
16 , openalSoft
17 , physfs
18 , miniupnpc
19 , libsodium
20 , curl
21 , libpng
22 , freetype
23 , harfbuzz
24 , sqlite
25 , which
26 , vulkan-headers
27 , vulkan-loader
28 , shaderc
30 , testers
31 , warzone2100
32 , nixosTests
34 , gitUpdater
36 , withVideos ? false
39 let
40   pname = "warzone2100";
41   sequences_src = fetchurl {
42     url = "mirror://sourceforge/${pname}/warzone2100/Videos/high-quality-en/sequences.wz";
43     sha256 = "90ff552ca4a70e2537e027e22c5098ea4ed1bc11bb7fc94138c6c941a73d29fa";
44   };
47 stdenv.mkDerivation rec {
48   inherit pname;
49   version  = "4.4.0";
51   src = fetchurl {
52     url = "mirror://sourceforge/${pname}/releases/${version}/${pname}_src.tar.xz";
53     hash = "sha256-Ul77OihJWIH9H6FUpibGDjqX1BY4DWDQ3bR4lRDY9+U=";
54   };
56   buildInputs = [
57     SDL2
58     libtheora
59     libvorbis
60     libopus
61     openal
62     openalSoft
63     physfs
64     miniupnpc
65     libsodium
66     curl
67     libpng
68     freetype
69     harfbuzz
70     sqlite
71   ] ++ lib.optionals (!stdenv.isDarwin) [
72     vulkan-headers
73     vulkan-loader
74   ];
76   nativeBuildInputs = [
77     pkg-config
78     cmake
79     ninja
80     p7zip
81     asciidoctor
82     gettext
83     shaderc
84   ];
86   postPatch = ''
87     substituteInPlace lib/exceptionhandler/dumpinfo.cpp \
88                       --replace '"which "' '"${which}/bin/which "'
89     substituteInPlace lib/exceptionhandler/exceptionhandler.cpp \
90                       --replace "which %s" "${which}/bin/which %s"
91     # https://github.com/Warzone2100/warzone2100/pull/3353
92     substituteInPlace lib/ivis_opengl/gfx_api_vk.cpp \
93       --replace vk::throwResultException vk::detail::throwResultException
94   '';
96   cmakeFlags = [
97     "-DWZ_DISTRIBUTOR=NixOS"
98     # The cmake builder automatically sets CMAKE_INSTALL_BINDIR to an absolute
99     # path, but this results in an error:
100     #
101     # > An absolute CMAKE_INSTALL_BINDIR path cannot be used if the following
102     # > are not also absolute paths: WZ_DATADIR
103     #
104     # WZ_DATADIR is based on CMAKE_INSTALL_DATAROOTDIR, so we set that.
105     #
106     # Alternatively, we could have set CMAKE_INSTALL_BINDIR to "bin".
107     "-DCMAKE_INSTALL_DATAROOTDIR=${placeholder "out"}/share"
108   ] ++ lib.optional stdenv.isDarwin "-P../configure_mac.cmake";
110   postInstall = lib.optionalString withVideos ''
111     cp ${sequences_src} $out/share/warzone2100/sequences.wz
112   '';
114   passthru.tests = {
115     version = testers.testVersion {
116       package = warzone2100;
117       # The command always exits with code 1
118       command = "(warzone2100 --version || [ $? -eq 1 ])";
119     };
120     nixosTest = nixosTests.warzone2100;
121   };
123   passthru.updateScript = gitUpdater {
124     url = "https://github.com/Warzone2100/warzone2100";
125   };
127   meta = with lib; {
128     description = "A free RTS game, originally developed by Pumpkin Studios";
129     longDescription = ''
130         Warzone 2100 is an open source real-time strategy and real-time tactics
131       hybrid computer game, originally developed by Pumpkin Studios and
132       published by Eidos Interactive.
133         In Warzone 2100, you command the forces of The Project in a battle to
134       rebuild the world after mankind has almost been destroyed by nuclear
135       missiles. The game offers campaign, multi-player, and single-player
136       skirmish modes. An extensive tech tree with over 400 different
137       technologies, combined with the unit design system, allows for a wide
138       variety of possible units and tactics.
139     '';
140     homepage = "https://wz2100.net";
141     license = licenses.gpl2Plus;
142     maintainers = with maintainers; [ astsmtl fgaz ];
143     platforms = platforms.all;
144     # configure_mac.cmake tries to download stuff
145     # https://github.com/Warzone2100/warzone2100/blob/master/macosx/README.md
146     broken = stdenv.isDarwin;
147   };