fluffychat: 1.22.1 -> 1.23.0 (#364091)
[NixPkgs.git] / pkgs / by-name / tr / transmission_3 / package.nix
blobbfe4b98aa2f133cd0b87c867928e092fa9e78d76
2   stdenv,
3   lib,
4   fetchFromGitHub,
5   cmake,
6   pkg-config,
7   openssl,
8   curl,
9   libevent,
10   inotify-tools,
11   systemd,
12   zlib,
13   pcre,
14   libb64,
15   libutp,
16   miniupnpc,
17   dht,
18   libnatpmp,
19   libiconv,
20   # Build options
21   enableGTK3 ? false,
22   gtk3,
23   xorg,
24   wrapGAppsHook3,
25   enableQt ? false,
26   qt5,
27   nixosTests,
28   enableSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd,
29   enableDaemon ? true,
30   enableCli ? true,
31   installLib ? false,
32   apparmorRulesFromClosure,
35 stdenv.mkDerivation (finalAttrs: {
36   pname = "transmission";
37   version = "3.00";
39   src = fetchFromGitHub {
40     owner = "transmission";
41     repo = "transmission";
42     rev = finalAttrs.version;
43     hash = "sha256-n4iEDt9AstDZPZXN47p13brNLbNWS3BTB+A4UuoEjzE=";
44     fetchSubmodules = true;
45   };
47   patches = [
48     # fix build with openssl 3.0
49     ./transmission-3.00-openssl-3.patch
50     # fix build with miniupnpc 2.2.8
51     ./transmission-3.00-miniupnpc-2.2.8.patch
52   ];
54   outputs = [
55     "out"
56     "apparmor"
57   ];
59   cmakeFlags =
60     let
61       mkFlag = opt: if opt then "ON" else "OFF";
62     in
63     [
64       "-DENABLE_MAC=OFF" # requires xcodebuild
65       "-DENABLE_GTK=${mkFlag enableGTK3}"
66       "-DENABLE_QT=${mkFlag enableQt}"
67       "-DENABLE_DAEMON=${mkFlag enableDaemon}"
68       "-DENABLE_CLI=${mkFlag enableCli}"
69       "-DINSTALL_LIB=${mkFlag installLib}"
70     ];
72   nativeBuildInputs =
73     [
74       pkg-config
75       cmake
76     ]
77     ++ lib.optionals enableGTK3 [ wrapGAppsHook3 ]
78     ++ lib.optionals enableQt [ qt5.wrapQtAppsHook ];
80   buildInputs =
81     [
82       openssl
83       curl
84       libevent
85       zlib
86       pcre
87       libb64
88       libutp
89       miniupnpc
90       dht
91       libnatpmp
92     ]
93     ++ lib.optionals enableQt [
94       qt5.qttools
95       qt5.qtbase
96     ]
97     ++ lib.optionals enableGTK3 [
98       gtk3
99       xorg.libpthreadstubs
100     ]
101     ++ lib.optionals enableSystemd [ systemd ]
102     ++ lib.optionals stdenv.hostPlatform.isLinux [ inotify-tools ]
103     ++ lib.optionals stdenv.hostPlatform.isDarwin [ libiconv ];
105   postInstall = ''
106     mkdir $apparmor
107     cat >$apparmor/bin.transmission-daemon <<EOF
108     include <tunables/global>
109     $out/bin/transmission-daemon {
110       include <abstractions/base>
111       include <abstractions/nameservice>
112       include <abstractions/ssl_certs>
113       include "${
114         apparmorRulesFromClosure { name = "transmission-daemon"; } (
115           [
116             curl
117             libevent
118             openssl
119             pcre
120             zlib
121             libnatpmp
122             miniupnpc
123           ]
124           ++ lib.optionals enableSystemd [ systemd ]
125           ++ lib.optionals stdenv.hostPlatform.isLinux [ inotify-tools ]
126         )
127       }"
128       r @{PROC}/sys/kernel/random/uuid,
129       r @{PROC}/sys/vm/overcommit_memory,
130       r @{PROC}/@{pid}/environ,
131       r @{PROC}/@{pid}/mounts,
132       rwk /tmp/tr_session_id_*,
134       r $out/share/transmission/web/**,
136       include <local/bin.transmission-daemon>
137     }
138     EOF
139   '';
141   passthru.tests = {
142     apparmor = nixosTests.transmission_3; # starts the service with apparmor enabled
143     smoke-test = nixosTests.bittorrent;
144   };
146   meta = {
147     description = "Fast, easy and free BitTorrent client (deprecated version 3)";
148     mainProgram =
149       if enableQt then
150         "transmission-qt"
151       else if enableGTK3 then
152         "transmission-gtk"
153       else
154         "transmission-cli";
155     longDescription = ''
156       Transmission is a BitTorrent client which features a simple interface
157       on top of a cross-platform back-end.
158       Feature spotlight:
159         * Uses fewer resources than other clients
160         * Native Mac, GTK and Qt GUI clients
161         * Daemon ideal for servers, embedded systems, and headless use
162         * All these can be remote controlled by Web and Terminal clients
163         * Bluetack (PeerGuardian) blocklists with automatic updates
164         * Full encryption, DHT, and PEX support
165     '';
166     homepage = "http://www.transmissionbt.com/";
167     license = lib.licenses.gpl2Plus; # parts are under MIT
168     maintainers = with lib.maintainers; [ astsmtl ];
169     platforms = lib.platforms.unix;
170   };