From 13a058bed6c02218b2a353a27b56417a3eac0bd4 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sun, 4 May 2025 15:21:06 -0700 Subject: [PATCH] libtorrent: update to 0.15.3 Add patch to allow rtorrent to link statically. Aligned is no longer needed with C++17. Signed-off-by: Rosen Penev --- libs/libtorrent/Makefile | 17 +++-- .../0001-pkgconfig-fix-static-linking.patch | 25 +++++++ ...0-add-support-for-external-libatomic.patch | 74 +++++++++++++++++++ libs/libtorrent/patches/010-usleep.patch | 54 -------------- net/rtorrent/patches/130-usleep.patch | 31 -------- 5 files changed, 108 insertions(+), 93 deletions(-) create mode 100644 libs/libtorrent/patches/0001-pkgconfig-fix-static-linking.patch create mode 100644 libs/libtorrent/patches/010-add-support-for-external-libatomic.patch delete mode 100644 libs/libtorrent/patches/010-usleep.patch delete mode 100644 net/rtorrent/patches/130-usleep.patch diff --git a/libs/libtorrent/Makefile b/libs/libtorrent/Makefile index 1116181209..227fae0c5c 100644 --- a/libs/libtorrent/Makefile +++ b/libs/libtorrent/Makefile @@ -8,12 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libtorrent -PKG_VERSION:=0.13.8 -PKG_RELEASE:=2 +PKG_VERSION:=0.15.3 +PKG_RELEASE:=1 -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/rakshasa/libtorrent/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=0f6c2e7ffd3a1723ab47fdac785ec40f85c0a5b5a42c1d002272205b988be722 +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/rakshasa/libtorrent +PKG_SOURCE_VERSION:=v$(PKG_VERSION) +PKG_MIRROR_HASH:=186058e4a965457b67d7190c1d35e1acd26d273632ca768f394be6785b433d32 PKG_MAINTAINER:=Rosen Penev PKG_LICENSE:=GPL-2.0-or-later @@ -45,15 +46,15 @@ endef CONFIGURE_ARGS += \ --enable-shared \ --enable-static \ - --enable-aligned \ - --enable-openssl \ + --disable-aligned \ --disable-debug \ --disable-instrumentation \ --with-epoll \ --with-zlib=$(STAGING_DIR)/usr \ --without-kqueue -TARGET_CXXFLAGS += -faligned-new +CONFIGURE_VARS = \ + ax_cv_cxx_compile_cxx17=yes define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include diff --git a/libs/libtorrent/patches/0001-pkgconfig-fix-static-linking.patch b/libs/libtorrent/patches/0001-pkgconfig-fix-static-linking.patch new file mode 100644 index 0000000000..b08c37991b --- /dev/null +++ b/libs/libtorrent/patches/0001-pkgconfig-fix-static-linking.patch @@ -0,0 +1,25 @@ +From 3f8bc12fe33bac4b063a6284af0f0ff7b53ac9b7 Mon Sep 17 00:00:00 2001 +From: Rosen Penev +Date: Sun, 4 May 2025 17:08:34 -0700 +Subject: [PATCH] pkgconfig: fix static linking + +A link to libcrypto and pthread are missing, which shows up when trying +to link a static libtorrent with rtorrent. The latter being an issue +with older platforms that don't have pthread stuff in libc. + +Signed-off-by: Rosen Penev +--- + libtorrent.pc.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/libtorrent.pc.in ++++ b/libtorrent.pc.in +@@ -6,6 +6,6 @@ includedir=@includedir@ + Name: libtorrent + Description: A BitTorrent library + Version: @VERSION@ +-Libs: -L${libdir} -ltorrent +-Libs.Private: -lz ++Requires: zlib, libcrypto ++Libs: -L${libdir} -ltorrent @ATOMIC_LIBS@ + Cflags: -I${includedir} diff --git a/libs/libtorrent/patches/010-add-support-for-external-libatomic.patch b/libs/libtorrent/patches/010-add-support-for-external-libatomic.patch new file mode 100644 index 0000000000..c0aac71749 --- /dev/null +++ b/libs/libtorrent/patches/010-add-support-for-external-libatomic.patch @@ -0,0 +1,74 @@ +From a7da5a3981d8fd2fadc5146da4ab5ad33de5482e Mon Sep 17 00:00:00 2001 +From: Rosen Penev +Date: Tue, 6 May 2025 13:53:04 -0700 +Subject: [PATCH] add support for external libatomic + +Needed on some 32-bit platforms where 64-bit atomics are provided by +libatomic. + +Signed-off-by: Rosen Penev +--- + configure.ac | 3 ++- + scripts/check_atomic.m4 | 46 +++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 49 insertions(+), 1 deletion(-) + create mode 100644 scripts/check_atomic.m4 + +--- a/configure.ac ++++ b/configure.ac +@@ -79,13 +79,14 @@ AC_ARG_ENABLE(execinfo, + ]) + + AX_PTHREAD ++CHECK_ATOMIC + + PKG_CHECK_MODULES([CPPUNIT], [cppunit],, [no_cppunit="yes"]) + PKG_CHECK_MODULES([ZLIB], [zlib]) + + CFLAGS="$PTHREAD_CFLAGS $ZLIB_CFLAGS $CFLAGS" + CXXFLAGS="$PTHREAD_CFLAGS $ZLIB_CFLAGS $CXXFLAGS" +-LIBS="$PTHREAD_LIBS $ZLIB_LIBS $LIBS" ++LIBS="$ATOMIC_LIBS $PTHREAD_LIBS $ZLIB_LIBS $LIBS" + + TORRENT_CHECK_OPENSSL + +--- /dev/null ++++ b/scripts/check_atomic.m4 +@@ -0,0 +1,38 @@ ++# Some versions of gcc/libstdc++ require linking with -latomic if ++# using the C++ atomic library. ++ ++# Copyright (c) 2015-2016 Tim Kosse ++ ++# Copying and distribution of this file, with or without modification, are ++# permitted in any medium without royalty provided the copyright notice ++# and this notice are preserved. This file is offered as-is, without any ++# warranty. ++ ++m4_define([_CHECK_ATOMIC_testbody], [[ ++ #include ++ #include ++ ++ int main() { ++ std::atomic a{}; ++ ++ int64_t v = 5; ++ int64_t r = a.fetch_add(v); ++ return static_cast(r); ++ } ++]]) ++ ++AC_DEFUN([CHECK_ATOMIC], [ ++ ++ AC_LANG_PUSH(C++) ++ ++ AC_MSG_CHECKING([whether std::atomic can be used without link library]) ++ ++ AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_ATOMIC_testbody])],[ ++ AC_MSG_RESULT([yes]) ++ ],[ ++ ATOMIC_LIBS=-latomic ++ ]) ++ ++ AC_LANG_POP ++ AC_SUBST([ATOMIC_LIBS]) ++]) diff --git a/libs/libtorrent/patches/010-usleep.patch b/libs/libtorrent/patches/010-usleep.patch deleted file mode 100644 index e3522f67ee..0000000000 --- a/libs/libtorrent/patches/010-usleep.patch +++ /dev/null @@ -1,54 +0,0 @@ ---- a/src/data/hash_queue.cc -+++ b/src/data/hash_queue.cc -@@ -38,9 +38,10 @@ - - #define __STDC_FORMAT_MACROS - -+#include -+#include - #include - #include --#include - - #include "torrent/exceptions.h" - #include "torrent/data/download_data.h" -@@ -137,7 +138,7 @@ HashQueue::remove(HashQueueNode::id_type - - while ((done_itr = m_done_chunks.find(hash_chunk)) == m_done_chunks.end()) { - pthread_mutex_unlock(&m_done_chunks_lock); -- usleep(100); -+ std::this_thread::sleep_for(std::chrono::microseconds(100)); - pthread_mutex_lock(&m_done_chunks_lock); - } - ---- a/src/torrent/utils/thread_base.cc -+++ b/src/torrent/utils/thread_base.cc -@@ -37,8 +37,9 @@ - #include "config.h" - - #include -+#include -+#include - #include --#include - - #include "exceptions.h" - #include "poll.h" -@@ -97,7 +98,7 @@ thread_base::stop_thread_wait() { - release_global_lock(); - - while (!is_inactive()) { -- usleep(1000); -+ std::this_thread::sleep_for(std::chrono::milliseconds(1)); - } - - acquire_global_lock(); -@@ -161,7 +162,7 @@ thread_base::event_loop(thread_base* thr - } - - // Add the sleep call when testing interrupts, etc. -- // usleep(50); -+ // std::this_thread::sleep_for(std::chrono::microseconds(50)); - - int poll_flags = 0; - diff --git a/net/rtorrent/patches/130-usleep.patch b/net/rtorrent/patches/130-usleep.patch deleted file mode 100644 index 935429d377..0000000000 --- a/net/rtorrent/patches/130-usleep.patch +++ /dev/null @@ -1,31 +0,0 @@ -From b3d75a642177f21f00d18f0e46bca4a9f363d08e Mon Sep 17 00:00:00 2001 -From: Rosen Penev -Date: Fri, 23 Aug 2019 13:35:28 -0700 -Subject: [PATCH] Replace usleep with C++11 sleep_for - -usleep was deprecated with POSIX 2008 and optionally unavailable with -uClibc-ng. ---- - src/thread_base.cc | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - ---- a/src/thread_base.cc -+++ b/src/thread_base.cc -@@ -42,6 +42,8 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -66,7 +68,7 @@ public: - - thread_queue_hack() { std::memset(this, 0, sizeof(thread_queue_hack)); } - -- void lock() { while (!__sync_bool_compare_and_swap(&m_lock, 0, 1)) usleep(0); } -+ void lock() { while (!__sync_bool_compare_and_swap(&m_lock, 0, 1)) std::this_thread::sleep_for(std::chrono::microseconds(0)); } - void unlock() { __sync_bool_compare_and_swap(&m_lock, 1, 0); } - - iterator begin() { return m_queue; } -- 2.30.2