python312Packages.yoda: 2.0.1 -> 2.0.2
[NixPkgs.git] / pkgs / applications / graphics / drawpile / default.nix
blobad76e0e92b7ccdeea1c3321f890c51437c2dad2e
1 { stdenv
2 , lib
3 , mkDerivation
4 , fetchFromGitHub
5 , cargo
6 , extra-cmake-modules
7 , rustc
8 , rustPlatform
10 # common deps
11 , karchive
12 , qtwebsockets
14 # client deps
15 , qtbase
16 , qtkeychain
17 , qtmultimedia
18 , qtsvg
19 , qttools
20 , libsecret
22 # optional client deps
23 , giflib
24 , kdnssd
25 , libvpx
26 , miniupnpc
28 # optional server deps
29 , libmicrohttpd
30 , libsodium
31 , withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
32 , systemd ? null
34 # options
35 , buildClient ? true
36 , buildServer ? true
37 , buildServerGui ? true # if false builds a headless server
38 , buildExtraTools ? false
41 assert lib.assertMsg (buildClient || buildServer || buildExtraTools)
42   "You must specify at least one of buildClient, buildServer, or buildExtraTools.";
44 let
45   clientDeps = [
46     qtbase
47     qtkeychain
48     qtmultimedia
49     qtsvg
50     qttools
51     libsecret
52     # optional:
53     giflib # gif animation export support
54     kdnssd # local server discovery with Zeroconf
55     libvpx # WebM video export
56     miniupnpc # automatic port forwarding
57   ];
59   serverDeps = [
60     # optional:
61     libmicrohttpd # HTTP admin api
62     libsodium # ext-auth support
63   ] ++ lib.optional withSystemd systemd;
65 in mkDerivation rec {
66   pname = "drawpile";
67   version = "2.2.1";
69   src = fetchFromGitHub {
70     owner = "drawpile";
71     repo = "drawpile";
72     rev = version;
73     sha256 = "sha256-NS1aQlWpn3f+SW0oUjlYwHtOS9ZgbjFTrE9grjK5REM=";
74   };
76   cargoDeps = rustPlatform.fetchCargoTarball {
77     inherit src;
78     hash = "sha256-V36yiwraXK7qlJd1r8EtEA4ULxlgvMEmpn/ka3m9GjA=";
79   };
81   nativeBuildInputs = [
82     cargo
83     extra-cmake-modules
84     rustc
85     rustPlatform.cargoSetupHook
86   ];
88   buildInputs = [
89     karchive
90     qtwebsockets
91   ]
92   ++ lib.optionals buildClient clientDeps
93   ++ lib.optionals buildServer serverDeps;
95   cmakeFlags = [
96     (lib.cmakeFeature "INITSYS" (lib.optionalString withSystemd "systemd"))
97     (lib.cmakeBool "CLIENT" buildClient)
98     (lib.cmakeBool "SERVER" buildServer)
99     (lib.cmakeBool "SERVERGUI" buildServerGui)
100     (lib.cmakeBool "TOOLS" buildExtraTools)
101   ];
103   meta = {
104     description = "Collaborative drawing program that allows multiple users to sketch on the same canvas simultaneously";
105     homepage = "https://drawpile.net/";
106     downloadPage = "https://drawpile.net/download/";
107     license = lib.licenses.gpl3Plus;
108     maintainers = with lib.maintainers; [ fgaz ];
109     platforms = lib.platforms.unix;
110     broken = stdenv.hostPlatform.isDarwin;
111   } // lib.optionalAttrs buildServer {
112     mainProgram = "drawpile-srv";
113   } // lib.optionalAttrs buildClient {
114     mainProgram = "drawpile";
115   };