/ 10 Notes / Transmission.md
Transmission.md
  1  ---
  2  tags:
  3    - bittorrent
  4  link: https://transmissionbt.com
  5  source: https://github.com/transmission/transmission
  6  related-to:
  7  ---
  8  
  9  #bittorrent 
 10  
 11  | link       | https://transmissionbt.com                   |
 12  | ---------- | -------------------------------------------- |
 13  | source     | https://github.com/transmission/transmission |
 14  | related-to |                                              |
 15  
 16  [[Learn BitTorrent]] client. One of the three popular clients, the other are [[Deluge]] and [[qBittorrent]], with the most attractive looking website. Comparing to the other two, Transmission does not depend on [[libtorrent-rasterbar]], but rather has its own implementation of the BitTorrent protocol.
 17  
 18  > As noted in GitHub’s REDME, [Transmission's documentation](https://github.com/transmission/transmission/blob/main/docs/README.md) is currently out-of-date, but the team has recently begun a new project to update it and is looking for volunteers. If you're interested, please feel free to submit pull requests!
 19  
 20  It supports all major OS and has a native macos support.
 21  
 22  The latest release is from 30 May 2024.
 23  
 24  ### How does it look like?
 25  
 26  ![[Pasted image 20241107085814.png]]
 27  or in light mode:
 28  
 29  ![[Pasted image 20241107091409.png]]
 30  ![[Pasted image 20241107092811.png]]
 31  
 32  Transmission does not seem to support version 2 torrent files and magnet links.
 33  
 34  #### Settings
 35  
 36  - Network
 37  	![[Pasted image 20241107094119.png]]
 38  - Peers
 39  		![[Pasted image 20241107094219.png]]
 40  Transmission has the most limited settings that are available to the user.
 41  There are also GTK and QT versions, which on a Mac look just terrible... (I did not yet check how they build and look on ubuntu).
 42  
 43  ### Building
 44  
 45  After cloning, building Transmission on macOS went smoothly. Only after adding `gtk` and `qt` dependencies started to brake the build.
 46  Their CMake configuration is quite clean, yet, once it detects GTK it goes through some "branches" even when they are not needed for the given build configuration. Thus if you installed GTK deps:
 47  
 48  ```
 49  brew install gtk4 gtkmm4
 50  ```
 51  
 52  You will start getting errors like this:
 53  
 54  ```bash
 55  CMake Error in gtk/CMakeLists.txt:
 56    Imported target "transmission::gtk_impl" includes non-existent path
 57  
 58      "/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/include/ffi"
 59  
 60    in its INTERFACE_INCLUDE_DIRECTORIES.  Possible reasons include:
 61  
 62    * The path was deleted, renamed, or moved to another location.
 63  
 64    * An install or uninstall procedure did not complete successfully.
 65  
 66    * The installation package was faulty and references files it does not
 67    provide.
 68  ```
 69  
 70  Well, the problem here is wrong macOS version. To fix the build, first check which macOS path is the correct one for your system:
 71  
 72  ```bash
 73  xcrun -sdk macosx --show-sdk-path
 74  ```
 75  
 76  and then retrieve the paths currently included by running:
 77  
 78  ```bash
 79  pkg-config --cflags gtkmm-4.0
 80  pkg-config --cflags gtk4
 81  ```
 82  
 83  Then in `CMakeLists.txt` manually add the combined paths returned by the `pkg-config` commands that you just run.
 84  
 85  In my case, I changed:
 86  
 87  ```CMake
 88  if(GTK_FOUND)
 89      add_library(transmission::gtk_impl INTERFACE IMPORTED)
 90  
 91      target_compile_options(transmission::gtk_impl
 92          INTERFACE
 93              ${GTK${GTK_VERSION}_CFLAGS_OTHER})
 94  
 95      target_include_directories(transmission::gtk_impl
 96          INTERFACE
 97              ${GTK${GTK_VERSION}_INCLUDE_DIRS})
 98  
 99      target_link_directories(transmission::gtk_impl
100          INTERFACE
101              ${GTK${GTK_VERSION}_LIBRARY_DIRS})
102  
103      target_link_libraries(transmission::gtk_impl
104          INTERFACE
105              ${GTK${GTK_VERSION}_LIBRARIES})
106  endif()
107  ```
108  
109  to:
110  
111  ```CMake
112  if(GTK_FOUND)
113      add_library(transmission::gtk_impl INTERFACE IMPORTED)
114  
115      target_compile_options(transmission::gtk_impl
116          INTERFACE
117              ${GTK${GTK_VERSION}_CFLAGS_OTHER})
118  
119      target_include_directories(transmission::gtk_impl
120          INTERFACE
121              /opt/homebrew/Cellar/gtk4/4.16.3/include/gtk-4.0 
122              /opt/homebrew/Cellar/pango/1.54.0/include/pango-1.0 
123              /opt/homebrew/Cellar/harfbuzz/10.0.1_1/include/harfbuzz 
124              /opt/homebrew/Cellar/fribidi/1.0.16/include/fribidi 
125              /opt/homebrew/Cellar/graphite2/1.3.14/include 
126              /opt/homebrew/Cellar/gdk-pixbuf/2.42.12/include/gdk-pixbuf-2.0 
127              /opt/homebrew/Cellar/libtiff/4.7.0/include 
128              /opt/homebrew/opt/zstd/include 
129              /opt/homebrew/Cellar/xz/5.6.3/include 
130              /opt/homebrew/Cellar/jpeg-turbo/3.0.4/include 
131              /opt/homebrew/Cellar/cairo/1.18.2/include/cairo 
132              /opt/homebrew/Cellar/fontconfig/2.15.0/include 
133              /opt/homebrew/opt/freetype/include/freetype2 
134              /opt/homebrew/opt/libpng/include/libpng16 
135              /opt/homebrew/Cellar/libxext/1.3.6/include 
136              /opt/homebrew/Cellar/libxrender/0.9.11/include 
137              /opt/homebrew/Cellar/libx11/1.8.10/include 
138              /opt/homebrew/Cellar/libxcb/1.17.0/include 
139              /opt/homebrew/Cellar/libxau/1.0.11/include 
140              /opt/homebrew/Cellar/libxdmcp/1.1.5/include 
141              /opt/homebrew/Cellar/pixman/0.42.2/include/pixman-1 
142              /opt/homebrew/Cellar/graphene/1.10.8/include/graphene-1.0 
143              /opt/homebrew/Cellar/graphene/1.10.8/lib/graphene-1.0/include 
144              /opt/homebrew/Cellar/glib/2.82.2/include 
145              /opt/homebrew/Cellar/glib/2.82.2/include/glib-2.0 
146              /opt/homebrew/Cellar/glib/2.82.2/lib/glib-2.0/include 
147              /opt/homebrew/opt/gettext/include 
148              /opt/homebrew/Cellar/pcre2/10.44/include 
149              /opt/homebrew/Cellar/xorgproto/2024.1/include 
150              /Library/Developer/CommandLineTools/SDKs/MacOSX15.0.sdk/usr/include/ffi
151              /opt/homebrew/Cellar/gtkmm4/4.16.0/include/gtkmm-4.0 
152              /opt/homebrew/Cellar/gtkmm4/4.16.0/lib/gtkmm-4.0/include 
153              /opt/homebrew/Cellar/pangomm/2.54.0/include/pangomm-2.48 
154              /opt/homebrew/Cellar/pangomm/2.54.0/lib/pangomm-2.48/include 
155              /opt/homebrew/Cellar/glibmm/2.82.0/include/giomm-2.68 
156              /opt/homebrew/Cellar/glibmm/2.82.0/lib/giomm-2.68/include 
157              /opt/homebrew/Cellar/glib/2.82.2/include/gio-unix-2.0 
158              /opt/homebrew/Cellar/glibmm/2.82.0/include/glibmm-2.68 
159              /opt/homebrew/Cellar/glibmm/2.82.0/lib/glibmm-2.68/include 
160              /opt/homebrew/Cellar/glib/2.82.2/include 
161              /opt/homebrew/Cellar/cairomm/1.18.0/include/cairomm-1.16 
162              /opt/homebrew/Cellar/cairomm/1.18.0/lib/cairomm-1.16/include 
163              /opt/homebrew/Cellar/libsigc++/3.6.0/include/sigc++-3.0 
164              /opt/homebrew/Cellar/libsigc++/3.6.0/lib/sigc++-3.0/include 
165              /opt/homebrew/Cellar/gtk4/4.16.3/include/gtk-4.0/unix-print
166      )
167  
168      target_link_directories(transmission::gtk_impl
169          INTERFACE
170              ${GTK${GTK_VERSION}_LIBRARY_DIRS})
171  
172      target_link_libraries(transmission::gtk_impl
173          INTERFACE
174              ${GTK${GTK_VERSION}_LIBRARIES})
175  endif()
176  ```
177  
178  Just make sure, you use the path returned by `pkg-config` commands on your machine. Above, is just example.
179  
180  Remember that after you install GTK dependencies also the QT and native macOS builds will fail if you do not apply the above fix. You can also just remove `gtk4` and  `gtkmm4`:
181  
182  ```bash
183  brew uninstall gtk4 gtkmm4 
184  ```
185  
186  and then use native Xcode project or CMake for macOS.