git: cc77144d0a20 - main - net-p2p/transmission{,-components}: Update 4.0.6 => 4.1.1
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 22 Feb 2026 20:59:22 UTC
The branch main has been updated by vvd:
URL: https://cgit.FreeBSD.org/ports/commit/?id=cc77144d0a20b78d2e3b2bc0d919e8638502282c
commit cc77144d0a20b78d2e3b2bc0d919e8638502282c
Author: Rafe <mondo.debater_0q@icloud.com>
AuthorDate: 2026-02-22 20:48:44 +0000
Commit: Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2026-02-22 20:59:13 +0000
net-p2p/transmission{,-components}: Update 4.0.6 => 4.1.1
Update gtk flavor to gtk4 and qt flavor to qt6.
Changelogs:
https://github.com/transmission/transmission/releases/tag/4.1.0
https://github.com/transmission/transmission/releases/tag/4.1.1
Improve port:
- Optimize Makefile for different flavors - dependencies, NO_BUILD,
CMAKE_ARGS/CMAKE_ON/CMAKE_OFF, goals and etc.
- Add EXTRACT_AFTER_ARGS to prevent extract unnecessary files.
- Rework do-install.
- Fix warnings from portclippy.
PR: 292846
Co-authored-by: Vladimir Druzenko <vvd@FreeBSD.org>
---
net-p2p/transmission-components/Makefile | 221 ++++++---------
net-p2p/transmission-components/distinfo | 6 +-
.../files/patch-CMakeLists.txt | 314 +++++++++++++++++++--
.../files/patch-cmake_FindFastFloat.cmake | 8 -
.../files/patch-cmake_FindFmt.cmake | 26 --
.../files/patch-cmake_FindLibevent.cmake | 92 ++++++
.../files/patch-cmake_FindRapidJSON.cmake | 47 +++
.../files/patch-cmake_FindUtfCpp.cmake | 8 -
.../files/patch-cmake_Finddht.cmake | 42 +++
.../files/patch-cmake_Findfmt.cmake | 74 +++++
.../files/patch-cmake_Findlibb64.cmake | 54 ++++
.../files/patch-cmake_Findlibdeflate.cmake | 76 +++++
.../files/patch-cmake_Findlibnatpmp.cmake | 42 +++
.../files/patch-cmake_Findlibpsl.cmake | 52 ++++
.../files/patch-cmake_Findlibutp.cmake | 97 +++++++
.../files/patch-cmake_Findminiupnpc.cmake | 71 +++++
.../files/patch-cmake_Findutf8cpp.cmake | 37 +++
.../files/patch-cmake_TrGTest.cmake | 19 ++
.../files/patch-cmake_TrMacros.cmake | 146 ++++++++++
.../files/patch-daemon_CMakeLists.txt | 11 +
.../files/patch-gtk_DetailsDialog.cc | 30 --
.../files/patch-libtransmission_CMakeLists.txt | 40 +++
.../files/patch-libtransmission_peer-msgs.cc | 10 -
.../patch-libtransmission_port-forwarding-upnp.cc | 17 --
.../patch-libtransmission_session-alt-speeds.cc | 19 --
.../files/patch-libtransmission_torrent.cc | 28 --
.../files/patch-qt_transmission-qt.desktop | 11 -
.../patch-tests_libtransmission_CMakeLists.txt | 11 +
.../files/patch-utils_CMakeLists.txt | 11 +
.../files/patch-utils_remote.cc | 19 --
.../files/patch-utils_show.cc | 11 -
net-p2p/transmission-components/pkg-plist.docs | 3 +
net-p2p/transmission-components/pkg-plist.gtk | 73 +----
net-p2p/transmission-components/pkg-plist.qt | 7 +-
net-p2p/transmission-components/pkg-plist.web | 2 +
net-p2p/transmission/Makefile | 7 +-
36 files changed, 1319 insertions(+), 423 deletions(-)
diff --git a/net-p2p/transmission-components/Makefile b/net-p2p/transmission-components/Makefile
index 2015ec0a8b22..c53b292e27cb 100644
--- a/net-p2p/transmission-components/Makefile
+++ b/net-p2p/transmission-components/Makefile
@@ -1,6 +1,5 @@
PORTNAME= transmission
-DISTVERSION= 4.0.6
-PORTREVISION= 7
+DISTVERSION= 4.1.1
CATEGORIES= net-p2p
MASTER_SITES= https://github.com/${PORTNAME}/${PORTNAME}/releases/download/${DISTVERSION}/
@@ -11,12 +10,20 @@ WWW= https://www.transmissionbt.com
LICENSE= GPLv3+
LICENSE_FILE= ${WRKSRC}/COPYING
+FLAVORS= daemon cli docs gtk qt utils web
+FLAVOR?= ${FLAVORS:[1]}
+${FLAVOR}_PKGNAMESUFFIX= -${FLAVOR}
+
+.if ${FLAVOR:Ndocs:Nweb}
BUILD_DEPENDS= ${LOCALBASE}/include/fast_float/fast_float.h:math/fast_float \
${LOCALBASE}/include/fmt/format.h:devel/libfmt \
+ ${LOCALBASE}/include/math/wide_integer/uintwide_t.h:math/wide-integer \
${LOCALBASE}/include/rapidjson/rapidjson.h:devel/rapidjson \
+ ${LOCALBASE}/include/small/map.hpp:devel/small \
${LOCALBASE}/include/utf8cpp/utf8.h:devel/utf8cpp
LIB_DEPENDS= libb64.so:converters/libb64 \
+ libcrc32c.so:devel/crc32c \
libcurl.so:ftp/curl \
libdeflate.so:archivers/libdeflate \
libdht.so:devel/jech-dht \
@@ -26,179 +33,113 @@ LIB_DEPENDS= libb64.so:converters/libb64 \
libpsl.so:dns/libpsl \
libutp.so:net-p2p/libutp
-FLAVORS= cli docs daemon gtk qt utils web
-FLAVOR?= ${FLAVORS:[1]}
-.for flavor in ${FLAVORS}
-${flavor}_PKGNAMESUFFIX= -${flavor}
-.endfor
-
-DESCR= ${PKGDIR}/pkg-descr.${FLAVOR}
-
-.if ${FLAVOR} == docs
-NO_BUILD= yes
-LIB_DEPENDS=
+gtk_LIB_DEPENDS= libgraphene-1.0.so:graphics/graphene \
+ libharfbuzz.so:print/harfbuzz \
+ libvulkan.so:graphics/vulkan-loader
.endif
-gtk_LIB_DEPENDS= libayatana-appindicator3.so:devel/libayatana-appindicator \
- libharfbuzz.so:print/harfbuzz
-
-USES= cmake cpe iconv localbase pkgconfig ssl tar:xz
-
+USES= ${${FLAVOR}_USES} cpe tar:xz
CPE_VENDOR= transmissionbt
CPE_PRODUCT= transmission
-EXTRACT_AFTER_ARGS= --exclude third-party/dht \
- --exclude third-party/fast_float \
- --exclude third-party/fmt \
- --exclude third-party/libb64 \
- --exclude third-party/libdeflate \
- --exclude third-party/libevent \
- --exclude third-party/libnatpmp \
- --exclude third-party/libpsl \
- --exclude third-party/libutp \
- --exclude third-party/miniupnpc \
- --exclude third-party/rapidjson \
- --exclude third-party/utfcpp
-
-.if ${FLAVOR} == gtk
-USES+= desktop-file-utils gettext-runtime gettext-tools gnome
-USE_GNOME= gdkpixbuf glibmm gtkmm30
-.endif
+.if ${FLAVOR:Ndocs:Nweb}
+USE_GL= ${${FLAVOR}_USE_GL}
+USE_GNOME= ${${FLAVOR}_USE_GNOME}
+USE_QT= ${${FLAVOR}_USE_QT}
-.if ${FLAVOR} == qt
-USES+= desktop-file-utils qmake:no_env qt:5
-USE_QT= core dbus gui network svg widgets buildtools:build \
- linguisttools:build
-.endif
+_all_USES= cmake:testing compiler:c++20-lang iconv localbase pkgconfig ssl
-.if ${FLAVOR} == daemon
-USE_RC_SUBR= transmission
-.endif
+cli_USES= ${_all_USES}
-.if ${FLAVOR} == docs
-USES= cpe tar:xz
-.endif
+daemon_USES= ${_all_USES}
-.if ${FLAVOR} == web
-USES= cpe tar:xz
-NO_ARCH= yes
-NO_BUILD= yes
-.endif
+gtk_USES= ${_all_USES} desktop-file-utils gettext gnome
+gtk_USE_GNOME= gdkpixbuf glibmm gtkmm40
-CMAKE_ON= USE_SYSTEM_B64 USE_SYSTEM_DEFLATE USE_SYSTEM_DHT \
- USE_SYSTEM_EVENT2 USE_SYSTEM_MINIUPNPC USE_SYSTEM_NATPMP \
- USE_SYSTEM_PSL USE_SYSTEM_UTP
-CMAKE_OFF= ENABLE_MAC REBUILD_WEB WITH_SYSTEMD
+qt_USES= ${_all_USES} desktop-file-utils gl qmake:no_env qt:6
+qt_USE_GL= opengl
+qt_USE_QT= base svg tools translations:build
-.if ${FLAVOR:Ndocs}
-USERS= transmission
-GROUPS= transmission
+utils_USES= ${_all_USES}
+
+.if ${FLAVOR:Mdaemon}
+USE_RC_SUBR= ${PORTNAME}
.endif
-PLIST= ${PKGDIR}/pkg-plist.${FLAVOR}
+CMAKE_ARGS= ${${FLAVOR}_CMAKE_ARGS} -DCMAKE_CXX_STANDARD=20 \
+ -DWideInteger_DIR=${PREFIX}/lib/cmake/wide-integer
+CMAKE_ON= ${${FLAVOR}_CMAKE_ON} USE_SYSTEM_DEFAULT
+CMAKE_OFF= ${${FLAVOR}_CMAKE_OFF} ENABLE_MAC RUN_CLANG_TIDY WITH_SYSTEMD
-.if ${FLAVOR} == cli
-CMAKE_ON+= ENABLE_CLI
-CMAKE_OFF+= ENABLE_DAEMON ENABLE_GTK ENABLE_QT ENABLE_UTILS INSTALL_WEB
-.endif
+cli_CMAKE_ON= ENABLE_CLI
+cli_CMAKE_OFF= ENABLE_DAEMON ENABLE_GTK ENABLE_QT ENABLE_UTILS INSTALL_WEB
-.if ${FLAVOR} == daemon
-CMAKE_ON+= ENABLE_DAEMON
-CMAKE_OFF+= ENABLE_CLI ENABLE_GTK ENABLE_QT ENABLE_UTILS INSTALL_WEB
-.endif
+daemon_CMAKE_ON= ENABLE_DAEMON
+daemon_CMAKE_OFF= ENABLE_CLI ENABLE_GTK ENABLE_QT ENABLE_UTILS INSTALL_WEB
-.if ${FLAVOR} == gtk
-CMAKE_ARGS+= -DUSE_GTK_VERSION=3
-CMAKE_ON+= ENABLE_GTK GTK_IS_REQUIRED
-CMAKE_OFF+= ENABLE_CLI ENABLE_DAEMON ENABLE_UTILS INSTALL_WEB
-.endif
+gtk_CMAKE_ARGS= -DUSE_GTK_VERSION=4
+gtk_CMAKE_ON= ENABLE_GTK GTK_IS_REQUIRED
+gtk_CMAKE_OFF= ENABLE_CLI ENABLE_DAEMON ENABLE_UTILS INSTALL_WEB
-.if ${FLAVOR} == qt
-CMAKE_ARGS+= -DUSE_QT_VERSION=5
-CMAKE_ON+= ENABLE_QT QT_IS_REQUIRED
-CMAKE_OFF+= ENABLE_CLI ENABLE_DAEMON ENABLE_UTILS INSTALL_WEB
-.endif
+qt_CMAKE_ARGS= -DUSE_QT_VERSION=6
+qt_CMAKE_ON= ENABLE_QT QT_IS_REQUIRED
+qt_CMAKE_OFF= ENABLE_CLI ENABLE_DAEMON ENABLE_UTILS INSTALL_WEB
-.if ${FLAVOR} == utils
-CMAKE_ON+= ENABLE_UTILS
-CMAKE_OFF+= ENABLE_CLI ENABLE_DAEMON ENABLE_GTK ENABLE_QT ENABLE_TESTS \
- ENABLE_WERROR INSTALL_WEB
+utils_CMAKE_ON= ENABLE_UTILS
+utils_CMAKE_OFF= ENABLE_CLI ENABLE_DAEMON ENABLE_GTK ENABLE_QT INSTALL_WEB
.endif
-OPTIONS_FILE= ${PORT_DBDIR}/${OPTIONS_NAME}/${FLAVOR}-options
+EXTRACT_AFTER_ARGS= ${B64 CRC32C FastFloat DEFLATE DHT Fmt MINIUPNPC \
+ NATPMP PSL Small UtfCpp UTP WideInteger \
+ :L:C|^(.*)|--exclude cmake/Find\1.cmake|} \
+ --exclude news/news-[0-3]* \
+ --exclude news/news-*beta* \
+ ${dht fast_float fmt libb64 libdeflate libevent \
+ libnatpmp libpsl libutp miniupnpc rapidjson small \
+ utfcpp wide-integer:L:S|^|--exclude third-party/|} \
+ --no-same-owner --no-same-permissions
-.if ${FLAVOR:Mdocs}
-OPTIONS_DEFINE=
+.if ${FLAVOR:Mdocs} || ${FLAVOR:Mweb}
+NO_ARCH= yes
+NO_BUILD= yes
.endif
-.if ${FLAVOR:Mweb}
-OPTIONS_DEFINE=
+.if ${FLAVOR:Ndocs}
+USERS= ${PORTNAME}
+GROUPS= ${PORTNAME}
.endif
-.if ${FLAVOR:Nweb} && ${FLAVOR:Ndocs}
-OPTIONS_DEFINE= NLS TESTS
+DESCR= ${PKGDIR}/pkg-descr.${FLAVOR}
+PLIST= ${PKGDIR}/pkg-plist.${FLAVOR}
+
+.if ${FLAVOR:Ndocs:Nweb}
+OPTIONS_DEFINE= NLS
OPTIONS_DEFAULT= NLS
+OPTIONS_FILE= ${PORT_DBDIR}/${OPTIONS_NAME}/${FLAVOR}-options
+OPTIONS_SUB= yes
+NLS_USES= gettext-runtime
+NLS_CMAKE_BOOL= ENABLE_NLS
.endif
-OPTIONS_SUB= yes
-
-daemon_DESC= Build daemon
-docs_DESC= Install documentation
-gtk_DESC= Build GTK+ client
-qt_DESC= Build Qt client
-TESTS_DESC= Build & run unit tests
-utils_DESC= Build utilities (create, edit, remote, show)
-cli_DESC= Build command-line client (deprecated)
-web_DESC= Install web interface
-
-NLS_USES= gettext-runtime:lib
-NLS_CMAKE_BOOL= ENABLE_NLS
-
-TESTS_CMAKE_BOOL= ENABLE_TESTS
-
-UTILS_CMAKE_BOOL= ENABLE_UTILS
-
-WEB_CMAKE_BOOL= INSTALL_WEB
-
-.if ${FLAVOR} == docs
-pre-install:
- @${ECHO_MSG} "Removing outdated release notes"
- @${FIND} ${WRKSRC}/news \( -name 'news-[0-3]*' -o -name '*beta*' \) -delete
-
+.if ${FLAVOR:Mdocs}
do-install:
- @${MKDIR} ${STAGEDIR}${DOCSDIR}
- @cd ${WRKSRC} ; ${CP} AUTHORS ${STAGEDIR}${DOCSDIR} ;\
- ${CP} COPYING ${STAGEDIR}${DOCSDIR} ;\
- ${CP} README.md ${STAGEDIR}${DOCSDIR}
- @cd ${WRKSRC}/docs ; ${CP} rpc-spec.md ${STAGEDIR}${DOCSDIR}
- @cd ${WRKSRC}/extras ; ${CP} send-email-when-torrent-done.sh ${STAGEDIR}${DOCSDIR}
- @${MKDIR} ${STAGEDIR}${DOCSDIR}/news
- @cd ${WRKSRC}/news ; ${CP} -R . ${STAGEDIR}${DOCSDIR}/news
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} news ${STAGEDIR}${DOCSDIR})
+ ${INSTALL_DATA} ${AUTHORS COPYING README.md docs/rpc-spec.md \
+ extras/send-email-when-torrent-done.sh:L:S|^|${WRKSRC}/|} \
+ ${STAGEDIR}${DOCSDIR}
.endif
-.if ${FLAVOR} == qt
-post-install:
- ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps
- ${INSTALL_DATA} ${WRKSRC}/qt/icons/transmission.svg \
- ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps/transmission-qt.svg
+.if ${FLAVOR:Mweb}
+do-install:
+ (cd ${WRKSRC}/web && ${COPYTREE_SHARE} public_html ${STAGEDIR}${DATADIR})
.endif
-.if ${FLAVOR} == daemon
post-install:
- ${MKDIR} ${STAGEDIR}${ETCDIR}/home
+.if ${FLAVOR:Mdaemon}
+ ${MKDIR} ${STAGEDIR}${ETCDIR}/home
.endif
-
-.if ${FLAVOR} == web
-do-install:
- ( cd ${WRKSRC}/web && ${COPYTREE_SHARE} public_html ${STAGEDIR}${DATADIR} )
+.if ${FLAVOR:Mgtk} || ${FLAVOR:Mqt}
+ ${RM} ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps/transmission-devel.svg
.endif
-post-install-TESTS-on:
- @${ECHO_MSG} "Running tests..."
- @cd ${BUILD_WRKSRC}/tests/libtransmission/ && \
- eval ${BUILD_WRKSRC}/tests/libtransmission/libtransmission-test \
- --gtest_filter="-DhtTest.usesBootstrapFile" \
- #fails in poudriere due to lack of networking, passes otherwise
- --gtest_brief=1 \
-
.include <bsd.port.mk>
diff --git a/net-p2p/transmission-components/distinfo b/net-p2p/transmission-components/distinfo
index 1debd6dfbbaa..e171f50f9159 100644
--- a/net-p2p/transmission-components/distinfo
+++ b/net-p2p/transmission-components/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1717026106
-SHA256 (transmission-4.0.6.tar.xz) = 2a38fe6d8a23991680b691c277a335f8875bdeca2b97c6b26b598bc9c7b0c45f
-SIZE (transmission-4.0.6.tar.xz) = 11908296
+TIMESTAMP = 1771590096
+SHA256 (transmission-4.1.1.tar.xz) = e743283ee03a42c4d0b08fed2bd52b554aa6c9f65b4d4d45b795c32d98762a79
+SIZE (transmission-4.1.1.tar.xz) = 11876904
diff --git a/net-p2p/transmission-components/files/patch-CMakeLists.txt b/net-p2p/transmission-components/files/patch-CMakeLists.txt
index e520e0207eb3..29c22be3f409 100644
--- a/net-p2p/transmission-components/files/patch-CMakeLists.txt
+++ b/net-p2p/transmission-components/files/patch-CMakeLists.txt
@@ -1,23 +1,301 @@
---- CMakeLists.txt.orig 2023-08-23 22:48:58 UTC
+--- CMakeLists.txt.orig 2026-02-20 00:30:46 UTC
+++ CMakeLists.txt
-@@ -796,20 +796,6 @@ if(ENABLE_DAEMON OR ENABLE_GTK OR ENABLE_QT)
- tr_install_web(${CMAKE_INSTALL_DATAROOTDIR}/${TR_NAME})
- endif()
+@@ -45,15 +45,25 @@ set(EVENT2_MINIMUM 2.1.0)
+ set(WOLFSSL_MINIMUM 3.4)
+ set(DEFLATE_MINIMUM 1.7)
+ set(EVENT2_MINIMUM 2.1.0)
++# fast_float's version file is configured with `COMPATIBILITY SameMajorVersion`
++# The version range currently distributed varies greatly (e.g. Debian Trixie -> 8.0.0, Ubuntu 24.04 -> 3.9.0)
++# set(FAST_FLOAT_MINIMUM 3...8)
++set(FMT_MINIMUM 8.0.1)
+ set(GIOMM_MINIMUM 2.26.0)
+ set(GLIBMM_MINIMUM 2.60.0)
+ set(GTKMM3_MINIMUM 3.24.0)
+ set(GTKMM4_MINIMUM 4.11.1)
+ set(OPENSSL_MINIMUM 1.1.0)
+ set(MBEDTLS_MINIMUM 2.7)
+-set(NPM_MINIMUM 10.2.3) # Node.js 20.10 (eslint-plugin-unicorn)
+-set(PSL_MINIMUM 0.21.1)
++set(MINIUPNPC_MINIMUM 2.2.1)
++set(NPM_MINIMUM 10.8.2) # Node.js 20.19 (stylelint@17)
++set(PSL_MINIMUM 0.21.0)
+ set(QT_MINIMUM 5.15)
++set(SIGSLOT_MINIMUM 1.2.3)
++set(SMALL_MINIMUM 0.2.2)
++# utf8cpp v4's version file is configured with `COMPATIBILITY SameMajorVersion`
++# and does not support version range.
++# set(UTF8CPP_MINIMUM 3.1...4)
+
+ option(ENABLE_DAEMON "Build daemon" ON)
+ tr_auto_option(ENABLE_GTK "Build GTK client" AUTO)
+@@ -71,14 +81,21 @@ tr_auto_option(RUN_CLANG_TIDY "Run clang-tidy on the c
+ option(INSTALL_LIB "Install the library" OFF)
+ tr_auto_option(ENABLE_DEPRECATED "Allow deprecated API use of upstream packages, e.g. GTK" AUTO)
+ tr_auto_option(RUN_CLANG_TIDY "Run clang-tidy on the code" AUTO)
+-tr_auto_option(USE_SYSTEM_EVENT2 "Use system event2 library" AUTO)
+-tr_auto_option(USE_SYSTEM_DEFLATE "Use system deflate library" AUTO)
+-tr_auto_option(USE_SYSTEM_DHT "Use system dht library" AUTO)
+-tr_auto_option(USE_SYSTEM_MINIUPNPC "Use system miniupnpc library" AUTO)
+-tr_auto_option(USE_SYSTEM_NATPMP "Use system natpmp library" AUTO)
+-tr_auto_option(USE_SYSTEM_UTP "Use system utp library" AUTO)
+-tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" AUTO)
+-tr_auto_option(USE_SYSTEM_PSL "Use system psl library" AUTO)
++tr_auto_option(USE_SYSTEM_DEFAULT "Default value for USE_SYSTEM_* options" AUTO)
++tr_auto_option(RUN_CLANG_TIDY "Run clang-tidy on the code" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_EVENT2 "Use system event2 library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_DEFLATE "Use system deflate library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_DHT "Use system dht library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_FAST_FLOAT "Use system fast_float library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_FMT "Use system fmt library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_MINIUPNPC "Use system miniupnpc library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_NATPMP "Use system natpmp library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_SMALL "Use system small library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_UTF8CPP "Use system uft8cpp library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_UTP "Use system utp library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_WIDE_INTEGER "Use system WideInteger library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" ${USE_SYSTEM_DEFAULT})
++tr_auto_option(USE_SYSTEM_PSL "Use system psl library" ${USE_SYSTEM_DEFAULT})
+ tr_list_option(USE_GTK_VERSION "Use specific GTK version" AUTO 3 4)
+ tr_list_option(USE_QT_VERSION "Use specific Qt version" AUTO 5 6)
+ tr_list_option(WITH_CRYPTO "Use specified crypto library" AUTO ccrypto mbedtls openssl wolfssl)
+@@ -239,26 +256,13 @@ set(SOURCE_ICONS_DIR "${PROJECT_SOURCE_DIR}/icons")
+
+ set(SOURCE_ICONS_DIR "${PROJECT_SOURCE_DIR}/icons")
+
+-find_package(FastFloat)
+-find_package(Fmt)
+ find_package(RapidJSON)
+-find_package(Small)
+-find_package(UtfCpp)
+-find_package(WideInteger)
+
+ find_package(Threads)
+ find_package(PkgConfig QUIET)
+
+ find_package(CURL ${CURL_MINIMUM} REQUIRED)
--if(INSTALL_DOC)
-- install(
-- FILES
-- AUTHORS
-- COPYING
-- README.md
-- docs/rpc-spec.md
-- extras/send-email-when-torrent-done.sh
-- DESTINATION ${CMAKE_INSTALL_DOCDIR})
-- install(
-- DIRECTORY news
-- DESTINATION ${CMAKE_INSTALL_DOCDIR})
+-if(ENABLE_DEPRECATED STREQUAL "AUTO")
+- if(DEFINED ENV{CI})
+- set(ENABLE_DEPRECATED OFF)
+- else()
+- set(ENABLE_DEPRECATED ON)
+- endif()
-endif()
-
- if(MSVC AND ENABLE_DAEMON AND ENABLE_QT AND ENABLE_UTILS AND WITH_CRYPTO STREQUAL "openssl" AND INSTALL_WEB)
- add_subdirectory(dist/msi)
+ set(CRYPTO_PKG "")
+ if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "ccrypto")
+ tr_get_required_flag(WITH_CRYPTO CCRYPTO_IS_REQUIRED)
+@@ -369,7 +373,7 @@ if(GTK_FOUND)
+ INTERFACE
+ ${GTK${GTK_VERSION}_CFLAGS_OTHER})
+
+- target_include_directories(transmission::gtk_impl SYSTEM
++ target_include_directories(transmission::gtk_impl
+ INTERFACE
+ ${GTK${GTK_VERSION}_INCLUDE_DIRS})
+
+@@ -408,6 +412,9 @@ if(ENABLE_QT)
+ Network
+ Svg
+ LinguistTools)
++ if(ENABLE_TESTS)
++ list(APPEND QT_REQUIRED_MODULES Test)
++ endif()
+ set(QT_OPTIONAL_MODULES
+ DBus
+ AxContainer
+@@ -428,7 +435,7 @@ if(ENABLE_QT)
+ foreach(M ${QT_REQUIRED_MODULES})
+ find_package(Qt${Qt_VERSION_MAJOR}${M} ${QT_MINIMUM} QUIET)
+ if(Qt${Qt_VERSION_MAJOR}${M}_FOUND)
+- if(NOT M STREQUAL "LinguistTools")
++ if(NOT M STREQUAL "LinguistTools" AND NOT M STREQUAL "Test")
+ list(APPEND QT_TARGETS Qt${Qt_VERSION_MAJOR}::${M})
+ endif()
+ else()
+@@ -493,19 +500,24 @@ endif()
+ tr_fixup_auto_option(ENABLE_MAC MAC_FOUND MAC_IS_REQUIRED)
+ endif()
+
++# Don't build libdeflate as subdirectory as its CMakeLists.txt
++# messes with global CMAKE_* variables and global compiler options
+ if(WIN32 AND NOT MINGW)
+ set(DEFLATE_LIB_NAME deflatestatic)
+ else()
+ set(DEFLATE_LIB_NAME deflate)
+ endif()
+-tr_add_external_auto_library(DEFLATE libdeflate ${DEFLATE_LIB_NAME}
+- TARGET deflate::deflate
++tr_add_external_auto_library(DEFLATE libdeflate
++ LIBNAME ${DEFLATE_LIB_NAME}
++ TARGET libdeflate::libdeflate
+ CMAKE_ARGS
+ -DLIBDEFLATE_BUILD_SHARED_LIB=OFF
+ -DLIBDEFLATE_BUILD_GZIP=OFF)
+
+-tr_add_external_auto_library(EVENT2 libevent event
+- TARGET libevent::event
++tr_add_external_auto_library(EVENT2 Libevent
++ SUBPROJECT
++ SOURCE_DIR libevent
++ COMPONENTS core extra
+ CMAKE_ARGS
+ -DEVENT__DISABLE_OPENSSL:BOOL=ON
+ -DEVENT__DISABLE_BENCHMARK:BOOL=ON
+@@ -513,8 +525,14 @@ tr_add_external_auto_library(EVENT2 libevent event
+ -DEVENT__DISABLE_REGRESS:BOOL=ON
+ -DEVENT__DISABLE_SAMPLES:BOOL=ON
+ -DEVENT__LIBRARY_TYPE:STRING=STATIC)
++# Workaround, perm fix: https://github.com/libevent/libevent/pull/1791
++if(NOT TARGET libevent::core)
++ add_library(libevent::core ALIAS event_core)
++ add_library(libevent::extra ALIAS event_extra)
++endif()
+
+-tr_add_external_auto_library(NATPMP libnatpmp natpmp
++tr_add_external_auto_library(NATPMP libnatpmp
++ LIBNAME natpmp
+ TARGET natpmp::natpmp
+ CMAKE_ARGS
+ -DBUILD_SHARED_LIBS=OFF)
+@@ -530,14 +548,16 @@ endif()
+ else()
+ set(TR_MINIUPNPC_LIBNAME miniupnpc)
endif()
+-tr_add_external_auto_library(MINIUPNPC miniupnp/miniupnpc ${TR_MINIUPNPC_LIBNAME}
+- TARGET miniupnpc::libminiupnpc
++tr_add_external_auto_library(MINIUPNPC miniupnpc
++ LIBNAME ${TR_MINIUPNPC_LIBNAME}
++ SOURCE_DIR miniupnp/miniupnpc
++ TARGET miniupnpc::miniupnpc
+ CMAKE_ARGS
+ -DUPNPC_BUILD_STATIC=ON
+ -DUPNPC_BUILD_SHARED=OFF
+ -DUPNPC_BUILD_TESTS=OFF)
+ if(NOT USE_SYSTEM_MINIUPNPC)
+- target_compile_definitions(miniupnpc::libminiupnpc
++ target_compile_definitions(miniupnpc::miniupnpc
+ INTERFACE
+ MINIUPNP_STATICLIB)
+ endif()
+@@ -546,26 +566,90 @@ add_subdirectory(${TR_THIRD_PARTY_SOURCE_DIR}/wildmat)
+ add_subdirectory(${TR_THIRD_PARTY_SOURCE_DIR}/madler-crcany)
+ add_subdirectory(${TR_THIRD_PARTY_SOURCE_DIR}/wildmat)
+
+-tr_add_external_auto_library(DHT dht dht
++tr_add_external_auto_library(DHT dht
++ LIBNAME dht
+ TARGET dht::dht)
+
+-tr_add_external_auto_library(PSL libpsl psl
++tr_add_external_auto_library(PSL libpsl
++ LIBNAME psl
+ TARGET psl::psl)
+
+ if(ENABLE_UTP)
+- tr_add_external_auto_library(UTP libutp utp
++ tr_add_external_auto_library(UTP libutp
+ SUBPROJECT
+- TARGET libutp::libutp
+ CMAKE_ARGS
+ -DLIBUTP_SHARED:BOOL=OFF)
+ endif()
+
+-tr_add_external_auto_library(B64 libb64 b64
++tr_add_external_auto_library(B64 libb64
+ SUBPROJECT
+- TARGET libb64::libb64
+ CMAKE_ARGS
+ -DLIBB64_SHARED:BOOL=OFF)
+
++tr_add_external_auto_library(FAST_FLOAT FastFloat
++ SUBPROJECT
++ SOURCE_DIR fast_float
++ CMAKE_ARGS
++ -DFASTFLOAT_INSTALL=OFF
++ -DFASTFLOAT_TEST=OFF
++ -DFASTFLOAT_SANITIZE=OFF
++ -DFASTFLOAT_CXX_STANDARD=${CMAKE_CXX_STANDARD})
++
++tr_add_external_auto_library(FMT fmt
++ SUBPROJECT
++ CMAKE_ARGS
++ -DFMT_INSTALL=OFF
++ -DFMT_SYSTEM_HEADERS=ON)
++if(NOT TARGET transmission::fmt-header-only)
++ add_library(transmission::fmt-header-only INTERFACE IMPORTED)
++ target_link_libraries(transmission::fmt-header-only
++ INTERFACE
++ fmt::fmt-header-only)
++ target_compile_definitions(transmission::fmt-header-only
++ INTERFACE
++ FMT_USE_EXCEPTIONS=0 # {fmt} >= 11.2.0
++ FMT_EXCEPTIONS=0 # {fmt} < 11.2.0
++ )
++endif()
++
++tr_add_external_auto_library(SMALL small
++ SUBPROJECT
++ CMAKE_ARGS
++ -DSMALL_BUILD_WITH_EXCEPTIONS=OFF)
++add_library(transmission::small INTERFACE IMPORTED)
++target_link_libraries(transmission::small
++ INTERFACE
++ small::small)
++target_compile_definitions(transmission::small
++ INTERFACE
++ SMALL_DISABLE_EXCEPTIONS=1)
++
++tr_add_external_auto_library(UTF8CPP utf8cpp
++ SUBPROJECT
++ SOURCE_DIR utfcpp)
++if (NOT TARGET utf8::cpp)
++ add_library(utf8::cpp ALIAS utf8cpp)
++endif()
++
++tr_add_external_auto_library(WIDE_INTEGER WideInteger
++ SUBPROJECT
++ SOURCE_DIR wide-integer)
++add_library(transmission::WideInteger INTERFACE IMPORTED)
++target_link_libraries(transmission::WideInteger
++ INTERFACE
++ WideInteger::WideInteger)
++include(CheckCXXSourceCompiles)
++check_cxx_source_compiles(
++"int main()
++{
++ unsigned __int128 u;
++ signed __int128 i;
++ return 0;
++}" TR_HAVE_INT128)
++target_compile_definitions(transmission::WideInteger
++ INTERFACE
++ $<$<BOOL:${TR_HAVE_INT128}>:WIDE_INTEGER_HAS_LIMB_TYPE_UINT64>)
++
+ set(TR_WEB_ASSETS ${PROJECT_SOURCE_DIR}/web/public_html)
+ if(REBUILD_WEB)
+ tr_get_required_flag(REBUILD_WEB NPM_IS_REQUIRED)
+@@ -804,11 +888,6 @@ endif()
+ endif()
+ endif()
+
+-if(ENABLE_TESTS)
+- enable_testing()
+- add_subdirectory(tests)
+-endif()
+-
+ function(tr_install_web DST_DIR)
+ if(INSTALL_WEB)
+ install(
+@@ -836,6 +915,11 @@ endforeach()
+ add_subdirectory(${P})
+ endif()
+ endforeach()
++
++if(ENABLE_TESTS)
++ enable_testing()
++ add_subdirectory(tests)
++endif()
+
+ if(ENABLE_DAEMON OR ENABLE_GTK OR ENABLE_QT)
+ tr_install_web(${CMAKE_INSTALL_DATAROOTDIR}/${TR_NAME})
diff --git a/net-p2p/transmission-components/files/patch-cmake_FindFastFloat.cmake b/net-p2p/transmission-components/files/patch-cmake_FindFastFloat.cmake
deleted file mode 100644
index 95e27a51ce23..000000000000
--- a/net-p2p/transmission-components/files/patch-cmake_FindFastFloat.cmake
+++ /dev/null
@@ -1,8 +0,0 @@
---- cmake/FindFastFloat.cmake.orig 2024-02-22 15:48:36 UTC
-+++ cmake/FindFastFloat.cmake
-@@ -2,4 +2,4 @@ target_include_directories(FastFloat::fast_float
-
- target_include_directories(FastFloat::fast_float
- INTERFACE
-- ${TR_THIRD_PARTY_SOURCE_DIR}/fast_float/include)
-+ ${CMAKE_INSTALL_PREFIX}/include)
diff --git a/net-p2p/transmission-components/files/patch-cmake_FindFmt.cmake b/net-p2p/transmission-components/files/patch-cmake_FindFmt.cmake
deleted file mode 100644
index c1b115e1dc75..000000000000
--- a/net-p2p/transmission-components/files/patch-cmake_FindFmt.cmake
+++ /dev/null
@@ -1,26 +0,0 @@
---- cmake/FindFmt.cmake.orig 2025-10-15 08:40:38 UTC
-+++ cmake/FindFmt.cmake
-@@ -1,10 +1,21 @@ add_library(fmt::fmt-header-only INTERFACE IMPORTED)
- add_library(fmt::fmt-header-only INTERFACE IMPORTED)
-
-+set(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE "${CMAKE_INSTALL_PREFIX}/include")
-+
- target_include_directories(fmt::fmt-header-only
- INTERFACE
-- ${CMAKE_CURRENT_LIST_DIR}/../third-party/fmt/include)
-+ ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE})
-
-+file(READ "${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE}/fmt/base.h" _FMT_BASE_H)
-+if(_FMT_BASE_H MATCHES "FMT_VERSION ([0-9]+)([0-9][0-9])([0-9][0-9])")
-+ # Use math to skip leading zeros if any.
-+ math(EXPR _FMT_VERSION_MAJOR ${CMAKE_MATCH_1})
-+ math(EXPR _FMT_VERSION_MINOR ${CMAKE_MATCH_2})
-+ math(EXPR _FMT_VERSION_PATCH ${CMAKE_MATCH_3})
-+ set(${CMAKE_FIND_PACKAGE_NAME}_VERSION "${_FMT_VERSION_MAJOR}.${_FMT_VERSION_MINOR}.${_FMT_VERSION_PATCH}")
-+endif()
-+
- target_compile_definitions(fmt::fmt-header-only
- INTERFACE
-- FMT_EXCEPTIONS=0
-+ $<IF:$<VERSION_GREATER_EQUAL:${${CMAKE_FIND_PACKAGE_NAME}_VERSION},11.2.0>,FMT_USE_EXCEPTIONS,FMT_EXCEPTIONS>=0
- FMT_HEADER_ONLY=1)
diff --git a/net-p2p/transmission-components/files/patch-cmake_FindLibevent.cmake b/net-p2p/transmission-components/files/patch-cmake_FindLibevent.cmake
new file mode 100644
index 000000000000..7ca6f8d04908
--- /dev/null
+++ b/net-p2p/transmission-components/files/patch-cmake_FindLibevent.cmake
@@ -0,0 +1,92 @@
+--- cmake/FindLibevent.cmake.orig 2026-02-21 07:48:47 UTC
++++ cmake/FindLibevent.cmake
+@@ -0,0 +1,89 @@
++if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
++ set(LIBEVENT_STATIC_LINK TRUE)
++endif()
++find_package(${CMAKE_FIND_PACKAGE_NAME} QUIET NO_MODULE)
++
++include(FindPackageHandleStandardArgs)
++if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
++ find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} CONFIG_MODE HANDLE_COMPONENTS)
++ return()
++endif()
++
++if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
++ set(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ if(WIN32)
++ set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ else()
++ set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ endif()
++endif()
++
++if(UNIX)
++ find_package(PkgConfig QUIET)
++endif()
++
++foreach(_comp IN LISTS ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS)
++ if(UNIX)
++ pkg_check_modules(_EVENT2_${_comp} QUIET libevent-${_comp})
++
++ if(_EVENT2_${_comp}_VERSION AND NOT ${CMAKE_FIND_PACKAGE_NAME}_VERSION)
++ set(${CMAKE_FIND_PACKAGE_NAME}_VERSION ${_EVENT2_${_comp}_VERSION})
++ endif()
++ endif()
++
++ # All components share the same include directory
++ find_path(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
++ NAMES event2/event.h
++ HINTS ${_EVENT2_${_comp}_INCLUDEDIR})
++
++ find_library(${CMAKE_FIND_PACKAGE_NAME}_${_comp}_LIBRARY
++ NAMES "event_${_comp}"
++ HINTS ${_EVENT2_${_comp}_LIBDIR})
++
++ mark_as_advanced(${CMAKE_FIND_PACKAGE_NAME}_${_comp}_LIBRARY)
++
++ set(${CMAKE_FIND_PACKAGE_NAME}_${_comp}_FOUND FALSE)
++ if(${CMAKE_FIND_PACKAGE_NAME}_${_comp}_LIBRARY)
++ set(${CMAKE_FIND_PACKAGE_NAME}_${_comp}_FOUND TRUE)
++ endif()
++endforeach()
++
++if(NOT ${CMAKE_FIND_PACKAGE_NAME}_VERSION AND ${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)
++ file(STRINGS "${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR}/event2/event-config.h" _EVENT_VERSION_STR
++ REGEX "^#define[\t ]+EVENT__VERSION[\t ]+\"[^\"]+\"")
++ if(_EVENT_VERSION_STR MATCHES "\"([^\"]+)\"")
++ set(${CMAKE_FIND_PACKAGE_NAME}_VERSION "${CMAKE_MATCH_1}")
++ endif()
++endif()
++
++find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME}
++ HANDLE_COMPONENTS
++ REQUIRED_VARS
++ ${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
++ VERSION_VAR ${CMAKE_FIND_PACKAGE_NAME}_VERSION)
++
++if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
++ set(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
++
++ set(${CMAKE_FIND_PACKAGE_NAME}_LIBRARIES)
++ foreach(_comp IN LISTS ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS)
++ if(NOT TARGET libevent::${_comp})
++ add_library(libevent::${_comp} INTERFACE IMPORTED)
++ target_include_directories(libevent::${_comp}
++ INTERFACE
++ ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
++ target_link_libraries(libevent::${_comp}
++ INTERFACE
++ ${${CMAKE_FIND_PACKAGE_NAME}_${_comp}_LIBRARY})
++ endif()
++
++ list(APPEND ${CMAKE_FIND_PACKAGE_NAME}_LIBRARIES libevent::${_comp})
++ endforeach()
++endif()
++
++mark_as_advanced(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)
++
++if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
++ set(CMAKE_FIND_LIBRARY_SUFFIXES ${${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
++ unset(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
++endif()
diff --git a/net-p2p/transmission-components/files/patch-cmake_FindRapidJSON.cmake b/net-p2p/transmission-components/files/patch-cmake_FindRapidJSON.cmake
new file mode 100644
index 000000000000..53bc1d24d99b
--- /dev/null
+++ b/net-p2p/transmission-components/files/patch-cmake_FindRapidJSON.cmake
@@ -0,0 +1,47 @@
+--- cmake/FindRapidJSON.cmake.orig 2026-01-26 23:59:25 UTC
++++ cmake/FindRapidJSON.cmake
+@@ -1,9 +1,37 @@
+-add_library(RapidJSON INTERFACE IMPORTED)
++find_package(${CMAKE_FIND_PACKAGE_NAME} QUIET NO_MODULE)
+
+-target_include_directories(RapidJSON
+- INTERFACE
+- ${TR_THIRD_PARTY_SOURCE_DIR}/rapidjson/include)
++include(FindPackageHandleStandardArgs)
++if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
++ find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} CONFIG_MODE)
++ return()
++endif()
+
+-target_compile_definitions(RapidJSON
+- INTERFACE
+- RAPIDJSON_HAS_STDSTRING=1)
++if(UNIX)
++ find_package(PkgConfig QUIET)
++ pkg_check_modules(_RAPIDJSON QUIET RapidJSON)
++endif()
++
++find_path(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
++ NAMES rapidjson/rapidjson.h
++ HINTS ${_RAPIDJSON_INCLUDEDIR})
++
++if(_RAPIDJSON_VERSION)
++ set(${CMAKE_FIND_PACKAGE_NAME}_VERSION ${_RAPIDJSON_VERSION})
++endif()
++
++find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME}
++ REQUIRED_VARS ${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
++ VERSION_VAR ${CMAKE_FIND_PACKAGE_NAME}_VERSION)
++
++if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
++ set(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
++
++ if(NOT TARGET RapidJSON)
++ add_library(RapidJSON INTERFACE IMPORTED)
++ target_include_directories(RapidJSON
++ INTERFACE
++ ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
++ endif()
++endif()
++
++mark_as_advanced(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)
diff --git a/net-p2p/transmission-components/files/patch-cmake_FindUtfCpp.cmake b/net-p2p/transmission-components/files/patch-cmake_FindUtfCpp.cmake
deleted file mode 100644
index 49ad66cf5725..000000000000
--- a/net-p2p/transmission-components/files/patch-cmake_FindUtfCpp.cmake
+++ /dev/null
@@ -1,8 +0,0 @@
---- cmake/FindUtfCpp.cmake.orig 2024-02-22 15:49:05 UTC
-+++ cmake/FindUtfCpp.cmake
-@@ -2,4 +2,4 @@ target_include_directories(utf8::cpp
-
- target_include_directories(utf8::cpp
- INTERFACE
-- ${CMAKE_CURRENT_LIST_DIR}/../third-party/utfcpp/source)
-+ ${CMAKE_INSTALL_PREFIX}/include/utf8cpp)
diff --git a/net-p2p/transmission-components/files/patch-cmake_Finddht.cmake b/net-p2p/transmission-components/files/patch-cmake_Finddht.cmake
new file mode 100644
index 000000000000..7aa0b19bd904
--- /dev/null
+++ b/net-p2p/transmission-components/files/patch-cmake_Finddht.cmake
@@ -0,0 +1,42 @@
+--- cmake/Finddht.cmake.orig 2026-01-31 08:51:53 UTC
++++ cmake/Finddht.cmake
+@@ -0,0 +1,39 @@
++if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
++ set(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ if(WIN32)
++ set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ else()
++ set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ endif()
++endif()
++
++if(UNIX)
++ find_package(PkgConfig QUIET)
++ pkg_check_modules(_DHT QUIET libdht)
++endif()
++
++find_path(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
++ NAMES dht/dht.h
++ HINTS ${_DHT_INCLUDEDIR})
++find_library(${CMAKE_FIND_PACKAGE_NAME}_LIBRARY
++ NAMES dht
++ HINTS ${_DHT_LIBDIR})
++
++include(FindPackageHandleStandardArgs)
++
++find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME}
++ REQUIRED_VARS
++ ${CMAKE_FIND_PACKAGE_NAME}_LIBRARY
++ ${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)
++
++if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
++ set(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
++ set(${CMAKE_FIND_PACKAGE_NAME}_LIBRARIES ${${CMAKE_FIND_PACKAGE_NAME}_LIBRARY})
++endif()
++
++mark_as_advanced(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR ${CMAKE_FIND_PACKAGE_NAME}_LIBRARY)
++
++if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
++ set(CMAKE_FIND_LIBRARY_SUFFIXES ${${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
++ unset(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
++endif()
diff --git a/net-p2p/transmission-components/files/patch-cmake_Findfmt.cmake b/net-p2p/transmission-components/files/patch-cmake_Findfmt.cmake
new file mode 100644
index 000000000000..377f0c0c2f5a
--- /dev/null
+++ b/net-p2p/transmission-components/files/patch-cmake_Findfmt.cmake
@@ -0,0 +1,74 @@
+--- cmake/Findfmt.cmake.orig 2026-01-31 08:51:45 UTC
++++ cmake/Findfmt.cmake
+@@ -0,0 +1,71 @@
++find_package(${CMAKE_FIND_PACKAGE_NAME} QUIET NO_MODULE)
++
++include(FindPackageHandleStandardArgs)
++if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
++ find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} CONFIG_MODE)
++ return()
++endif()
++
++if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
++ set(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ if(WIN32)
++ set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ else()
++ set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ endif()
++endif()
++
++if(UNIX)
++ find_package(PkgConfig QUIET)
++ pkg_check_modules(_FMT QUIET fmt)
++endif()
++
++find_path(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
++ NAMES fmt/core.h
++ HINTS ${_FMT_INCLUDEDIR})
++
++if(_FMT_VERSION)
++ set(${CMAKE_FIND_PACKAGE_NAME}_VERSION ${_FMT_VERSION})
++elseif(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)
++ set(_FMT_VERSION_H_PATH "${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR}/fmt/base.h")
++ if(NOT EXISTS "${_FMT_VERSION_H_PATH}")
++ # fmt < 11
*** 1158 LINES SKIPPED ***