Commit Graph

97 Commits

Author SHA1 Message Date
Daniel Golle
18e9fc954f build: fix external project builds with LTO-enabled toolchains (#8369)
* build: propagate LTO-aware archiver tools (CMAKE_AR, CMAKE_NM, CMAKE_RANLIB) to external projects
2026-02-04 22:45:06 -06:00
Yat Ho
59939ad4e3 build: improve building with system libevent (#8223)
* build: improve building with system libevent

* chore: remove legacy `tr_add_external_auto_library` macro
2026-02-04 13:36:04 -06:00
Charles Kerr
90402fd97b refactor: move StatsMode to tr::app (#8330)
* refactor: add StatsMode to libtransmission-app

* test: add display-mode unit tests

* feat: add apicompat for StatsMode

* refactor: use StatsMode in Qt client

* refactor: add template method for gtr_set_pref()

* refactor: use StatsMode in GTK client

* ci: use the all-tests alias instead of hardcoding tests

* ci: copy runtime DLLS into test output directory for Windows test binaries
2026-02-03 09:52:49 -06:00
Yat Ho
3d09c4df4e build: support building with system fast_float (#8206) 2026-01-30 15:20:21 -06:00
Yat Ho
63226411db build: improve building with system miniupnpc (#8190) 2026-01-29 15:29:52 -06:00
Yat Ho
357004529c build: improve building with system libutp (#8194) 2026-01-28 15:45:52 -06:00
Yat Ho
e687db8f26 build: support building with system utf8cpp (#8191) 2026-01-28 15:33:50 -06:00
Yat Ho
02ca4e3e2b build: support building with system gtest (#8196)
* build: support building with system gtest

* chore: include gtest headers with h-char include
2026-01-27 20:15:11 -06:00
Yat Ho
c738b9fe4d build: support building with system wide-integer (#8209) 2026-01-27 12:22:32 -06:00
Yat Ho
bcac3bd461 build: support building with system small (#8208) 2026-01-26 10:01:51 -06:00
Yat Ho
d9585782a6 build: improve building with system crc32c (#8197) 2026-01-25 20:03:14 -06:00
Yat Ho
daf15c01c3 build: improve building with system dht (#8192) 2026-01-25 19:12:58 -06:00
Yat Ho
4a900b10e7 build: improve building with system psl (#8193) 2026-01-25 12:11:57 -06:00
Yat Ho
0845c44c14 build: improve building with system libnatpmp (#8189) 2026-01-25 12:11:31 -06:00
Yat Ho
b617dea8ad build: improve building with system libdeflate (#8188) 2026-01-23 11:05:03 -06:00
Yat Ho
665f689e44 build: support building with system {fmt} (#8187) 2026-01-23 11:04:16 -06:00
Yat Ho
9cee1d3d3b build: improve building with system libb64 (#8195) 2026-01-23 11:02:41 -06:00
Yat Ho
16ec031a28 build: infrastructure for third party submodules (#8178) 2026-01-21 23:38:34 -06:00
Charles Kerr
8dea0e863f fix: several CI errors (#8124)
* Revert "build(cmake): support building with (almost) all system 3rd-party libraries (#7554)"

This reverts commit a89ca4f2c9.

* fixup! refactor: use a map of getters, setters for `session_get` and `session_set` properties (#8024)

fix: capture-by-reference error in session_accessors()

* fix: 'Qt depends on a UTF-8 locale' CI warning

* fix: 'qt.qpa.xcb: could not connect to display' CI error
2026-01-13 13:16:40 -06:00
Yat Ho
a89ca4f2c9 build(cmake): support building with (almost) all system 3rd-party libraries (#7554)
* build: overhaul tr_add_external_auto_library

* build: use package-provided CMake config file libevent

* build: use package-provided CMake config file miniupnpc

* build: update libutp find module

* build: make LIBNAME an optional parameter

* build: use package-provided CMake config file libdeflate

* build: update libb64 find module

* build: update libnatpmp find module

* build: update libpsl find module

* build: support system fast_float library

* chore: reformat long brew commands

* build: support system fmt library

* build: support system rapidjson library

* build: support system small library

* build: support system library utf8cpp

* build: support system library WideInteger

* build: support system library gtest

* fix: incorrectly labeled test suites

* build: remove unused parameters from tr_add_external_auto_library

* build: update crc32c cmake script

* fix: dht system library

* fix: add libutp interface target

* code review: move TrGtest.cmake

* code review: move tr_get_fmt_version into Findfmt.cmake

* code review: use option() for gtest

* code review: move find_package(PkgConfig) out of loop

* build: delete FindCrc32c.cmake

Impossible to parse package version from distributed source files.

* code review: Finddht.cmake

* build: delete FindFastFloat.cmake

Impossible to parse package version from distributed source files.

* code review: Findfmt.cmake

* code review: Findlibb64.cmake

* code review: Findlibdeflate.cmake

* code review: Findlibevent.cmake

* code review: Findlibnatpmp.cmake

* code review: Findlibpsl.cmake

* code review: Findlibutp.cmake

* code review: Findlibminiupnpc.cmake

* code review: FindRapidJSON.cmake

* build: delete FindSmall.cmake

Impossible to parse package version from distributed source files.

* build: only accept cmake config package for utf8cpp

Impossible to parse package version from distributed source files.

* build: delete FindWideInteger.cmake

Impossible to parse package version from distributed source files.

* build: add `USE_SYSTEM_DEFAULT`

* ci: drop Fedora 40 and adopt Fedora 43

* ci: try to silence system header warnings

* ci: use `cmake --install`

* Revert "build: only accept cmake config package for utf8cpp"

This reverts commit 2158d631fd.

* build: harden utf8cpp find module

* chore: bump wide-integer

Pick up bf9398f9da and bcc726a30f

* refactor: gtest should be included with angled brackets

Now that gtest is built as a system library, it should be included with angled brackets instead of quotes.

* code review: fixup libutp variables before `find_package_handle_standard_args`

* code review: define `WIDE_INTEGER_HAS_LIMB_TYPE_UINT64` only for targets depending on WideInteger

* chore: bump wide-integer

Pickup 4b2258acac so that wide-integer tests won't run in Transmission project.
2026-01-12 09:04:47 -06:00
github-actions[bot]
5ce17df2e5 chore: update copyright years (#8039)
* chore: update copyright year in COPYING

* chore: update copyright year in user-facing files (1)

* chore: update copyright year in user-facing files (2)

* chore: update copyright year in cmake/transmission.rc.in

---------

Co-authored-by: github-actions <github-actions@github.com>
2025-12-31 21:59:44 -06:00
niol
db290f954b fix libfmt version probe with libfmt < 11 (#7772) 2025-11-12 16:31:40 -06:00
Azamat H. Hackimov
5180e3b69c Generate imported targets for MbedTLS (#7631)
* Generate imported targets for MbedTLS

This change allows to use MbedTLS 3.6 config module without significant
code alteration which simplifies integration with future versions of
MbedTLS.

Signed-off-by: Azamat H. Hackimov <azamat.hackimov@gmail.com>

* Update MBEDTLS_MINIMUM to 2.7

Code expects API from MbedTLS 2.x or later.

Signed-off-by: Azamat H. Hackimov <azamat.hackimov@gmail.com>

---------

Signed-off-by: Azamat H. Hackimov <azamat.hackimov@gmail.com>
2025-11-08 08:01:43 -06:00
Yat Ho
0715897fc8 feat: use canonical peer priority to decide which peers to keep (#6981)
* feat: CRC32-C

* feat: canonical peer priority calculation bep-40

* test: add test cases for IPv4 canonical peer priority

* refactor: compare by canonical priority

* fix: use network byte order for peer ports

* test: more cases

* build: xcode

Co-authored-by: Dzmitry Neviadomski <nevack.d@gmail.com>

* ci: test system crc32c library

---------

Co-authored-by: Dzmitry Neviadomski <nevack.d@gmail.com>
2025-10-25 12:05:20 -05:00
Yat Ho
fb25228f24 chore: bump {fmt} to 11.2.0 and fix compatibility (#7612)
* chore: bump fmt to 11.2.0

Acquire 6797f0c39a, which fixes compile error on GCC 15.1.

Acquire
9f269062a7,
which fixes buffer overflow in NetBSD 10.1 on GCC 10.5.

Replace `fmt::localtime` with `std::localtime`, as `fmt::` is now
deprecated.

* fix: format timezone ourselves on Windows

{fmt} 11.2.0 removed the ability to format `std::tm` with the format specifier `%z` on Windows, for a good reason. Ref: https://github.com/fmtlib/fmt/issues/4444

This forces us to implement our own solution on Windows as there's no alternative.

* fix: support `FMT_USE_EXCEPTIONS`
2025-10-14 12:53:08 -05:00
Yat Ho
52a12200b2 chore: bump wide-integer (#7383)
* chore: bump wide_integer

* refactor: use `uint64_t` for better performance
2025-03-04 08:19:01 -06:00
github-actions[bot]
aa9aff1131 chore: update copyright years (#7359) 2025-01-01 12:04:53 +00:00
niol
d42d0f3f3f build with -latomic on platforms that need it (#6774) 2024-06-04 21:59:13 +01:00
Yat Ho
78027a8e5b refactor: cleanup build for miniupnp (#6665)
* fix: remove redundant/outdated miniupnp cmake definitions

* refactor: simplify miniupnpc includes

* fix path to miniupnp

* fix: Xcode project

* fixup! fix: Xcode project

* code review: Xcode changes from mikedld

* refactor: drop miniupnpc support below `1.7`
2024-06-01 20:10:52 +01:00
Geoffrey Bonneville
7030b53e2e android patches for ndk (#6024)
* android patches for ndk

* Update libtransmission/file-capacity.cc

Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>

* TrMacros: Move common & android vars

* Build android in CI

* Use vcpkg packages for curl & openssl

* Update CI for android

* Fix ndkVersion used with gradle

* Restore actions triggers events

* CMakeLists: Remove cond where curl is not found

* Use vcpkg tag instead of commit hash

Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>

* TrMacros.cmake: clean unused variables & add vcpkg cond

* Remove quotes around VcpkgAndroid inclusion

Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>

* actions: split steps to install vcpkg packages

* Build for android arm64

* actions: add make-android condition

* Revert "Use vcpkg tag instead of commit hash"

This reverts commit 65819026b1.

* build.gradle: use cmake version 3.22.1

* actions: use vcpkg 2024.01.12

* actions: Add ninja-build dependency

---------

Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
2024-01-21 15:27:24 +00:00
github-actions[bot]
1c382cb97e chore: update copyright years (#6470) 2024-01-03 21:33:30 -06:00
Julien
8ac323d5d6 chore: removed copyright timespans in headers (#4850) 2023-11-01 16:11:11 -05:00
Mike Gelfand
1c421d6d23 Minor CMake maintainability improvements (#6186)
* Prefer `PROJECT_{SOURCE,BINARY}_DIR` to `CMAKE_` ones

* Extend use of 3rd-party dir vars to reduce duplication

* Fix typo in submodule repo name

* Remove `CURL::libcurl` target fallback

The target is always available since CMake 3.12, which is our current
minimum version.
2023-10-30 20:44:34 +03:00
Yat Ho
2130eb941a refactor: drop jsonsl in favour of RapidJSON (#6138) 2023-10-21 14:00:12 -05:00
Yat Ho
bb125b5e1e fix: wrong target name in FindSmall.cmake (#6128) 2023-10-18 15:18:38 -05:00
Charles Kerr
432fc9bafc refactor: add libsmall dependency (#5649)
* refactor: add small dependency

* refactor: use small in variant.cc

* refactor: use small in cache.h
2023-06-20 22:50:36 -05:00
Mike Gelfand
88556bd859 Fix libdeflate find module never finding anything (#4968)
`DEFLATE_VERSION` was never set but was listed as required. Move it from
`REQUIRED_VARS` to `VERSION_VAR` and populate properly.
2023-02-20 21:09:24 +00:00
Mike Gelfand
c5b1df0daa Support in-source builds (#4955)
* Support in-source builds

Don't copy third-party directories into themselves (actually, don't copy
them at all) by switching from `URL` to `SOURCE_DIR`. Separate build,
source, and install directories for third-party libraries.

* Trigger builds on changes to cmake/

That directory contains TrMacros.cmake which influences build logic in
other places.
2023-02-19 16:10:25 +00:00
Bheesham Persaud
05e79d01db build: Use CXX symbol checking for libutp (#4909) 2023-02-18 15:10:50 -06:00
Mike Gilbert
4a3c217069 build: pass --no-warn-unused-cli to child cmake process (#4807)
Hides a warning when building the dht library.

CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_CXX_FLAGS
    CMAKE_INSTALL_LIBDIR
2023-02-11 00:02:50 -06:00
Mike Gelfand
39acf93f1a Always build bundled libb64 and libutp libraries as static (#4810) 2023-02-11 00:08:55 +00:00
Mike Gelfand
44546674d9 Include libb64 and libutp as subprojects (#4762)
* Include libb64 and libutp as subprojects

* Build 3rd-party subprojects before CodeQL analysis
2023-02-09 19:12:25 +00:00
Charles Kerr
c03e9b1a8e fix: largefile support cmake tests (#4627) 2023-01-21 12:20:10 -06:00
Mike Gelfand
57e6b06921 Modernize CMake code (ongoing refactoring) (#4515)
* Use imported CMake target for CURL

* Use imported CMake target for fmtlib

* Use imported CMake target for WideInteger

* Use imported CMake target for FastFloat

* Use imported CMake target for UtfCpp

* Use imported CMake target for Threads

* Use imported CMake target for Iconv

* Use imported CMake target for crypto backend

* Use imported CMake target for GTK

* Use imported CMake target for Qt

* Use imported CMake target for deflate

* Use imported CMake target for libevent

* Use imported CMake target for natpmp

* Use imported CMake target for miniupnpc

* Use imported CMake target for dht

* Use imported CMake target for psl

* Use imported CMake target for libutp

* Use imported CMake target for libb64

* Use include directories from libtransmission target
2023-01-02 16:23:51 +00:00
Mike Gelfand
bc380511db Modernize CMake code (ongoing refactoring) (#4507)
* Reformat CMake code

* Bump minimum CMake version to 3.12

* Add target sources separately via `target_source()`

* Make `tr_win32_app_info()` add target sources on its own

* Don't use `include_directories()`

* Don't use `add_definitions()`

* Limit use of `add_compile_options()`

* Move VDKQueue target declaration to a subdirectory

* Add `tr_disable_source_files_compile()` helper

* Add `tr_target_glib_resources()` helper

* Add `tr_gettext_msgfmt()` helper

* Enable AUTOUIC for Qt client

* Enable AUTORCC for Qt client

* Remove AUTO{MOC,RCC,UIC} source group overrides

* Add `tr_target_idl_files()` helper

* Move source group setup to `tr_qt_add_translation()`

* Add `tr_target_xib_files()` helper

* Prefer `target_sources()` to intermediate variables

* Use explicit visibility versions of `target_*()` commands

* Prefer genexes to conditions in `target_*()` commands

* Add `tr_allow_compile_if()` helper

* Leave only top-level `project()`, remove the rest

* Minor fixups

* Fixup Mac QL plugin install

* Fixup IDE target folders and source groups
2023-01-01 19:49:48 +00:00
Mike Gelfand
f7edcfcb2a Drop obsolete CyaSSL and PolarSSL crypto backends (#4495)
* Drop support for CyaSSL (keep WolfSSL)

* Drop support for PolarSSL (keep MbedTLS)
2022-12-29 22:38:04 +00:00
Mike Gelfand
43acd7e3e4 Remove Xcode project in favor of CMake (#4147)
* Compile images into an assets catalog

* Optionally sign resulting Mac bundle

* Move 3rd-party/utility/test targets to their own folders

* Enable ARC via compile options unconditionally

* Install base and localized resources into correct directory

This seems like a Xcode quirk: if subdirectory containing the resource file
matches the destination directory name (and probably if there's more than one
resource file being installed there), the resulting folder structure then
contains an extra subdirectory, i.e. Resources/dirname/dirname/resname.

* Group source files for better structure in IDEs (Xcode, VS)

* Remove Xcode project

Using Xcode is still possible via "Xcode" CMake generator.

* Use ad-hoc signature if one is not specified

* Always use ad-hoc signature on link, leave proper signing to CPack

* Install localized resources into correct directory (QL plugin)

* Don't include CTest (we don't use additional targets it provides)

* Revert "Remove Xcode project"

This reverts commit dc069f654f.
2022-11-12 20:01:57 +00:00
Mike Gelfand
49a3813a23 Check for functions we use when looking for system libutp (#4072)
Since libutp provides no version information, and one readily noticeable
change between the old and the new API is the change in public function
names, check to see if the functions we use are available. Old version
won't have them, and so any old system libutp will be discarded in AUTO
mode and result in an error in ON mode for USE_SYSTEM_UTP option.
2022-11-02 11:03:57 +00:00
Mike Gelfand
da27c3d18d Prefer ayatana-appindicator over appindicator, if present (#4001) 2022-10-20 18:15:13 +01:00
Charles Kerr
89d6533cd7 build: support semver versioning (#3867)
* build: semver versioning

Xref: https://github.com/transmission/transmission/issues/1037

* test: add base62 tests for client-id

* build: include PATCH_VERSION in Transmission.rc.in

* build: semver versioning in version.h

* fixup! build: semver versioning in version.h

undo experimental verison changes that were made for testing purposes

* Fixup version in MSI package filename

Co-authored-by: Mike Gelfand <mikedld@mikedld.com>
2022-10-05 16:53:10 -05:00