Here is an inline update updating net/libtorrent and net/rtorrent both to 0.16.27.
changelogs from 0.16.25 to 0.16.27: https://github.com/rakshasa/rtorrent/releases#release-v0.16.27 libtorrent: - major bump because of removed symbol and data object sizes changes. - make test patches get a little more complicated. tests work but I had to patch a new file (test/data/test_file_list.cc) and sprinkle some more ../src/.libs/libtorrent.a in test/Makefile.in - plist: connection_state.h got removed and functional.h got added rtorrent: - churn in rtorrent test patch - new patch unbreaking a new test. freebsd also sees this. report: https://github.com/rakshasa/rtorrent/issues/2082 source: https://github.com/rakshasa/rtorrent/pull/2085 As sthen had suggested, I tried to upstream sprinkling libtorrent.a, but I have not added the newest stuff from this diff yet: https://github.com/rakshasa/libtorrent/pull/1007 Testing: 0.16.25 added large-file support. configure: Enable large-file support by @zippy2. I tested on an i386 vm and concluded that this was not needed. Both i386 and amd64 report: "checking for cc option to enable large file support... none needed". I was able to download a 5 GB file on a devuan torrent. Regarding the net/rtorrent test case that broke with multicall, we don't build XMLRPC (checking for XMLRPC-C... ignored) where it would likely be used. Internally, I was able to still run some simple multicall commands inside the client's ctrl-x: d.multicall="main","d.start=" d.multicall="main","d.stop=" d.multicall="main","d.close=" for more details see: https://rtorrent-docs.readthedocs.io/en/latest/scripting.html#multicall-demystified Downloading and seeding devuan and ubuntu torrents worked. There is the usual stutter when seeding or checksumming. Feedback and tests are welcome. OK? Index: libtorrent/Makefile =================================================================== RCS file: /cvs/ports/net/libtorrent/Makefile,v diff -u -p -r1.75 Makefile --- libtorrent/Makefile 30 Sep 2026 20:27:21 -0000 1.75 +++ libtorrent/Makefile 30 Oct 2026 21:37:37 -0000 @@ -3,10 +3,10 @@ COMMENT= BitTorrent library written in BROKEN-hppa = undefined references to __sync atomic ops BROKEN-sh = undefined references to __sync atomic ops -V = 0.16.24 +V = 0.16.27 DISTNAME= libtorrent-$V EPOCH= 0 -SHARED_LIBS += torrent 26.0 # 52.0.0 +SHARED_LIBS += torrent 27.0 # 55.0 CATEGORIES= net devel HOMEPAGE= https://rakshasa.github.io/rtorrent/ Index: libtorrent/distinfo =================================================================== RCS file: /cvs/ports/net/libtorrent/distinfo,v diff -u -p -r1.25 distinfo --- libtorrent/distinfo 30 Sep 2026 20:27:21 -0000 1.25 +++ libtorrent/distinfo 30 Oct 2026 21:37:37 -0000 @@ -1,2 +1,2 @@ -SHA256 (libtorrent-0.16.24.tar.gz) = JKLE6EQpCtqxIIlW/EBDQ2YqxclSQfPRWscKkXL9Uls= -SIZE (libtorrent-0.16.24.tar.gz) = 943301 +SHA256 (libtorrent-0.16.27.tar.gz) = t+4/Y32m0Tb7cKRWb76o5ET3ouJZWW6GEq3rDHxSD9E= +SIZE (libtorrent-0.16.27.tar.gz) = 967041 Index: libtorrent/patches/patch-test_Makefile_in =================================================================== RCS file: /cvs/ports/net/libtorrent/patches/patch-test_Makefile_in,v diff -u -p -r1.9 patch-test_Makefile_in --- libtorrent/patches/patch-test_Makefile_in 30 Sep 2026 20:27:21 -0000 1.9 +++ libtorrent/patches/patch-test_Makefile_in 30 Oct 2026 21:37:37 -0000 @@ -3,7 +3,7 @@ link tests with static archive due to un Index: test/Makefile.in --- test/Makefile.in.orig +++ test/Makefile.in -@@ -140,9 +140,7 @@ am_LibTorrent_Test_OBJECTS = $(am__objects_1) \ +@@ -142,9 +142,7 @@ am_LibTorrent_Test_OBJECTS = $(am__objects_1) \ protocol/LibTorrent_Test-test_protocol_buffer.$(OBJEXT) \ protocol/LibTorrent_Test-test_request_list.$(OBJEXT) LibTorrent_Test_OBJECTS = $(am_LibTorrent_Test_OBJECTS) @@ -14,7 +14,18 @@ Index: test/Makefile.in AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent -@@ -683,9 +681,7 @@ top_srcdir = @top_srcdir@ +@@ -216,9 +214,7 @@ am_LibTorrent_Test_Protocol_OBJECTS = $(am__objects_4) + ../src/utils/LibTorrent_Test_Protocol-fd_close_queue.$(OBJEXT) + LibTorrent_Test_Protocol_OBJECTS = \ + $(am_LibTorrent_Test_Protocol_OBJECTS) +-LibTorrent_Test_Protocol_DEPENDENCIES = ../src/libtorrent.la \ +- ../src/libtorrent_other.la \ +- ../src/torrent/libtorrent_torrent.la ++LibTorrent_Test_Protocol_DEPENDENCIES = ../src/.libs/libtorrent.a + LibTorrent_Test_Protocol_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(LibTorrent_Test_Protocol_CXXFLAGS) $(CXXFLAGS) \ +@@ -748,9 +744,7 @@ top_srcdir = @top_srcdir@ # LibTorrent_Test_LDADD = ../src/libtorrent.la LibTorrent_Test_LDADD = \ @@ -25,3 +36,14 @@ Index: test/Makefile.in LibTorrent_Test_Torrent_Net_LDADD = $(LibTorrent_Test_LDADD) LibTorrent_Test_Torrent_Runtime_LDADD = $(LibTorrent_Test_LDADD) +@@ -797,9 +791,7 @@ LibTorrent_Test_Protocol_SOURCES = $(LibTorrent_Test_C + ../src/utils/fd_close_queue.cc + + LibTorrent_Test_Protocol_LDADD = \ +- ../src/libtorrent.la \ +- ../src/libtorrent_other.la \ +- ../src/torrent/libtorrent_torrent.la ++ ../src/.libs/libtorrent.a + + LibTorrent_Test_Torrent_Net_SOURCES = $(LibTorrent_Test_Common) \ + torrent/net/test_address_info.cc \ Index: libtorrent/patches/patch-test_data_test_file_list_cc =================================================================== RCS file: libtorrent/patches/patch-test_data_test_file_list_cc diff -N libtorrent/patches/patch-test_data_test_file_list_cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libtorrent/patches/patch-test_data_test_file_list_cc 30 Oct 2026 21:37:37 -0000 @@ -0,0 +1,23 @@ +duplicate symbol (stub and socket_file.cc) + +Index: test/data/test_file_list.cc +--- test/data/test_file_list.cc.orig ++++ test/data/test_file_list.cc +@@ -19,17 +19,6 @@ namespace torrent { + // in this test binary links those in, and initialize()'s guard throws + // before either would ever run, so a link-only stub is enough here. + Manager* manager = nullptr; +- +-MemoryChunk +-SocketFile::create_padding_chunk(uint32_t, int, int) { +- throw internal_error("stub SocketFile::create_padding_chunk() called"); +-} +- +-MemoryChunk +-SocketFile::create_chunk(uint64_t, uint32_t, int, int) const { +- throw internal_error("stub SocketFile::create_chunk() called"); +-} +- + } // namespace torrent + + namespace { Index: libtorrent/pkg/PLIST =================================================================== RCS file: /cvs/ports/net/libtorrent/pkg/PLIST,v diff -u -p -r1.19 PLIST --- libtorrent/pkg/PLIST 15 Aug 2026 09:55:48 -0000 1.19 +++ libtorrent/pkg/PLIST 30 Oct 2026 21:37:37 -0000 @@ -27,7 +27,6 @@ include/torrent/exceptions.h include/torrent/hash_string.h include/torrent/net/ include/torrent/net/address_info.h -include/torrent/net/connection_state.h include/torrent/net/fd.h include/torrent/net/http_get.h include/torrent/net/http_stack.h @@ -81,6 +80,7 @@ include/torrent/utils/chrono.h include/torrent/utils/directory_events.h include/torrent/utils/extents.h include/torrent/utils/file_stat.h +include/torrent/utils/functional.h include/torrent/utils/log.h include/torrent/utils/log_buffer.h include/torrent/utils/option_strings.h Index: rtorrent/Makefile =================================================================== RCS file: /cvs/ports/net/rtorrent/Makefile,v diff -u -p -r1.81 Makefile --- rtorrent/Makefile 30 Sep 2026 20:22:30 -0000 1.81 +++ rtorrent/Makefile 30 Oct 2026 21:37:38 -0000 @@ -1,6 +1,6 @@ COMMENT = ncurses BitTorrent client based on libTorrent -V = 0.16.24 +V = 0.16.27 EPOCH = 0 DISTNAME = rtorrent-$V CATEGORIES = net Index: rtorrent/distinfo =================================================================== RCS file: /cvs/ports/net/rtorrent/distinfo,v diff -u -p -r1.25 distinfo --- rtorrent/distinfo 30 Sep 2026 20:22:30 -0000 1.25 +++ rtorrent/distinfo 30 Oct 2026 21:37:38 -0000 @@ -1,2 +1,2 @@ -SHA256 (rtorrent-0.16.24.tar.gz) = Jp2CBUvfOGIZRyLF4nvdwSq7UdRQRb9t8b1+46KDe6s= -SIZE (rtorrent-0.16.24.tar.gz) = 886723 +SHA256 (rtorrent-0.16.27.tar.gz) = ZF5eqGP+4sOg90W+YjWjfoDPfbage8gsox1Jv2XypSo= +SIZE (rtorrent-0.16.27.tar.gz) = 899609 Index: rtorrent/patches/patch-test_Makefile_in =================================================================== RCS file: /cvs/ports/net/rtorrent/patches/patch-test_Makefile_in,v diff -u -p -r1.11 patch-test_Makefile_in --- rtorrent/patches/patch-test_Makefile_in 30 Sep 2026 20:22:30 -0000 1.11 +++ rtorrent/patches/patch-test_Makefile_in 30 Oct 2026 21:37:38 -0000 @@ -1,7 +1,7 @@ Index: test/Makefile.in --- test/Makefile.in.orig +++ test/Makefile.in -@@ -743,11 +743,11 @@ rtorrent_Test_Src_SOURCES = $(rtorrent_Test_Common) \ +@@ -779,11 +779,11 @@ rtorrent_Test_Src_SOURCES = $(rtorrent_Test_Common) \ src/test_watch_ready_queue.h rtorrent_Test_Core_CXXFLAGS = $(CPPUNIT_CFLAGS) Index: rtorrent/patches/patch-test_core_test_view_cc =================================================================== RCS file: rtorrent/patches/patch-test_core_test_view_cc diff -N rtorrent/patches/patch-test_core_test_view_cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ rtorrent/patches/patch-test_core_test_view_cc 30 Oct 2026 21:37:38 -0000 @@ -0,0 +1,50 @@ +https://github.com/rakshasa/rtorrent/pull/2085 + +Index: test/core/test_view.cc +--- test/core/test_view.cc.orig ++++ test/core/test_view.cc +@@ -478,9 +478,10 @@ TestView::test_insert_stops_at_erased_download() { + CPPUNIT_ASSERT_EQUAL(size_t(0), list->size()); + } + +-// A comparator may read the view it sorts, while std::stable_sort holds one of +-// its entries outside and leaves a moved-from one in its place. The commands +-// that read a view skip that entry, also when no command would use it. ++// A comparator may read the view it sorts, while std::stable_sort holds some ++// of its entries outside and leaves moved-from ones in their place. The ++// commands that read a view skip those entries, also when no command would ++// use them. + void + TestView::test_multicall_skips_moved_entries() { + auto d0 = insert_download(); +@@ -495,10 +496,14 @@ TestView::test_multicall_skips_moved_entries() { + torrent::Object filtered_rows; + torrent::Object named_rows; + torrent::Object hashes; ++ size_t present = 0; + +- // The insertion sort moves d1 out after the first comparison returns false. ++ // By the second comparison the sort holds some entries outside the view; ++ // how many depends on the standard library. + compare_action = [&]() { + compare_action = [&]() { ++ present = std::count_if(view->begin_visible(), view->end_visible(), [](const auto& d) { return d != nullptr; }); ++ + auto args = torrent::Object::create_list(); + args.as_list().push_back(std::string("test_view")); + rows = rpc::call_command("d.multicall", args); +@@ -517,9 +522,10 @@ TestView::test_multicall_skips_moved_entries() { + view->sort(); + + CPPUNIT_ASSERT(rows.is_list() && filtered_rows.is_list() && named_rows.is_list() && hashes.is_list()); +- CPPUNIT_ASSERT_EQUAL(size_t(2), rows.as_list().size()); +- CPPUNIT_ASSERT_EQUAL(size_t(2), filtered_rows.as_list().size()); +- CPPUNIT_ASSERT_EQUAL(size_t(2), named_rows.as_list().size()); +- CPPUNIT_ASSERT_EQUAL(size_t(2), hashes.as_list().size()); ++ CPPUNIT_ASSERT(present < 3); ++ CPPUNIT_ASSERT_EQUAL(present, rows.as_list().size()); ++ CPPUNIT_ASSERT_EQUAL(present, filtered_rows.as_list().size()); ++ CPPUNIT_ASSERT_EQUAL(present, named_rows.as_list().size()); ++ CPPUNIT_ASSERT_EQUAL(present, hashes.as_list().size()); + CPPUNIT_ASSERT_EQUAL(std::string("d0,d1,d2"), describe_visible(*view)); + }
