Toggle diff (337 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index a8142bb0f2..78b51a1c65 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1573,6 +1573,7 @@ dist_patch_DATA = \
%D%/packages/patches/libtirpc-hurd.patch \
%D%/packages/patches/libtommath-fix-linkage.patch \
%D%/packages/patches/libtommath-integer-overflow.patch \
+ %D%/packages/patches/libtorrent-rasterbar-fix-tests.patch \
%D%/packages/patches/libtool-grep-compat.patch \
%D%/packages/patches/libtool-skip-tests2.patch \
%D%/packages/patches/libtree-fix-check-non-x86.patch \
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index f9098b1a56..813636d526 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -80,6 +80,7 @@ (define-module (gnu packages bittorrent)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages ssh)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages version-control)
#:use-module (gnu packages web)
#:use-module (gnu packages xml))
@@ -416,10 +417,19 @@ (define-public mktorrent
(license (list l:public-domain ; sha1.*, used to build without OpenSSL
l:gpl2+)))) ; with permission to link with OpenSSL
+;;; The patch fixing tests contains a binary section, and regular (patches)
+;;; section cannot handle it. So collect the patches here and patch using
+;;; `git apply' in the (snippet) block.
+(define %libtorrent-rasterbar-patches
+ (list
+ (local-file
+ (assume-valid-file-name
+ (search-patch "libtorrent-rasterbar-fix-tests.patch")))))
+
(define-public libtorrent-rasterbar
(package
(name "libtorrent-rasterbar")
- (version "1.2.19")
+ (version "2.0.9")
(source
(origin
(method url-fetch)
@@ -428,7 +438,13 @@ (define-public libtorrent-rasterbar
"releases/download/v" version "/"
"libtorrent-rasterbar-" version ".tar.gz"))
(sha256
- (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))
+ (base32 "13kry578ifzz4m2f291bbd7v5v9zsi8y3mf38146cnqw0sv95kch"))
+ (modules '((guix build utils)))
+ (snippet
+ #~(begin
+ (use-modules (guix build utils))
+ (invoke (string-append #$git "/bin/git") "apply"
+ #$@%libtorrent-rasterbar-patches)))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-Dpython-bindings=ON"
@@ -485,6 +501,20 @@ (define-public libtorrent-rasterbar
desktops.")
(license l:bsd-2)))
+(define-public libtorrent-rasterbar-1.2
+ (package
+ (inherit libtorrent-rasterbar)
+ (version "1.2.19")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://github.com/arvidn/libtorrent/"
+ "releases/download/v" version "/"
+ "libtorrent-rasterbar-" version ".tar.gz"))
+ (sha256
+ (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))))
+
(define-public qbittorrent
(package
(name "qbittorrent")
@@ -506,7 +536,7 @@ (define-public qbittorrent
(list qttools-5))
(inputs
(list boost
- libtorrent-rasterbar
+ libtorrent-rasterbar-1.2
openssl
python-wrapper
qtsvg-5
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 64d8945f8e..7860c43fef 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -585,7 +585,7 @@ (define-public epour
(native-inputs
(list intltool python-distutils-extra))
(inputs
- (list libtorrent-rasterbar python-dbus python-efl python-pyxdg))
+ (list libtorrent-rasterbar-1.2 python-dbus python-efl python-pyxdg))
(home-page "https://www.enlightenment.org")
(synopsis "EFL Bittorrent client")
(description "Epour is a BitTorrent client based on the @dfn{Enlightenment
diff --git a/gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch b/gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch
new file mode 100644
index 0000000000..40e016a5fc
--- /dev/null
+++ b/gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch
@@ -0,0 +1,304 @@
+From 757a13aa68254eae5b2f4fd3bd51122d5eab0a3b Mon Sep 17 00:00:00 2001
+From: Tomas Volf <~@wolfsden.cz>
+Date: Thu, 30 Nov 2023 21:49:29 +0100
+Subject: [PATCH] libtorrent-rasterbar: Fix tests.
+
+In Guix build environment, TMPFS might be used for the build directory. If that
+happens, the test_copy_file fails, since it thinks TMPFS does not support sparse
+files (it does though).
+
+For some reason, the v2_empty_file.torrent is missing from the release
+archive (it is present in the v2.0.9 git tag). So copy it over to allow
+test_create_torrent to pass.
+
+* test/test_copy_file.cpp (fs_supports_sparse_files): Consider TMPFS a sparse
+file-system.
+* test/test_torrents/v2_empty_file.torrent: New file.
+---
+ test/test_copy_file.cpp | 1 +
+ test/test_torrents/v2_empty_file.torrent | Bin 0 -> 13529 bytes
+ 2 files changed, 1 insertion(+)
+ create mode 100644 test/test_torrents/v2_empty_file.torrent
+
+diff --git a/test/test_copy_file.cpp b/test/test_copy_file.cpp
+index b4a9761..316ec57 100644
+--- a/test/test_copy_file.cpp
++++ b/test/test_copy_file.cpp
+@@ -119,6 +119,7 @@ bool fs_supports_sparse_files()
+ using fsword_t = decltype(statfs::f_type);
+ static fsword_t const ufs = 0x00011954;
+ static const std::set<fsword_t> sparse_filesystems{
++ TMPFS_MAGIC,
+ EXT4_SUPER_MAGIC, EXT3_SUPER_MAGIC, XFS_SUPER_MAGIC, fsword_t(BTRFS_SUPER_MAGIC)
+ , ufs, REISERFS_SUPER_MAGIC
+ };
+diff --git a/test/test_torrents/v2_empty_file.torrent b/test/test_torrents/v2_empty_file.torrent
+new file mode 100644
+index 0000000000000000000000000000000000000000..6c77b9a69812435d8a272f8627782363c01fbca1
+GIT binary patch
+literal 13529
+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
+z8G(M|UB+5sC_3<v