projects/guix·blob python-team · refs

810 lines · 31.5 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <[email protected]>
3;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <[email protected]>
4;;; Copyright © 2016, 2017, 2018, 2019, 2020 Leo Famulari <[email protected]>
5;;; Copyright © 2016-2020, 2022, 2023 Efraim Flashner <[email protected]>
6;;; Copyright © 2016 Tomáš Čech <[email protected]>
7;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <[email protected]>
8;;; Copyright © 2017 Jelle Licht <[email protected]>
9;;; Copyright © 2018 Fis Trivial <[email protected]>
10;;; Copyright © 2018 Nam Nguyen <[email protected]>
11;;; Copyright © 2018, 2021 Ricardo Wurmus <[email protected]>
12;;; Copyright © 2019, 2020 Brett Gilio <[email protected]>
13;;; Copyright © 2020 Hartmut Goebel <[email protected]>
14;;; Copyright © 2021, 2026 Justin Veilleux <[email protected]>
15;;; Copyright © 2021 Marius Bakke <[email protected]>
16;;; Copyright © 2021 Josselin Poiret <[email protected]>
17;;; Copyright © 2022 Brice Waegeneire <[email protected]>
18;;; Copyright © 2022 Jacob Hart <[email protected]>
19;;; Copyright © 2022 Simon Streit <[email protected]>
20;;; Copyright © 2023 Clément Lassieur <[email protected]>
21;;; Copyright © 2024 Noisytoot <[email protected]>
22;;; Copyright © 2024 Zheng Junjie <[email protected]>
23;;; Copyright © 2025, 2026 Tomas Volf <[email protected]>
24;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
25;;; Copyright © 2025 Vinicius Monego <[email protected]>
26;;; Copyright © 2025 Junker <[email protected]>
27;;;
28;;; This file is part of GNU Guix.
29;;;
30;;; GNU Guix is free software; you can redistribute it and/or modify it
31;;; under the terms of the GNU General Public License as published by
32;;; the Free Software Foundation; either version 3 of the License, or (at
33;;; your option) any later version.
34;;;
35;;; GNU Guix is distributed in the hope that it will be useful, but
36;;; WITHOUT ANY WARRANTY; without even the implied warranty of
37;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38;;; GNU General Public License for more details.
39;;;
40;;; You should have received a copy of the GNU General Public License
41;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
42
43(define-module (gnu packages bittorrent)
44 #:use-module (gnu packages autotools)
45 #:use-module (gnu packages bash)
46 #:use-module (gnu packages boost)
47 #:use-module (gnu packages check)
48 #:use-module (gnu packages cmake)
49 #:use-module (gnu packages compression)
50 #:use-module (gnu packages cpp)
51 #:use-module (gnu packages crypto)
52 #:use-module (gnu packages curl)
53 #:use-module (gnu packages cyrus-sasl)
54 #:use-module (gnu packages dns)
55 #:use-module (gnu packages freedesktop)
56 #:use-module (gnu packages gettext)
57 #:use-module (gnu packages glib)
58 #:use-module (gnu packages gnome)
59 #:use-module (gnu packages gnupg)
60 #:use-module (gnu packages gstreamer)
61 #:use-module (gnu packages gtk)
62 #:use-module (gnu packages libevent)
63 #:use-module (gnu packages multiprecision)
64 #:use-module (gnu packages ncurses)
65 #:use-module (gnu packages nettle)
66 #:use-module (gnu packages networking)
67 #:use-module (gnu packages nss)
68 #:use-module (gnu packages perl)
69 #:use-module (gnu packages pkg-config)
70 #:use-module (gnu packages pretty-print)
71 #:use-module (gnu packages python)
72 #:use-module (gnu packages python-build)
73 #:use-module (gnu packages python-check)
74 #:use-module (gnu packages python-crypto)
75 #:use-module (gnu packages python-web)
76 #:use-module (gnu packages python-xyz)
77 #:use-module (gnu packages qt)
78 #:use-module (gnu packages serialization)
79 #:use-module (gnu packages sqlite)
80 #:use-module (gnu packages ssh)
81 #:use-module (gnu packages tls)
82 #:use-module (gnu packages upnp)
83 #:use-module (gnu packages version-control)
84 #:use-module (gnu packages web)
85 #:use-module (gnu packages xml)
86 #:use-module (gnu packages xorg)
87 #:use-module (gnu packages)
88 #:use-module (guix build-system cmake)
89 #:use-module (guix build-system glib-or-gtk)
90 #:use-module (guix build-system gnu)
91 #:use-module (guix build-system meson)
92 #:use-module (guix build-system pyproject)
93 #:use-module (guix build-system qt)
94 #:use-module (guix download)
95 #:use-module (guix gexp)
96 #:use-module (guix git-download)
97 #:use-module ((guix licenses) #:prefix license:)
98 #:use-module (guix packages)
99 #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
100 #:use-module (guix utils))
101
102(define-public transmission
103 (package
104 (name "transmission")
105 (version "4.1.3")
106 (source (origin
107 (method git-fetch)
108 (uri (git-reference
109 (url "https://github.com/transmission/transmission")
110 (commit version)
111 ;; TODO: Unbundle more available inputs, see:
112 ;; <https://codeberg.org/guix/guix/pulls/6542#issuecomment-10935599>.
113 (recursive? #t)))
114 (file-name (git-file-name name version))
115 (sha256
116 (base32
117 "0h90lpmhj30xj5fbmhxrsnw2rd3cph3ls1rcwhr4vmpyrs0kszp3"))
118 (modules '((guix build utils)))
119 (snippet
120 #~(begin
121 (for-each
122 (lambda (x)
123 (delete-file-recursively (string-append "third-party/" x)))
124 '("fast_float"
125 "fmt"
126 "libdeflate"
127 "libevent"
128 "libnatpmp"
129 "libpsl"
130 "miniupnp"))
131 (for-each
132 (lambda (x)
133 (delete-file (string-append "cmake/" x)))
134 '("FindFmt.cmake" "FindFastFloat.cmake"))))))
135 (build-system cmake-build-system)
136 (outputs '("out" ; library and command-line interface
137 "gui")) ; graphical user interface
138 (arguments
139 (list
140 #:imported-modules `((guix build glib-or-gtk-build-system)
141 ,@%cmake-build-system-modules)
142 #:modules '(((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
143 (guix build cmake-build-system)
144 (guix build utils))
145 #:phases
146 #~(modify-phases %standard-phases
147 (replace 'check
148 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
149 (if tests?
150 (invoke "ctest"
151 ;; XXX this test fails...
152 "-E" "usesBootstrapFile"
153 "-j" (if parallel-tests?
154 (number->string (parallel-job-count))
155 "1"))
156 (format #t "test suite not run~%"))))
157 (add-after 'install 'move-gui
158 (lambda* (#:key outputs #:allow-other-keys)
159 (mkdir-p (string-append #$output:gui "/bin"))
160 (mkdir-p (string-append #$output:gui "/share/man/man1"))
161 (rename-file (string-append #$output "/bin/transmission-gtk")
162 (string-append #$output:gui "/bin/transmission-gtk"))
163 (for-each
164 (lambda (dir)
165 (rename-file (string-append #$output "/share/" dir)
166 (string-append #$output:gui "/share/" dir)))
167 '("applications" "icons" "metainfo"))
168 (rename-file
169 (string-append #$output "/share/man/man1/transmission-gtk.1")
170 (string-append #$output:gui "/share/man/man1/transmission-gtk.1"))))
171 (add-after 'move-gui 'glib-or-gtk-wrap
172 (lambda* (#:key outputs #:allow-other-keys #:rest args)
173 (apply (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)
174 #:glib-or-gtk-wrap-excluded-outputs (list "out")
175 args)))
176 (add-after 'glib-or-gtk-wrap 'wrap-program
177 (lambda* (#:key inputs outputs #:allow-other-keys)
178 (glib-or-gtk:generate-gdk-pixbuf-loaders-cache
179 (map cdr inputs) (list (assoc-ref outputs "gui")))
180 (wrap-program (string-append #$output:gui "/bin/transmission-gtk")
181 ;; Wrapping GDK_PIXBUF_MODULE_FILE allows Transmission to load
182 ;; its own icons in pure environments.
183 `("GDK_PIXBUF_MODULE_FILE" =
184 (,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))
185 (inputs (list bash-minimal
186 curl
187 fast-float
188 fmt-12
189 (list glib "bin")
190 gtkmm
191 libappindicator
192 libdeflate
193 libevent
194 libnatpmp
195 libpsl
196 miniupnpc
197 openssl
198 python
199 zlib))
200 (native-inputs
201 (list intltool pkg-config))
202 (home-page "https://transmissionbt.com/")
203 (synopsis "BitTorrent client")
204 (description
205 "Transmission is a BitTorrent client that comes with graphical,
206textual, and Web user interfaces. Transmission also has a daemon for
207unattended operations. It supports local peer discovery, full encryption,
208DHT, µTP, PEX and Magnet Links.")
209
210 ;; COPYING reads:
211 ;;
212 ;; Transmission can be redistributed and/or modified under the terms of
213 ;; the GNU GPLv2 (http://www.gnu.org/licenses/license-list.html#GPLv2),
214 ;; the GNU GPLv3 (http://www.gnu.org/licenses/license-list.html#GNUGPLv3),
215 ;; or any future license endorsed by Mnemosyne LLC.
216 ;;
217 ;; A few files files carry an MIT/X11 license header.
218 (license (list license:gpl2 license:gpl3))))
219
220(define-public transmission-remote-gtk
221 (package
222 (name "transmission-remote-gtk")
223 (version "1.7.0")
224 (source
225 (origin
226 (method git-fetch)
227 (uri
228 (git-reference
229 (url
230 "https://github.com/transmission-remote-gtk/transmission-remote-gtk")
231 (commit version)))
232 (file-name (git-file-name name version))
233 (sha256
234 (base32 "19m0jksx4klf5h9b7ici2dsdkbsrj24nj4y2iysrl5zc3sh3kii3"))))
235 (build-system meson-build-system)
236 (native-inputs (list `(,glib "bin") ;glib-compile-resources
237 gettext-minimal
238 gsettings-desktop-schemas
239 perl ;pod2man
240 pkg-config))
241 (inputs (list gtk+ json-glib libappindicator libsoup))
242 (arguments (list #:tests? #f ;Tests require network access.
243 #:glib-or-gtk? #t))
244 (synopsis "Gtk frontend to the Transmission daemon")
245 (description "transmission-remote-gtk is a GTK client for remote management
246of the Transmission BitTorrent client, using its HTTP RPC protocol.")
247 (home-page "https://github.com/transmission-remote-gtk/transmission-remote-gtk")
248 (license license:gpl2+)))
249
250(define-public stig
251 (package
252 (name "stig")
253 (version "0.14.2a0")
254 (source
255 (origin
256 (method git-fetch)
257 (uri (git-reference
258 (url "https://github.com/rndusr/stig")
259 (commit (string-append "v" version))))
260 (file-name (git-file-name name version))
261 (sha256
262 (base32 "0gwq5ikwqc4h3r3yndpyqzpmjvxlkpb2ibif32kh3f92q5xxnzl3"))))
263 (build-system pyproject-build-system)
264 (arguments
265 (list
266 ;; Tests are broken, see <https://github.com/rndusr/stig/issues/206>.
267 #:tests? #f
268 #:phases
269 #~(modify-phases %standard-phases
270 (add-after 'unpack 'use-default-asyncio
271 ;; async_timeout is deprecated, upstream recommends to use
272 ;; asyncio, available since Python 3.11.
273 (lambda _
274 (substitute* "stig/client/aiotransmission/rpc.py"
275 (("async_timeout") "asyncio"))
276 (substitute* "stig/client/utils.py"
277 (("from async_timeout import timeout as async_timeout")
278 "asyncio")
279 (("async_timeout") "asyncio.timeout"))))
280 (add-after 'unpack 'relax-requirements
281 (lambda _
282 (substitute* "setup.py"
283 (("urwidtrees==1\\.0\\.3") "urwidtrees>=1.0.3")
284 (("aiohttp==3\\.\\*") "aiohttp>=3.13.5")
285 ;; It's a part of Python 3.11+.
286 (("'async_timeout',") "")))))))
287 (native-inputs
288 (list python-setuptools))
289 (inputs
290 (list python-aiohttp
291 python-aiohttp-socks
292 python-blinker
293 python-natsort
294 python-pyxdg
295 python-setproctitle
296 python-urwid
297 python-urwidtrees
298 python-wcwidth))
299 (synopsis "TUI and CLI for the BitTorrent client Transmission")
300 (description
301 "Stig is a @acronym{TUI, Text User Interface} and @acronym{CLI, Command
302Line Interface} client for the BitTorrent client Transmission.")
303 (home-page "https://github.com/rndusr/stig")
304 (license license:gpl3)))
305
306(define-public libtorrent
307 (package
308 (name "libtorrent")
309 (version "0.16.14")
310 (source (origin
311 (method git-fetch)
312 (uri (git-reference
313 (url "https://github.com/rakshasa/libtorrent/")
314 (commit (string-append "v" version))))
315 (file-name (git-file-name name version))
316 (sha256
317 (base32
318 "04jv8vix3izg7mwr07ngagghb0x46cvz8pnja6i0ifhk7c2mhfq7"))))
319 (build-system gnu-build-system)
320 (inputs (list curl openssl zlib))
321 (native-inputs (list autoconf automake cppunit libtool pkg-config))
322 (synopsis "BitTorrent library of rtorrent")
323 (description
324 "LibTorrent is a BitTorrent library used by and developed in parallel
325with the BitTorrent client rtorrent. It is written in C++ with emphasis on
326speed and efficiency.")
327 (home-page "https://github.com/rakshasa/libtorrent")
328 (license license:gpl2+)))
329
330(define-public rtorrent
331 (package
332 (name "rtorrent")
333 (version "0.16.14")
334 (source (origin
335 (method git-fetch)
336 (uri (git-reference
337 (url "https://github.com/rakshasa/rtorrent/")
338 (commit (string-append "v" version))))
339 (file-name (git-file-name name version))
340 (sha256
341 (base32
342 "0l032679ga5w40285yjh2crglw6qbmp4wzarbqdshb629njs4b2p"))))
343 (build-system gnu-build-system)
344 (arguments (list #:configure-flags #~(list "--with-xmlrpc-tinyxml2")))
345 (inputs
346 (list libtorrent
347 ncurses
348 curl
349 cyrus-sasl
350 openssl
351 tinyxml2
352 zlib))
353 (native-inputs (list autoconf automake cppunit libtool pkg-config))
354 (synopsis "BitTorrent client with ncurses interface")
355 (description
356 "rTorrent is a BitTorrent client with an ncurses interface. It supports
357full encryption, DHT, PEX, and Magnet Links. It can also be controlled via
358XML-RPC over SCGI.")
359 (home-page "https://github.com/rakshasa/rtorrent")
360 (license license:gpl2+)))
361
362(define-public tremc
363 (package
364 (name "tremc")
365 (version "0.9.6")
366 (source
367 (origin
368 (method git-fetch)
369 (uri (git-reference
370 (url "https://github.com/tremc/tremc")
371 (commit version)))
372 (sha256
373 (base32
374 "0bvw9lcl256mzqlga7vhbhk3p5faq9681d3yyw7xnczpvv3kbd0r"))))
375 (build-system gnu-build-system)
376 (arguments
377 `(#:tests? #f ; no test suite
378 #:make-flags
379 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
380 #:phases
381 (modify-phases %standard-phases
382 ;; The software is just a Python script that must be copied into place.
383 (delete 'configure)
384 (delete 'build))))
385 (inputs
386 (list python))
387 (synopsis "Console client for the Transmission BitTorrent daemon")
388 (description "Tremc is a console client, with a curses interface, for the
389Transmission BitTorrent daemon.")
390 (home-page "https://github.com/tremc/tremc")
391 (license license:gpl3+)))
392
393(define-public aria2
394 (package
395 (name "aria2")
396 (version "1.37.0")
397 (source (origin
398 (method git-fetch)
399 (uri (git-reference
400 (url "https://github.com/aria2/aria2")
401 (commit (string-append "release-" version))))
402 (sha256
403 (base32
404 "1yr9yxr7z3bdg51afpzj0i63xl2rdk1prl20qws21y6r1x58vf65"))
405 (file-name (git-file-name name version))
406 (patches (search-patches "aria2-unbundle-wslay.patch"))
407 (snippet
408 #~(begin (use-modules (guix build utils))
409 (delete-file-recursively "deps")))))
410 (build-system gnu-build-system)
411 (arguments
412 (list
413 #:configure-flags
414 #~(list "--enable-libaria2"
415 (string-append "--with-bashcompletiondir="
416 #$output "/etc/bash_completion.d/"))
417 #:phases
418 #~(modify-phases %standard-phases
419 (add-after 'unpack 'update-gettext-version
420 (lambda _
421 (substitute* "configure.ac"
422 (("AM_GNU_GETTEXT_VERSION\\(.*\\)")
423 (format #f "AM_GNU_GETTEXT_VERSION([~a])"
424 #$(package-version (this-package-native-input
425 "gettext-minimal")))))))
426 (add-after 'unpack 'delete-socket-tests
427 (lambda _
428 (substitute* "test/LpdMessageDispatcherTest.cc"
429 (("CPPUNIT_TEST_SUITE_REGISTRATION\\(LpdMessageDispatcherTest\\);" text)
430 (string-append "// " text)))
431 (substitute* "test/LpdMessageReceiverTest.cc"
432 (("CPPUNIT_TEST_SUITE_REGISTRATION\\(LpdMessageReceiverTest\\);" text)
433 (string-append "// " text))))))))
434 (native-inputs
435 (list autoconf ; since we adjusted configure.ac
436 automake
437 gettext-minimal
438 libtool
439 cppunit ; for the tests
440 pkg-config))
441 (inputs
442 (list c-ares
443 gnutls
444 gmp
445 libssh2
446 libxml2
447 nettle
448 sqlite
449 wslay
450 zlib))
451 (home-page "https://aria2.github.io/")
452 (synopsis "Utility for parallel downloading files")
453 (description
454 "Aria2 is a lightweight, multi-protocol & multi-source command-line
455download utility. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.
456Aria2 can be manipulated via built-in JSON-RPC and XML-RPC interfaces.")
457 (license license:gpl2+)))
458
459(define-public uget
460 (package
461 (name "uget")
462 (version "2.2.1")
463 (source
464 (origin
465 (method url-fetch)
466 (uri (string-append "mirror://sourceforge/urlget/"
467 "uget%20%28stable%29/" version "/uget-"
468 version ".tar.gz"))
469 (sha256
470 (base32 "0dlrjhnm1pg2vwmp7nl2xv1aia5hyirb3021rl46x859k63zap24"))))
471 (build-system gnu-build-system)
472 (arguments
473 `(#:configure-flags '("CFLAGS=-fcommon")))
474 (inputs
475 (list curl
476 gtk+
477 glib
478 gnutls
479 gstreamer
480 libgcrypt
481 libnotify
482 openssl))
483 (native-inputs
484 (list intltool pkg-config))
485 (home-page "https://ugetdm.com/")
486 (synopsis "Universal download manager with GTK+ interface")
487 (description
488 "uGet is portable download manager with GTK+ interface supporting
489HTTP, HTTPS, BitTorrent and Metalink, supporting multi-connection
490downloads, download scheduling, download rate limiting.")
491 (license license:lgpl2.1+)))
492
493(define-public mktorrent
494 (package
495 (name "mktorrent")
496 (version "1.1")
497 (source (origin
498 (method git-fetch)
499 (uri (git-reference
500 (url "https://github.com/Rudde/mktorrent")
501 (commit (string-append "v" version))))
502 (file-name (git-file-name name version))
503 (sha256
504 (base32
505 "17pdc5mandl739f8q26n5is8ga56s83aqcrwhlnnplbxwx2inidr"))))
506 (build-system gnu-build-system)
507 (arguments
508 `(#:phases (modify-phases %standard-phases
509 (delete 'configure)) ; no configure script
510 #:make-flags (list (string-append "CC=" ,(cc-for-target))
511 (string-append "PREFIX=" (assoc-ref %outputs "out"))
512 "NO_HASH_CHECK=1"
513 "USE_LARGE_FILES=1"
514 "USE_LONG_OPTIONS=1"
515 "USE_PTHREADS=1")
516 #:tests? #f)) ; no tests
517 (home-page "https://github.com/Rudde/mktorrent")
518 (synopsis "Utility to create BitTorrent metainfo files")
519 (description
520 "mktorrent is a simple command-line utility to create BitTorrent
521@dfn{metainfo} files, often known simply as @dfn{torrents}, from both single
522files and whole directories. It can add multiple trackers and web seed URLs,
523and set the @code{private} flag to disallow advertisement through the
524distributed hash table (@dfn{DHT}) and Peer Exchange. Hashing is multi-threaded
525and will take advantage of multiple processor cores where possible.")
526 (license (list license:public-domain ; sha1.*, used to build without OpenSSL
527 license:gpl2+)))) ; with permission to link with OpenSSL
528
529(define-public libtorrent-rasterbar
530 (package
531 (name "libtorrent-rasterbar")
532 (version "2.1.2")
533 (source
534 ;; TODO: use git-fetch and deal with recursive git modules.
535 (origin
536 (method url-fetch)
537 (uri
538 (string-append "https://github.com/arvidn/libtorrent/"
539 "releases/download/v" version "/"
540 "libtorrent-rasterbar-" version ".tar.gz"))
541 (sha256
542 (base32 "1g2d6g8bwb5jsminpj0pnb6yjk4i3wzpvb3cxr4rw6ypkinm8qik"))))
543 (build-system cmake-build-system)
544 (arguments
545 (list
546 #:configure-flags
547 #~(list "-Dpython-bindings=ON"
548 "-Dbuild_tests=ON"
549 ;; INFO: webtorrent support significantly widens the attack
550 ;; surface of libtorrent. Let's disable it.
551 ;; See: <https://github.com/arvidn/libtorrent/discussions/8570>
552 "-Dwebtorrent=OFF")
553 ;; Tests are flaky when executed in parallel.
554 #:parallel-tests? #f
555 #:phases
556 #~(modify-phases %standard-phases
557 (replace 'check
558 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
559 (let* ((disabled-tests
560 ;; INFO: These tests require network.
561 (list "test_rtc"
562 "test_tracker"
563 "test_upnp"
564 "test_webtorrent_transfer"))
565 (exclude-regex
566 (string-append "^("
567 (string-join disabled-tests "|")
568 ")$"))
569 (jobs (if parallel-tests?
570 (number->string (parallel-job-count))
571 "1")))
572 (when tests?
573 (invoke "ctest"
574 "-E" exclude-regex
575 "-j" jobs
576 "--output-on-failure"))))))))
577 (inputs (list boost-1.83 openssl))
578 (native-inputs
579 (list libfaketime
580 pkg-config
581 python-setuptools
582 python-wrapper))
583 (home-page "https://www.libtorrent.org/")
584 (synopsis "Feature-complete BitTorrent implementation")
585 (description
586 "libtorrent-rasterbar is a feature-complete C++ BitTorrent implementation
587focusing on efficiency and scalability. It runs on embedded devices as well as
588desktops.")
589 (license license:bsd-2)))
590
591(define-public libtorrent-rasterbar-2.0
592 (package/inherit libtorrent-rasterbar
593 (name "libtorrent-rasterbar")
594 (version "2.0.15")
595 (source
596 (origin
597 (method url-fetch)
598 (uri
599 (string-append "https://github.com/arvidn/libtorrent/"
600 "releases/download/v" version "/"
601 "libtorrent-rasterbar-" version ".tar.gz"))
602 (sha256
603 (base32 "00mv4ygv41b71w804m9vfgyx70xgb8mw6r0if94fmdr3k097jbjy"))))
604 (arguments
605 (substitute-keyword-arguments arguments
606 ((#:configure-flags flags)
607 #~(list "-Dpython-bindings=ON"
608 "-Dbuild_tests=ON"))
609 ((#:phases phases)
610 #~(modify-phases #$phases
611 (replace 'check
612 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
613 (let* ((disabled-tests
614 (list
615 ;; INFO: This test requires non-localhost IPv4
616 ;; interface.
617 "test_upnp"))
618 (exclude-regex
619 (string-append "^("
620 (string-join disabled-tests "|")
621 ")$"))
622 (jobs (if parallel-tests?
623 (number->string (parallel-job-count))
624 "1")))
625 (when tests?
626 (invoke "ctest"
627 "-E" exclude-regex
628 "-j" jobs
629 "--output-on-failure")))))))))))
630
631(define-public qbittorrent
632 (package
633 (name "qbittorrent")
634 (version "5.2.3")
635 (source
636 (origin
637 (method git-fetch)
638 (uri (git-reference
639 (url "https://github.com/qbittorrent/qBittorrent")
640 (commit (string-append "release-" version))))
641 (file-name (git-file-name name version))
642 (sha256
643 (base32 "01hid15dzbw3gcha7n0sj1rc8l1pviycdjmqnplfk8yml6l2g9ib"))))
644 (build-system qt-build-system)
645 (arguments
646 (list
647 #:qtbase qtbase
648 #:configure-flags
649 #~(list "-DTESTING=ON")
650 #:phases
651 #~(modify-phases %standard-phases
652 (replace 'check
653 (lambda* (#:rest args)
654 ;; Fix for "enable_testing" not in the top-level directory.
655 (with-directory-excursion "test"
656 (apply (assoc-ref %standard-phases 'check) args)))))))
657 (native-inputs
658 (list qttools))
659 (inputs
660 (list boost
661 libtorrent-rasterbar-2.0
662 openssl
663 python-wrapper
664 qtsvg
665 zlib))
666 (home-page "https://www.qbittorrent.org/")
667 (synopsis "Graphical BitTorrent client")
668 (description
669 "qBittorrent is a BitTorrent client programmed in C++/Qt that uses
670libtorrent (sometimes called libtorrent-rasterbar) by Arvid Norberg.
671
672It aims to be a good alternative to all other BitTorrent clients out there.
673qBittorrent is fast, stable and provides unicode support as well as many
674features.")
675 (license license:gpl2+)))
676
677(define-public qbittorrent-no-x
678 (let ((base qbittorrent))
679 (package
680 (inherit base)
681 (name "qbittorrent-no-x")
682 (arguments
683 (substitute-keyword-arguments arguments
684 ((#:configure-flags configure-flags)
685 #~(cons "-DGUI=OFF" #$configure-flags))))
686 (inputs
687 (modify-inputs inputs
688 (delete "qtsvg"))))))
689
690(define-public qbittorrent-enhanced
691 (package
692 (inherit qbittorrent)
693 (name "qbittorrent-enhanced")
694 (version "5.2.3.10")
695 (source
696 (origin
697 (method git-fetch)
698 (uri (git-reference
699 (url "https://github.com/c0re100/qBittorrent-Enhanced-Edition")
700 (commit (string-append "release-" version))))
701 (file-name (git-file-name name version))
702 (sha256
703 (base32 "1lakv5wah6n3qw6pyy7vm2xkjdlm81ssi4k7h744r40yhj4jdc3y"))))
704 (home-page "https://github.com/c0re100/qBittorrent-Enhanced-Edition")
705 (description
706 "qBittorrent Enhanced is a bittorrent client based on qBittorrent with
707the following features:
708
709@itemize
710@item Auto Ban Xunlei, QQ, Baidu, Xfplay, DLBT and Offline downloader
711@item Auto Ban Unknown Peer from China Option (Default: OFF)
712@item Auto Update Public Trackers List (Default: OFF)
713@item Auto Ban BitTorrent Media Player Peer Option (Default: OFF)
714@item Peer whitelist/blacklist
715@end itemize")))
716
717(define-public qbittorrent-enhanced-no-x
718 (package
719 (inherit qbittorrent-enhanced)
720 (name "qbittorrent-enhanced-no-x")
721 (arguments (package-arguments qbittorrent-no-x))
722 (inputs (package-inputs qbittorrent-no-x))))
723
724(define-public deluge
725 (package
726 (name "deluge")
727 (version "2.2.0")
728 (source
729 (origin
730 (method url-fetch)
731 (uri (string-append
732 "https://ftp.osuosl.org/pub/deluge/source/"
733 (version-major+minor version) "/deluge-" version ".tar.xz"))
734 (sha256
735 (base32
736 "1kbac1qjbddcib0bldqaf0dcq5mqi9i2jv2fd4fayam4bcmjgfmr"))))
737 (build-system pyproject-build-system)
738 (inputs (list bash-minimal
739 gtk+
740 libtorrent-rasterbar-2.0
741 nss-certs
742 python-pycairo
743 python-chardet
744 python-dbus-1.2
745 python-mako
746 python-pygobject-3.50
747 python-pillow
748 python-pyopenssl
749 python-pyxdg
750 python-rencode
751 python-service-identity
752 python-setproctitle
753 python-twisted
754 python-zope-interface))
755 (native-inputs
756 (list intltool
757 python-pytest
758 python-pytest-twisted
759 python-setuptools
760 python-wheel
761 xorg-server-for-tests))
762 (native-search-paths
763 (list $SSL_CERT_DIR
764 $SSL_CERT_FILE))
765 (arguments
766 (list
767 #:test-flags
768 #~(list "-m" "not internet and not slow" ;; Ignore these markers.
769 "-k" (string-append "not "
770 (string-join
771 ;; Tests below require a running daemon.
772 (list "TestClient"
773 "TestJSON"
774 "TestJSONCustomUserCase"
775 "TestRPCRaiseDelugeErrorJSON"
776 "TestConsoleScriptEntryWithDaemon"
777 ;; These need a connection.
778 "TestWebAPI"
779 "TestWebServer"
780 ;; These failed with AssertionError.
781 "test_is_interface_name"
782 "test_is_interface")
783 " and not ")))
784 #:phases
785 #~(modify-phases %standard-phases
786 (add-before 'check 'pre-check
787 (lambda _
788 ;; Setup X server for tests and a writable HOME.
789 (system "Xvfb &")
790 (setenv "DISPLAY" ":0")
791 (setenv "HOME" "/tmp")))
792 (add-before 'wrap 'wrap-deluge
793 (lambda _
794 (for-each
795 (lambda (program)
796 (wrap-program program
797 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))))
798 (map (lambda (name)
799 (string-append #$output "/bin/" name))
800 (list "deluge" "deluge-gtk"))))))))
801 (home-page "https://www.deluge-torrent.org/")
802 (synopsis "Fully-featured cross-platform ​BitTorrent client")
803 (description
804 "Deluge contains the common features to BitTorrent clients such as
805Protocol Encryption, DHT, Local Peer Discovery (LSD), Peer Exchange
806(PEX), UPnP, NAT-PMP, Proxy support, Web seeds, global and per-torrent
807speed limits. Deluge heavily utilises the ​libtorrent library. It is
808designed to run as both a normal standalone desktop application and as a
809​client-server.")
810 (license license:gpl3+)))