You've already forked qBittorrent
mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-10-21 13:52:16 +02:00
Compare commits
375 Commits
release-4.
...
release-4.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3f0e0a319a | ||
![]() |
0b4d9c72a7 | ||
![]() |
ff71f6bcd9 | ||
![]() |
7a5c5baad1 | ||
![]() |
a18976d0b5 | ||
![]() |
6d836ea49c | ||
![]() |
2e97311147 | ||
![]() |
57bc564b2c | ||
![]() |
1295f1e31f | ||
![]() |
4916ed0efb | ||
![]() |
f15f99cb27 | ||
![]() |
93365d3b20 | ||
![]() |
c756ab021d | ||
![]() |
34528dd544 | ||
![]() |
9380209afb | ||
![]() |
be2895ac6f | ||
![]() |
e26d4642b8 | ||
![]() |
f470972bd4 | ||
![]() |
443378c041 | ||
![]() |
e20dbe34a4 | ||
![]() |
86bde47a06 | ||
![]() |
e273c777c7 | ||
![]() |
17845c6b25 | ||
![]() |
27827ce16a | ||
![]() |
b444ecc6af | ||
![]() |
34995350ee | ||
![]() |
73ceee52f8 | ||
![]() |
85a3ba0eed | ||
![]() |
86cce76e9d | ||
![]() |
3358fd8e91 | ||
![]() |
120965f823 | ||
![]() |
e70ee9a5b6 | ||
![]() |
a2d8e84e83 | ||
![]() |
4a3648a693 | ||
![]() |
baad45e638 | ||
![]() |
d9cb00aab2 | ||
![]() |
d703d98836 | ||
![]() |
2f0646e7f0 | ||
![]() |
1a8a6dcef7 | ||
![]() |
990f961126 | ||
![]() |
06f04dea19 | ||
![]() |
8eced2ef1f | ||
![]() |
1e486ea92e | ||
![]() |
b47f38675e | ||
![]() |
864f3393a0 | ||
![]() |
cebef74326 | ||
![]() |
e257b35cac | ||
![]() |
1f33991e4b | ||
![]() |
794053f212 | ||
![]() |
3a130e1f74 | ||
![]() |
3423f93230 | ||
![]() |
2219167253 | ||
![]() |
a0a32b89a6 | ||
![]() |
59162bf426 | ||
![]() |
dfd148f55f | ||
![]() |
3af720b3bc | ||
![]() |
11240d0837 | ||
![]() |
e64fd9c544 | ||
![]() |
50ef812427 | ||
![]() |
bd4d2fa424 | ||
![]() |
e2ee928017 | ||
![]() |
62e71a15a4 | ||
![]() |
c62127e9f1 | ||
![]() |
2171d579ee | ||
![]() |
6e5a969e2d | ||
![]() |
bfbc7ef28a | ||
![]() |
b1cefbf9b5 | ||
![]() |
201638854e | ||
![]() |
847ecdeedb | ||
![]() |
acc159fa60 | ||
![]() |
bb7e80a8a6 | ||
![]() |
39973f1bb1 | ||
![]() |
1e9151364a | ||
![]() |
fd50d6e9af | ||
![]() |
427acf0c46 | ||
![]() |
f0a50424be | ||
![]() |
aded9afc0e | ||
![]() |
060b7480db | ||
![]() |
7f2a01dcd6 | ||
![]() |
fef0e70c9f | ||
![]() |
9cc112aa4e | ||
![]() |
44d4d41365 | ||
![]() |
a21c386dbf | ||
![]() |
1c4139906a | ||
![]() |
1a21f45c75 | ||
![]() |
0061b75200 | ||
![]() |
420c93a99e | ||
![]() |
93f1183cd7 | ||
![]() |
b8fcc1fed2 | ||
![]() |
2b91be1905 | ||
![]() |
7c9ef96ef8 | ||
![]() |
37b4b69199 | ||
![]() |
fc18e6f8df | ||
![]() |
4793a35e0b | ||
![]() |
4599da3ce1 | ||
![]() |
dec4e41fdd | ||
![]() |
780ece0c25 | ||
![]() |
aac8bfc398 | ||
![]() |
1a06a18336 | ||
![]() |
2d4f963d65 | ||
![]() |
b54fe08201 | ||
![]() |
d1d0300491 | ||
![]() |
7fff06f07b | ||
![]() |
3f9351042d | ||
![]() |
9e01dbab0f | ||
![]() |
d4a4b02cf6 | ||
![]() |
1f2c7a6671 | ||
![]() |
5a7b88c16c | ||
![]() |
93351476e4 | ||
![]() |
e1bfa95a63 | ||
![]() |
7030cc08e7 | ||
![]() |
a1da9812a5 | ||
![]() |
8ebc0f529c | ||
![]() |
e0d47649bc | ||
![]() |
524d503860 | ||
![]() |
cffafa8e9f | ||
![]() |
0fda919268 | ||
![]() |
7d98c34e17 | ||
![]() |
93147e787b | ||
![]() |
80435bae7e | ||
![]() |
b367e5c197 | ||
![]() |
5336c71da5 | ||
![]() |
27f6db976d | ||
![]() |
8223d61fa7 | ||
![]() |
3eef12bd8f | ||
![]() |
9e70a6c499 | ||
![]() |
fec3a87421 | ||
![]() |
59aac32eb9 | ||
![]() |
5ef3917769 | ||
![]() |
2f767d96d9 | ||
![]() |
de24fdfdc2 | ||
![]() |
3bb6a68c9d | ||
![]() |
f2406eb2f3 | ||
![]() |
4923ed7da0 | ||
![]() |
82056355f6 | ||
![]() |
f3bd2a295f | ||
![]() |
cc96760839 | ||
![]() |
ae95943f69 | ||
![]() |
d3067f939e | ||
![]() |
b6addd304c | ||
![]() |
d1ae6e8d58 | ||
![]() |
4445c2dab2 | ||
![]() |
fcc1564a62 | ||
![]() |
615eeb7144 | ||
![]() |
855bb118b5 | ||
![]() |
9f1eb3600a | ||
![]() |
fb885d89c1 | ||
![]() |
a846916beb | ||
![]() |
a574c4a70a | ||
![]() |
1e367f818d | ||
![]() |
00599c8f02 | ||
![]() |
332a836746 | ||
![]() |
a1992acc16 | ||
![]() |
c3f002a544 | ||
![]() |
c28cbe0a74 | ||
![]() |
435daaceed | ||
![]() |
e29ab0087b | ||
![]() |
aadd5a3312 | ||
![]() |
7e354ffad3 | ||
![]() |
ee6a071fb6 | ||
![]() |
bc8b838953 | ||
![]() |
5251d93b3d | ||
![]() |
84f0dbecfe | ||
![]() |
bba0c8b2cc | ||
![]() |
2f90be8bd2 | ||
![]() |
cb6b6296aa | ||
![]() |
9d25fdce2a | ||
![]() |
12b2732f1a | ||
![]() |
8c9ece73ee | ||
![]() |
a7db786387 | ||
![]() |
e5bf65c9bd | ||
![]() |
900e7d3a14 | ||
![]() |
f1ff74a926 | ||
![]() |
30bc4b837e | ||
![]() |
050a4f8b23 | ||
![]() |
487103d58f | ||
![]() |
eeea69d4c1 | ||
![]() |
00360ad418 | ||
![]() |
a733253ae5 | ||
![]() |
9788ee042b | ||
![]() |
e9c9ea3bba | ||
![]() |
312dfb989d | ||
![]() |
75deafe5b1 | ||
![]() |
4ca257a389 | ||
![]() |
03375a78f2 | ||
![]() |
423c7066d7 | ||
![]() |
5cd5cc71a8 | ||
![]() |
45d4d22055 | ||
![]() |
916a92aa0d | ||
![]() |
d1ebbcb35d | ||
![]() |
2743d998a8 | ||
![]() |
dbbfbaff9f | ||
![]() |
0be8439cf6 | ||
![]() |
66982c5524 | ||
![]() |
85af8547f7 | ||
![]() |
e26977ab2c | ||
![]() |
ec1cc783a6 | ||
![]() |
03b00ec045 | ||
![]() |
5e90156e9e | ||
![]() |
052206efa1 | ||
![]() |
305d73180b | ||
![]() |
80000bf0fd | ||
![]() |
06ebe756e8 | ||
![]() |
5fa3d9f19c | ||
![]() |
5b4c6d3665 | ||
![]() |
77bd0f17d1 | ||
![]() |
03a702cfbd | ||
![]() |
a932cd2ec1 | ||
![]() |
8e5743380a | ||
![]() |
8001eb0368 | ||
![]() |
f214dc88fc | ||
![]() |
5cff5ab135 | ||
![]() |
82ba154b64 | ||
![]() |
4ea44bbd2b | ||
![]() |
a5e68a8725 | ||
![]() |
70291014d1 | ||
![]() |
1aabcfc30c | ||
![]() |
aba80e2b1c | ||
![]() |
be683fbcd3 | ||
![]() |
2bcf09cfa5 | ||
![]() |
697325af63 | ||
![]() |
c21bd77be5 | ||
![]() |
d5430adaaa | ||
![]() |
9e99a0d3f5 | ||
![]() |
d088ab6f43 | ||
![]() |
820d510c12 | ||
![]() |
676847fcd0 | ||
![]() |
0204630ee6 | ||
![]() |
b515c7eda4 | ||
![]() |
73fcecac76 | ||
![]() |
a7b82ebcb5 | ||
![]() |
f8598b010d | ||
![]() |
93779bcc4b | ||
![]() |
938f5b9dd9 | ||
![]() |
3b4d9f49d5 | ||
![]() |
171c93af50 | ||
![]() |
6f81e40106 | ||
![]() |
e19b5cb2ce | ||
![]() |
2c69faca58 | ||
![]() |
9272151d0a | ||
![]() |
d45ebf5a43 | ||
![]() |
8074be7644 | ||
![]() |
c99ac99a99 | ||
![]() |
976e2450ec | ||
![]() |
7e4db8fafd | ||
![]() |
115a409d92 | ||
![]() |
c203ab3d16 | ||
![]() |
5dff96496d | ||
![]() |
f813935011 | ||
![]() |
2be719449f | ||
![]() |
2094c870d5 | ||
![]() |
4fe93ae8b8 | ||
![]() |
fff1103cf4 | ||
![]() |
8cede43a45 | ||
![]() |
9b1fa3a5af | ||
![]() |
409e73c074 | ||
![]() |
c893729d62 | ||
![]() |
945466968c | ||
![]() |
54f080b755 | ||
![]() |
bfad14d552 | ||
![]() |
2972e1596d | ||
![]() |
987d2aae88 | ||
![]() |
4707d34fad | ||
![]() |
2ffc09d097 | ||
![]() |
afa8d6bb8f | ||
![]() |
a37ead98e8 | ||
![]() |
c73cd8d618 | ||
![]() |
800a3aa61e | ||
![]() |
ebd815be75 | ||
![]() |
ef669acf89 | ||
![]() |
ac6426eab1 | ||
![]() |
b107b745f2 | ||
![]() |
3d851a448f | ||
![]() |
ce133f01aa | ||
![]() |
492d378537 | ||
![]() |
7ece484423 | ||
![]() |
be5ad63e21 | ||
![]() |
bdac8f8db8 | ||
![]() |
bb893e70c5 | ||
![]() |
57ec9db532 | ||
![]() |
0287481001 | ||
![]() |
0167496ecb | ||
![]() |
d86cf193a0 | ||
![]() |
246cad1108 | ||
![]() |
23bf86a8a8 | ||
![]() |
6ce4c885b9 | ||
![]() |
faf84e483a | ||
![]() |
576004c840 | ||
![]() |
c93b05c293 | ||
![]() |
55c3813fac | ||
![]() |
725c6857be | ||
![]() |
86767c9ab4 | ||
![]() |
46aa631d2b | ||
![]() |
7c61a937c9 | ||
![]() |
b8d65dcc45 | ||
![]() |
b9ab83eaf2 | ||
![]() |
8b7b563992 | ||
![]() |
b813a878d7 | ||
![]() |
54e486c389 | ||
![]() |
12d0a3acc1 | ||
![]() |
6ad2a13386 | ||
![]() |
2a9c401db9 | ||
![]() |
ea5a29018f | ||
![]() |
c8d0a715e8 | ||
![]() |
2cfc6514ab | ||
![]() |
1d78bc7206 | ||
![]() |
e5577e43f8 | ||
![]() |
17c0463906 | ||
![]() |
4168772904 | ||
![]() |
44f2186749 | ||
![]() |
0c918bcc3a | ||
![]() |
0a8925dc75 | ||
![]() |
a446597597 | ||
![]() |
54354a2732 | ||
![]() |
d94b8f08ab | ||
![]() |
0d8189efeb | ||
![]() |
00c886e426 | ||
![]() |
551fc35439 | ||
![]() |
9ff17c8d9d | ||
![]() |
ec37732e99 | ||
![]() |
8a414f32a8 | ||
![]() |
bac06acb49 | ||
![]() |
ae1e3c2a81 | ||
![]() |
67940eb0f9 | ||
![]() |
007aa8480e | ||
![]() |
dedec10c58 | ||
![]() |
75219e21be | ||
![]() |
10f5964f8e | ||
![]() |
a4a64d51c0 | ||
![]() |
1014313d88 | ||
![]() |
e486bb4c29 | ||
![]() |
5c3d9ffb46 | ||
![]() |
2e474fd8db | ||
![]() |
b2b110ae1f | ||
![]() |
68a34e0738 | ||
![]() |
38fa575958 | ||
![]() |
6cfeefe054 | ||
![]() |
8007971a53 | ||
![]() |
d66bd30fae | ||
![]() |
3fa59b1b12 | ||
![]() |
20e7aff393 | ||
![]() |
4b7ce87f57 | ||
![]() |
2075533468 | ||
![]() |
a4ad5c8d11 | ||
![]() |
35f2f56757 | ||
![]() |
e6f4aa6a2f | ||
![]() |
92fc62bb0d | ||
![]() |
44b57a59f5 | ||
![]() |
97b8e02bf5 | ||
![]() |
5df42420cb | ||
![]() |
0ede11a1b7 | ||
![]() |
7d9c282db9 | ||
![]() |
bc0e0813a4 | ||
![]() |
f3aebb3001 | ||
![]() |
800f966df9 | ||
![]() |
e33df4dd8c | ||
![]() |
96d9d810fd | ||
![]() |
8707a1bc86 | ||
![]() |
0c988a5fd4 | ||
![]() |
b396ca771d | ||
![]() |
a37dfcf961 | ||
![]() |
31989740cd | ||
![]() |
501191289b | ||
![]() |
8971e92d78 | ||
![]() |
0c96e79d0d | ||
![]() |
0704c0f5e6 | ||
![]() |
9cb190ebe7 | ||
![]() |
667f84995c | ||
![]() |
7a93fae6e4 | ||
![]() |
0d6deca15c | ||
![]() |
f54d7d46f2 | ||
![]() |
8cf00ba5e1 | ||
![]() |
ecc9c6bbd9 | ||
![]() |
e11199f988 | ||
![]() |
e9ed621178 |
@@ -51,8 +51,6 @@ before_build:
|
||||
|
||||
build_script:
|
||||
- cd "%REPO_DIR%"
|
||||
# scan only as lupdate is prone to hang
|
||||
- lupdate -extensions c,cpp,h,hpp,ui .
|
||||
- qmake qbittorrent.pro && cd src && qmake src.pro
|
||||
- jom -j2 -f Makefile.Release
|
||||
|
||||
|
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@@ -3,7 +3,7 @@
|
||||
### qBittorrent version and Operating System
|
||||
(type here)
|
||||
|
||||
### If on linux, libtorrent-rasterbar and Qt version
|
||||
### If on linux, libtorrent and Qt version
|
||||
(type here)
|
||||
|
||||
### What is the problem
|
||||
|
244
.github/workflows/ci.yaml
vendored
244
.github/workflows/ci.yaml
vendored
@@ -1,244 +0,0 @@
|
||||
name: GitHub Actions CI
|
||||
|
||||
# Cache is used for all Windows and macOS dependencies (size approx. 1230 * 2 + 1850 = 4310 MiB)
|
||||
# Cache is not used for Ubuntu builds, because it already has all dependencies except
|
||||
# the appropriate libtorrent version, which only takes 3-5 minutes to build from source anyway
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
types: [edited, opened, reopened, synchronize]
|
||||
branches: [ master ]
|
||||
|
||||
env:
|
||||
# Qt: 5.15.0
|
||||
# libtorrent: RC_1_2 HEAD, 1.2.10
|
||||
VCPKG_COMMIT: 32eccc18191fbb57b159784a1724d2d00613ae82
|
||||
VCPKG_DEST_MACOS: /Users/runner/qbt_tools/vcpkg
|
||||
VCPKG_DEST_WIN: C:\qbt_tools\vcpkg
|
||||
UBUNTU_LIBTORRENT_VERSION: libtorrent-1.2.10
|
||||
|
||||
jobs:
|
||||
|
||||
ci_ubuntu:
|
||||
name: Ubuntu
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-20.04, ubuntu-18.04]
|
||||
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
||||
fail-fast: false
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
steps:
|
||||
- name: checkout repository
|
||||
uses: actions/checkout@v2.3.2
|
||||
|
||||
- name: install all build dependencies except libtorrent from Ubuntu repos
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install \
|
||||
build-essential cmake git ninja-build pkg-config \
|
||||
libssl-dev libgeoip-dev zlib1g-dev \
|
||||
libboost-dev libboost-chrono-dev libboost-random-dev libboost-system-dev \
|
||||
libqt5svg5-dev qtbase5-dev qttools5-dev
|
||||
|
||||
- name: install libtorrent from source
|
||||
run: |
|
||||
git clone https://github.com/arvidn/libtorrent && cd libtorrent
|
||||
git checkout ${{ env.UBUNTU_LIBTORRENT_VERSION }}
|
||||
cmake -B cmake-build-dir -G "Ninja" \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-Ddeprecated-functions=OFF \
|
||||
--graphviz=cmake-build-dir/target_graph.dot
|
||||
cmake --build cmake-build-dir
|
||||
sudo cmake --install cmake-build-dir --prefix /usr/local
|
||||
|
||||
- name: build qBittorrent
|
||||
run: |
|
||||
cmake -B build -G "Ninja" \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-D${{ matrix.qbt_gui }} \
|
||||
-DVERBOSE_CONFIGURE=ON \
|
||||
--graphviz=build/target_graph.dot
|
||||
cmake --build build
|
||||
|
||||
- name: upload artifact as zip
|
||||
uses: actions/upload-artifact@v2.1.3
|
||||
with:
|
||||
name: qBittorrent-CI-Ubuntu_${{ matrix.os }}-${{ matrix.qbt_gui }}
|
||||
path: |
|
||||
build/compile_commands.json
|
||||
build/target_graph.dot
|
||||
build/qbittorrent
|
||||
build/qbittorrent-nox
|
||||
libtorrent/cmake-build-dir/compile_commands.json
|
||||
libtorrent/cmake-build-dir/target_graph.dot
|
||||
|
||||
ci_windows:
|
||||
name: Windows + vcpkg
|
||||
|
||||
runs-on: windows-2019
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: pwsh
|
||||
|
||||
steps:
|
||||
- name: checkout repository
|
||||
uses: actions/checkout@v2.3.2
|
||||
|
||||
# - ninja is needed for building qBittorrent (because it's preferrable, not a hard requirement)
|
||||
- name: install additional required packages with chocolatey
|
||||
run: |
|
||||
choco install ninja
|
||||
|
||||
- name: setup vcpkg (cached, if possible)
|
||||
uses: lukka/run-vcpkg@v3.3
|
||||
with:
|
||||
vcpkgDirectory: ${{ env.VCPKG_DEST_WIN }}
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
|
||||
setupOnly: true
|
||||
|
||||
# Tell vcpkg to only build Release variants of the dependencies
|
||||
- name: configure vcpkg triplet overlay for release builds only
|
||||
run: |
|
||||
New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory
|
||||
Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake `
|
||||
${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake
|
||||
Add-Content ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake `
|
||||
-Value "set(VCPKG_BUILD_TYPE release)"
|
||||
|
||||
# clear buildtrees after each package installation to reduce disk space requirements
|
||||
- name: install dependencies via vcpkg
|
||||
run: |
|
||||
$packages = `
|
||||
"boost-circular-buffer:x64-windows-static-release",
|
||||
"libtorrent:x64-windows-static-release",
|
||||
"qt5-base:x64-windows-static-release",
|
||||
"qt5-svg:x64-windows-static-release",
|
||||
"qt5-tools:x64-windows-static-release",
|
||||
"qt5-winextras:x64-windows-static-release"
|
||||
foreach($package in $packages)
|
||||
{
|
||||
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install $package `
|
||||
--overlay-triplets=${{ github.workspace }}/triplets_overlay `
|
||||
--clean-after-build
|
||||
}
|
||||
|
||||
# NOTE: this is necessary to correctly find and use cl.exe with the Ninja generator for now
|
||||
- name: setup devcmd
|
||||
uses: ilammy/msvc-dev-cmd@v1.3.0
|
||||
|
||||
- name: build qBittorrent
|
||||
shell: cmd
|
||||
run: |
|
||||
cmake -B build -G "Ninja" ^
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ^
|
||||
-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_WIN }}\scripts\buildsystems\vcpkg.cmake ^
|
||||
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release ^
|
||||
-DVERBOSE_CONFIGURE=ON ^
|
||||
-DMSVC_RUNTIME_DYNAMIC=OFF ^
|
||||
--graphviz=build\target_graph.dot
|
||||
cmake --build build
|
||||
|
||||
- name: upload artifact as zip
|
||||
uses: actions/upload-artifact@v2.1.3
|
||||
with:
|
||||
name: qBittorrent-CI-Windows_x64-static-release
|
||||
path: |
|
||||
build/compile_commands.json
|
||||
build/target_graph.dot
|
||||
build/qbittorrent.exe
|
||||
build/qbittorrent.pdb
|
||||
dist/windows/qt.conf
|
||||
|
||||
ci_macos:
|
||||
name: macOS + vcpkg
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
||||
fail-fast: false
|
||||
|
||||
runs-on: macos-10.15
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: pwsh
|
||||
|
||||
steps:
|
||||
- name: checkout repository
|
||||
uses: actions/checkout@v2.3.2
|
||||
|
||||
# - ninja is needed for building qBittorrent (because it's preferrable, not a hard requirement)
|
||||
# - pkg-config is needed for some vcpkg installations
|
||||
- name: install additional required packages with homebrew
|
||||
shell: bash
|
||||
run: |
|
||||
brew install ninja pkg-config
|
||||
|
||||
- name: setup vcpkg (cached, if possible)
|
||||
uses: lukka/run-vcpkg@v3.3
|
||||
with:
|
||||
vcpkgDirectory: ${{ env.VCPKG_DEST_MACOS }}
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
|
||||
setupOnly: true
|
||||
|
||||
- name: configure vcpkg triplet overlay for release builds only
|
||||
run: |
|
||||
New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory
|
||||
Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-osx.cmake `
|
||||
${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake
|
||||
Add-Content ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake `
|
||||
-Value "set(VCPKG_BUILD_TYPE release)"
|
||||
|
||||
# NOTE: Avoids a libtorrent ABI issue. See https://github.com/arvidn/libtorrent/issues/4965
|
||||
- name: force AppleClang to compile libtorrent with C++14
|
||||
run: |
|
||||
(Get-Content -path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake).Replace( `
|
||||
'${FEATURE_OPTIONS}', '${FEATURE_OPTIONS} -DCMAKE_CXX_STANDARD=14') `
|
||||
| Set-Content -Path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake
|
||||
|
||||
- name: install dependencies via vcpkg
|
||||
run: |
|
||||
$packages = `
|
||||
"boost-circular-buffer:x64-osx-release",
|
||||
"libtorrent:x64-osx-release",
|
||||
"qt5-base:x64-osx-release",
|
||||
"qt5-svg:x64-osx-release",
|
||||
"qt5-tools:x64-osx-release",
|
||||
"qt5-macextras:x64-osx-release"
|
||||
foreach($package in $packages)
|
||||
{
|
||||
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg install $package `
|
||||
--overlay-triplets=${{ github.workspace }}/triplets_overlay `
|
||||
--clean-after-build
|
||||
}
|
||||
|
||||
- name: build qBittorrent
|
||||
shell: bash
|
||||
run: |
|
||||
cmake -B build -G "Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_MACOS }}/scripts/buildsystems/vcpkg.cmake \
|
||||
-DVCPKG_TARGET_TRIPLET=x64-osx-release \
|
||||
-D${{ matrix.qbt_gui }} \
|
||||
-DVERBOSE_CONFIGURE=ON \
|
||||
--graphviz=build/target_graph.dot
|
||||
cmake --build build
|
||||
|
||||
- name: upload artifact as zip
|
||||
uses: actions/upload-artifact@v2.1.3
|
||||
with:
|
||||
name: qBittorrent-CI-macOS_x64-static-release_${{ matrix.qbt_gui }}
|
||||
path: |
|
||||
build/compile_commands.json
|
||||
build/target_graph.dot
|
||||
build/qbittorrent.app
|
||||
build/qbittorrent-nox.app
|
8
.gitignore
vendored
8
.gitignore
vendored
@@ -4,7 +4,6 @@ src/qbittorrent
|
||||
src/qbittorrent-nox
|
||||
src/release
|
||||
src/debug
|
||||
CMakeLists.txt.user*
|
||||
qbittorrent.pro.user*
|
||||
conf.pri
|
||||
Makefile*
|
||||
@@ -36,10 +35,3 @@ config.status
|
||||
src/icons/qbt-theme/build-icons/node_modules/
|
||||
src/icons/skin/build-icons/node_modules/
|
||||
src/icons/skin/build-icons/icons/*.png
|
||||
|
||||
# CMake build directory
|
||||
build/
|
||||
|
||||
# Web UI tools
|
||||
node_modules
|
||||
package-lock.json
|
||||
|
141
.travis.yml
141
.travis.yml
@@ -4,22 +4,25 @@ os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
dist: bionic
|
||||
dist: xenial
|
||||
|
||||
env:
|
||||
matrix:
|
||||
- libt_branch=RC_1_2 gui=true build_system=qmake
|
||||
- libt_branch=RC_1_2 gui=false build_system=qmake
|
||||
- libt_branch=RC_1_2 gui=true build_system=cmake
|
||||
- libt_branch=RC_1_2 gui=false build_system=cmake
|
||||
# Uncomment when Travis upgraded "Ubuntu 12.04 LTS" to a newer version whose repo will have a more up-to-date libtorrent package
|
||||
#- lt_branch=dist gui=true
|
||||
#- lt_branch=dist gui=false
|
||||
- lt_branch=RC_1_0 gui=true build_system=cmake
|
||||
- lt_branch=RC_1_0 gui=false build_system=cmake
|
||||
- lt_branch=RC_1_0 gui=true build_system=qmake
|
||||
- lt_branch=RC_1_0 gui=false build_system=qmake
|
||||
global:
|
||||
- secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
|
||||
- coverity_branch: coverity_scan
|
||||
|
||||
matrix:
|
||||
allow_failures:
|
||||
- env: libt_branch=RC_1_2 gui=true build_system=cmake
|
||||
- env: libt_branch=RC_1_2 gui=false build_system=cmake
|
||||
- env: lt_branch=RC_1_0 gui=true build_system=cmake
|
||||
- env: lt_branch=RC_1_0 gui=false build_system=cmake
|
||||
|
||||
branches:
|
||||
except:
|
||||
@@ -34,88 +37,87 @@ notifications:
|
||||
cache:
|
||||
ccache: true
|
||||
directories:
|
||||
- $HOME/travis/deb
|
||||
- $HOME/travis/brew
|
||||
- $HOME/hombebrew_cache
|
||||
|
||||
addons:
|
||||
coverity_scan:
|
||||
project:
|
||||
name: "qbittorrent/qBittorrent"
|
||||
description: "Build submitted via Travis CI"
|
||||
build_command_prepend: "./bootstrap.sh && ./configure $qmake_conf"
|
||||
build_command: "make -j2"
|
||||
build_command_prepend: "./bootstrap.sh && ./configure $qbtconf"
|
||||
build_command: make
|
||||
branch_pattern: $coverity_branch
|
||||
notification_email: sledgehammer999@qbittorrent.org
|
||||
apt:
|
||||
sources:
|
||||
# sources list: https://github.com/travis-ci/apt-source-safelist/blob/master/ubuntu.json
|
||||
- sourceline: 'ppa:qbittorrent-team/qbt-libtorrent-travisci'
|
||||
- sourceline: 'deb https://apt.kitware.com/ubuntu/ bionic main'
|
||||
key_url: 'https://apt.kitware.com/keys/kitware-archive-latest.asc'
|
||||
- sourceline: 'ppa:qbittorrent-team/qbittorrent-stable'
|
||||
packages:
|
||||
# packages list: https://github.com/travis-ci/apt-package-safelist/blob/master/ubuntu-trusty
|
||||
- [autoconf, automake, cmake, colormake]
|
||||
- [libboost-dev, libboost-system-dev]
|
||||
- [autoconf, automake, colormake]
|
||||
- [ninja-build]
|
||||
- libssl-dev
|
||||
- [qtbase5-dev, libqt5svg5-dev, qttools5-dev]
|
||||
- zlib1g-dev
|
||||
- [libboost-dev, libboost-system-dev]
|
||||
- libtorrent-rasterbar-dev
|
||||
- [qtbase5-dev, qttools5-dev-tools, libqt5svg5-dev]
|
||||
|
||||
before_install:
|
||||
# only allow specific build for coverity scan, others will stop
|
||||
- if [ "$TRAVIS_BRANCH" = "$coverity_branch" ] && ! [ "$TRAVIS_OS_NAME" = "linux" -a "$libt_branch" = "RC_1_2" -a "$gui" = "true" -a "$build_system" = "qmake" ]; then exit ; fi
|
||||
- if [ "$TRAVIS_BRANCH" = "$coverity_branch" ] && ! [ "$TRAVIS_OS_NAME" = "linux" -a "$lt_branch" = "RC_1_0" -a "$gui" = true -a "$build_system" = "qmake" ]; then exit ; fi
|
||||
|
||||
- shopt -s expand_aliases
|
||||
- alias make="colormake -j2" # Using nprocs/2 sometimes may fail (gcc is killed by system)
|
||||
- qbt_path="$HOME/qbt_install"
|
||||
- qmake_conf="$qmake_conf --prefix=$qbt_path"
|
||||
- cmake_conf="$cmake_conf -DCMAKE_INSTALL_PREFIX=$qbt_path"
|
||||
- |
|
||||
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||
qbtconf="$qbtconf --prefix="$qbt_path" PKG_CONFIG_PATH=/opt/qt55/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
else
|
||||
qbtconf="$qbtconf --prefix="$qbt_path""
|
||||
CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedefs -Wno-inconsistent-missing-override"
|
||||
fi
|
||||
|
||||
# options for specific branches
|
||||
- if [ "$gui" = false ]; then qbtconf="$qbtconf --disable-gui" ; fi
|
||||
- |
|
||||
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||
# setup virtual display for after_success target
|
||||
if [ "$gui" = "true" ]; then export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi ;
|
||||
# CMake from Kitware is installed in /usr/bin
|
||||
# TravisCI installs its own cmake to another location which ovverides other installations
|
||||
# if they don't call the new binary directly
|
||||
alias cmake="/usr/bin/cmake"
|
||||
fi
|
||||
- |
|
||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedefs"
|
||||
|
||||
openssl_root_path="/usr/local/opt/openssl"
|
||||
qmake_conf="$qmake_conf PKG_CONFIG_PATH=$openssl_root_path/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
cmake_conf="$cmake_conf -DOPENSSL_ROOT_DIR=$openssl_root_path"
|
||||
fi
|
||||
- |
|
||||
if [ "$gui" = "false" ]; then
|
||||
qmake_conf="$qmake_conf --disable-gui"
|
||||
cmake_conf="$cmake_conf -DGUI=OFF"
|
||||
if [ "$gui" = true ]; then export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi ;
|
||||
fi
|
||||
|
||||
# print settings
|
||||
- echo $libt_branch
|
||||
- echo $lt_branch
|
||||
- echo $gui
|
||||
- echo $build_system
|
||||
- echo $qmake_conf
|
||||
- echo $cmake_conf
|
||||
- echo $ltconf
|
||||
- echo $qbtconf
|
||||
|
||||
install:
|
||||
#- |
|
||||
#if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||
# build libtorrent from source
|
||||
#if [ "$lt_branch" != "dist" ]; then
|
||||
#cd "$HOME" && pwd && git clone --depth 1 https://github.com/arvidn/libtorrent.git --branch $lt_branch
|
||||
#cd libtorrent && ./autotool.sh && ./configure $ltconf && make install
|
||||
#fi
|
||||
#fi
|
||||
- |
|
||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
# dependencies
|
||||
PATH="/usr/local/opt/ccache/libexec:$PATH"
|
||||
|
||||
brew update > /dev/null
|
||||
brew upgrade cmake
|
||||
brew install ccache colormake boost openssl qt zlib
|
||||
brew link --force qt zlib
|
||||
brew outdated "pkg-config" || brew upgrade "pkg-config"
|
||||
brew install colormake ccache zlib qt libtorrent-rasterbar
|
||||
PATH="/usr/local/opt/ccache/libexec:$PATH"
|
||||
brew link --force zlib qt
|
||||
|
||||
if [ "$build_system" = "cmake" ]; then
|
||||
brew outdated cmake || brew upgrade cmake
|
||||
brew install ninja
|
||||
|
||||
sudo ln -s /usr/local/opt/qt/mkspecs /usr/local/mkspecs
|
||||
sudo ln -s /usr/local/opt/qt/plugins /usr/local/plugins
|
||||
fi
|
||||
|
||||
MY_CMAKE_OPENSSL_HINT="-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/"
|
||||
fi
|
||||
- |
|
||||
if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
|
||||
@@ -123,44 +125,29 @@ install:
|
||||
ccache -M 512M
|
||||
ccache -V && ccache --show-stats && ccache --zero-stats
|
||||
fi
|
||||
- |
|
||||
if [ "$libt_branch" = "RC_1_2" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||
# Will install latest 1.2.x daily build from the PPA
|
||||
sudo apt-get -y install libtorrent-rasterbar-dev
|
||||
fi
|
||||
- |
|
||||
if [ "$libt_branch" = "RC_1_2" ] && [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
# building libtorrent manually should be faster than using the official bottle
|
||||
# because the bottle will also pull in a lot of updated dependencies and prolong the overall time
|
||||
pushd "$HOME"
|
||||
git clone --single-branch --branch RC_1_2 https://github.com/arvidn/libtorrent.git
|
||||
cd libtorrent
|
||||
git checkout tags/v1.2.10
|
||||
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=14 -Ddeprecated-functions=OFF -DOPENSSL_ROOT_DIR="$openssl_root_path" ./
|
||||
make
|
||||
sudo make install
|
||||
popd
|
||||
fi
|
||||
|
||||
script:
|
||||
- if [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then exit ; fi # skip usual build when running coverity scan
|
||||
- |
|
||||
cd "$TRAVIS_BUILD_DIR"
|
||||
if [ "$build_system" = "qmake" ]; then
|
||||
# scan only as lupdate is prone to hang
|
||||
lupdate -extensions c,cpp,h,hpp,ui ./
|
||||
./bootstrap.sh
|
||||
./configure $qmake_conf CXXFLAGS="$CXXFLAGS"
|
||||
else
|
||||
mkdir build && cd build
|
||||
cmake $cmake_conf ../
|
||||
if [ "$build_system" = "cmake" ]; then
|
||||
mkdir build
|
||||
cd build
|
||||
if [ "$gui" = "false" ]; then
|
||||
DISABLE_GUI_OPTION="-DCMAKE_DISABLE_FIND_PACKAGE_Qt5Widgets=ON"
|
||||
fi
|
||||
cmake $DISABLE_GUI_OPTION -DCMAKE_INSTALL_PREFIX="$qbt_path" "$MY_CMAKE_OPENSSL_HINT" \
|
||||
-G "Ninja" -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE ..
|
||||
BUILD_TOOL="ninja"
|
||||
fi
|
||||
- make
|
||||
- make install
|
||||
if [ "$build_system" = "qmake" ]; then
|
||||
./bootstrap.sh && ./configure $qbtconf CXXFLAGS="$CXXFLAGS"
|
||||
BUILD_TOOL="make"
|
||||
fi
|
||||
- $BUILD_TOOL && $BUILD_TOOL install
|
||||
|
||||
after_success:
|
||||
- if [ "$gui" = "true" ]; then qbt_exe="qbittorrent" ; else qbt_exe="qbittorrent-nox" ; fi
|
||||
- if [ "$gui" = true ]; then qbt_exe="qbittorrent" ; else qbt_exe="qbittorrent-nox" ; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd "$qbt_path/bin" ; fi
|
||||
- |
|
||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
|
@@ -11,7 +11,7 @@ minimum_perc = 23
|
||||
mode = developer
|
||||
|
||||
[qbittorrent.qbittorrentdesktop_master]
|
||||
source_file = dist/unix/org.qbittorrent.qBittorrent.desktop
|
||||
source_file = dist/unix/qbittorrent.desktop
|
||||
source_lang = en
|
||||
type = DESKTOP
|
||||
minimum_perc = 23
|
||||
|
2
AUTHORS
2
AUTHORS
@@ -62,7 +62,7 @@ Images Authors:
|
||||
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
||||
license: GPLv2
|
||||
|
||||
* file: src/icons/tabs.gif
|
||||
* file: src/icons/skin/tabs.gif
|
||||
copyright: Greg Houston <gregory.houston@gmail.com>
|
||||
license: MIT
|
||||
|
||||
|
@@ -1,51 +1,54 @@
|
||||
cmake_minimum_required(VERSION 3.16 FATAL_ERROR) # Policies <= CMP0097 default to NEW
|
||||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
|
||||
message(AUTHOR_WARNING "If the build fails, please try the autotools/qmake method.")
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
|
||||
include(FunctionReadVersion)
|
||||
|
||||
project(qBittorrent
|
||||
VERSION 4.3.0.0
|
||||
DESCRIPTION "The qBittorrent BitTorrent client"
|
||||
HOMEPAGE_URL "https://www.qbittorrent.org/"
|
||||
LANGUAGES CXX
|
||||
)
|
||||
read_version("${CMAKE_CURRENT_SOURCE_DIR}/version.pri" VER_MAJOR VER_MINOR VER_BUGFIX VER_BUILD VER_STATUS)
|
||||
# message(STATUS "Project version is: ${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}.${VER_BUILD} (${VER_STATUS})")
|
||||
|
||||
# use CONFIG mode first in find_package
|
||||
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
|
||||
# version requirements
|
||||
set(requiredBoostVersion 1.40)
|
||||
set(requiredQtVersion 5.9.0)
|
||||
set(requiredOpenSSLVersion 1.0)
|
||||
set(requiredLibtorrentVersion 1.2.0)
|
||||
set(requiredZlibVersion 1.2.5.2)
|
||||
project(qBittorrent VERSION ${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}.${VER_BUILD})
|
||||
|
||||
# features (some are platform-specific)
|
||||
include(FeatureSummary)
|
||||
include(FeatureOptionsSetup)
|
||||
feature_option(STACKTRACE "Enable stacktraces" ON)
|
||||
feature_option(GUI "Build GUI application" ON)
|
||||
feature_option(WEBUI "Enables built-in HTTP server for headless use" ON)
|
||||
feature_option(VERBOSE_CONFIGURE "Show information about PACKAGES_FOUND and PACKAGES_NOT_FOUND in the configure output (only useful for debugging the CMake build scripts)" OFF)
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
feature_option_dependent(DBUS
|
||||
"Enables support for notifications and power-management features on Linux via D-Bus"
|
||||
ON "GUI" OFF
|
||||
)
|
||||
feature_option_dependent(SYSTEMD
|
||||
"Install systemd service file to a directory manually overridable with Systemd_SERVICES_INSTALL_DIR"
|
||||
OFF "NOT GUI" OFF
|
||||
)
|
||||
elseif (MSVC)
|
||||
feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
|
||||
set(PROJECT_VERSION "${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}")
|
||||
|
||||
if (NOT VER_BUILD EQUAL 0)
|
||||
set(PROJECT_VERSION "${PROJECT_VERSION}.${VER_BUILD}")
|
||||
endif()
|
||||
|
||||
set(QBT_VER_STATUS "alpha1" CACHE STRING "Project status version. Should be empty for release builds.")
|
||||
set(PROJECT_VERSION "${PROJECT_VERSION}${VER_STATUS}")
|
||||
|
||||
add_definitions(-DQBT_VERSION_MAJOR=${VER_MAJOR})
|
||||
add_definitions(-DQBT_VERSION_MINOR=${VER_MINOR})
|
||||
add_definitions(-DQBT_VERSION_BUGFIX=${VER_BUGFIX})
|
||||
add_definitions(-DQBT_VERSION_BUILD=${VER_BUILD})
|
||||
|
||||
add_definitions(-DQBT_VERSION="v${PROJECT_VERSION}")
|
||||
add_definitions(-DQBT_VERSION_2="${PROJECT_VERSION}")
|
||||
|
||||
include(GNUInstallDirs)
|
||||
include(FeatureSummary)
|
||||
|
||||
# version requirements
|
||||
set(requiredBoostVersion 1.35)
|
||||
set(requiredQtVersion 5.5.1)
|
||||
|
||||
if(WIN32)
|
||||
include(winconf)
|
||||
endif(WIN32)
|
||||
|
||||
|
||||
# we need options here, at the top level, because they are used not only in "src" subdir, but in the "dist" dir too
|
||||
include(CompileFeature)
|
||||
|
||||
optional_compile_definitions(COUNTRIES_RESOLUTION FEATURE DESCRIPTION "Enable resolving peers IP addresses to countries"
|
||||
DEFAULT ON DISABLED DISABLE_COUNTRIES_RESOLUTION)
|
||||
optional_compile_definitions(STACKTRACE FEATURE DESCRIPTION "Enable stacktraces"
|
||||
DEFAULT ON ENABLED STACKTRACE)
|
||||
optional_compile_definitions(WEBUI FEATURE DESCRIPTION "Enables built-in HTTP server for headless use"
|
||||
DEFAULT ON DISABLED DISABLE_WEBUI)
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(dist)
|
||||
|
||||
if (VERBOSE_CONFIGURE)
|
||||
feature_summary(WHAT ALL)
|
||||
else()
|
||||
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
|
||||
endif()
|
||||
feature_summary(DESCRIPTION "\nConfiguration results:" WHAT ALL)
|
||||
|
@@ -306,7 +306,7 @@ Example:
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
|
||||
#ifdef Q_OS_MACOS // conditional
|
||||
#ifdef Q_OS_MAC // conditional
|
||||
#include <QFont>
|
||||
#endif
|
||||
|
||||
|
@@ -138,7 +138,7 @@ These are unstable/unsupported platforms, and in all likelihood, whatever the is
|
||||
* **For performance-related issues**, include as much profiling data as you can (resource usage graphs, etc).
|
||||
|
||||
* Paste the **qBittorrent log** (or put the contents of the log in a gist and provide a link to the gist). The log can be viewed in the GUI (View -> Log -> tick all boxes). If you can't do that, the file is at:
|
||||
- Linux: `~/.local/share/qBittorrent/logs/qBittorrent.log`
|
||||
- Linux: `~/.local/share/data/qBittorrent/logs/qBittorrent.log`
|
||||
- Windows: `%LocalAppData%\qBittorrent\logs`
|
||||
- macOS: `~/Library/Application Support/qBittorrent/qBittorrent.log`
|
||||
|
||||
|
249
Changelog
249
Changelog
@@ -1,252 +1,3 @@
|
||||
Sun Oct 18 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.0
|
||||
- FEATURE: Many UI elements colors are themeable now (jagannatharjun)
|
||||
- FEATURE: Allow changing GUI icons from theme bundles (jagannatharjun)
|
||||
- FEATURE: Notify user when torrent moving finished (glassez)
|
||||
- FEATURE: Shortcut CTRL + I opens Statistics window (LoopsGod
|
||||
- FEATURE: Add RSS functionality in Web UI (Sepro)
|
||||
- FEATURE: Drop ".unwanted folder" feature (glassez)
|
||||
- FEATURE: Expose libtorrent peer_turnover, max_concurrent_http_announces, no_connect_privileged_ports settings (Sophist, an0n666, NotTsunami)
|
||||
- BUGFIX: Fix typo in Options dialog (Andrei Stepanov)
|
||||
- BUGFIX: Remove "requires restart" from network interface settings (an0n666)
|
||||
- BUGFIX: Rename "Create subfolder" to "Keep top-level folder" (thalieht)
|
||||
- BUGFIX: Show tooltip for some properties in transfer list (Nick Korotysh)
|
||||
- BUGFIX: Fix calculation of torrent current state (glassez)
|
||||
- BUGFIX: Improve detecting completed files when adding, rechecking or moving a torrent (glassez)
|
||||
- BUGFIX: Fixed broken announce logic in embedded tracker causing failures in some cases (FranciscoPombal)
|
||||
- BUGFIX: Disable checkbox if torrent doesn't have root folder (thalieht)
|
||||
- BUGFIX: Update country flag icons with upstream (Chocobo1)
|
||||
- BUGFIX: Private torrent: If tracker entry is edited clear old peer list. Also don't allow user to manually add peers. (an0n666)
|
||||
- BUGFIX: Fix large strings not visible in log widget (jagannatharjun)
|
||||
- BUGFIX: Disable edit action in Peer list widget (Chocobo1)
|
||||
- BUGFIX: Add a scroll area to torrent creator dialog (Ernesto Castellotti)
|
||||
- BUGFIX: Content tab: Open double-clicked folder regardless on which column the click happens (Chocobo1)
|
||||
- BUGFIX: "Open containing folder" on a folder now opens it in its parent folder (Chocobo1)
|
||||
- BUGFIX: Fix GeoDB download in systems with non-C locales (FranciscoPombal)
|
||||
- BUGFIX: Fix peer blocked message (FranciscoPombal)
|
||||
- BUGFIX: Make more robust the banning of selected peers from the list (NotTsunami)
|
||||
- BUGFIX: Use toned green color for downloading pieces in Pieces bar (jagannatharjun)
|
||||
- BUGFIX: Correctly fill whole width of speed graph (jagannatharjun)
|
||||
- BUGFIX: Fix impossible speed in speed graph (jagannatharjun)
|
||||
- WEBUI: Hide additional search filters on small screens (Thomas Piccirello)
|
||||
- WEBUI: Shrink search bar on small screens (Thomas Piccirello)
|
||||
- WEBUI: Fix search categories only working in English (Thomas Piccirello)
|
||||
- WEBUI: Add Trackers section to sidebar (Thomas Piccirello)
|
||||
- WEBUI: Fix Enter button behavior in textarea (Tom Piccirello)
|
||||
- WEBUI: Fix wrong file renaming selection range (MR)
|
||||
- WEBUI: Preselect "Default save path" in watched folders (thalieht)
|
||||
- WEBUI: Fix banning peers (brvphoenix)
|
||||
- WEBUI: Fix seeding time checkbox placement (Chocobo1)
|
||||
- WEBUI: Bump Web API version (Thomas Piccirello)
|
||||
- RSS: Fix renaming RSS autodownload rule (glassez)
|
||||
- RSS: Fix RSS article is not marked as "read" when torrent is downloaded (glassez)
|
||||
- SEARCH: Update minimum Python version to 3.5.0 (ngosang)
|
||||
- SEARCH: Make middle-click close search tabs (Will Da Silva)
|
||||
- WINDOWS: NSIS: Update Dutch translation (Thomas De Rocker)
|
||||
- WINDOWS: NSIS: Change the installers uninstallation question to clear confusion (an0n666)
|
||||
- LINUX: Fix typo in systemd service file (Shane Allgeier)
|
||||
- LINUX: Don't use HTML in tray tooltip (thalieht)
|
||||
- LINUX: Don't create 'data' subdirectory in XDG_DATA_HOME (lbilli)
|
||||
- LINUX/MACOS: Add HTTPS tracker certificate validation option (NotTsunami)
|
||||
- OTHER: Many CMake improvements (FranciscoPombal)
|
||||
- OTHER: Support for libtorrent 1.1.x is dropped (Chocobo1)
|
||||
- OTHER: Many code cleanups and improvements (FranciscoPombal, Chocobo1, glassez)
|
||||
|
||||
Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
|
||||
- FEATURE: Libtorrent 1.2.x series are supported now (glassez)
|
||||
- FEATURE: Add OpenSSL version to GUI and stackdump (Chocobo1)
|
||||
- FEATURE: Add zlib version to GUI & stackdump (silverqx)
|
||||
- FEATURE: Use PBKDF2 for the GUI lock. You will need to set your password again. (Chocobo1)
|
||||
- FEATURE: Rename "#" column to "Tier" in the tracker list (thalieht)
|
||||
- FEATURE: Allow setting larger checking memory usage in GUI (airium)
|
||||
- FEATURE: Converted remaining icons to svg (Bert Verhelst)
|
||||
- FEATURE: Replace CheckBox with Arrow in the side panel (Prince Gupta)
|
||||
- FEATURE: Log performance alerts from libtorrent (Chocobo1)
|
||||
- FEATURE: Use native folder icon in content tree (Chocobo1)
|
||||
- FEATURE: Move copy actions under a submenu (Chocobo1)
|
||||
- FEATURE: Add "Socket backlog size" option (Chocobo1)
|
||||
- FEATURE: Add "File pool size" option (Chocobo1)
|
||||
- FEATURE: Allow styling with QSS stylesheets (Prince Gupta)
|
||||
- FEATURE: Add "Tracker entries" dialog (Chocobo1)
|
||||
- FEATURE: Add availability column (Chocobo1)
|
||||
- FEATURE: Use a randomized port number for the first run (Chocobo1)
|
||||
- FEATURE: Enable Super Seeding mode once ratio/time limit is reached (thalieht)
|
||||
- FEATURE: Improve embedded tracker. Now it conforms to BEPs more closely. (Chocobo1)
|
||||
- FEATURE: Add option to align file to piece boundary when creating new torrent (Chocobo1)
|
||||
- FEATURE: Ability to open file or trigger torrect action via keypad Enter (Chocobo1)
|
||||
- FEATURE: Add "Remove torrent and its files" option to share ratio limiting (thalieht)
|
||||
- FEATURE: Allow to select multiple entries in "banned IP" dialog (Chocobo1)
|
||||
- FEATURE: Reallow to pause checking torrents (thalieht)
|
||||
- FEATURE: Reallow to force recheck torrents that aren't fully started (thalieht)
|
||||
- FEATURE: Add "Preview file" double-click action (warren)
|
||||
- BUGFIX: Avoid performance penalty when logger is full (Chocobo1)
|
||||
- BUGFIX: Remove the max half-open connections option (thalieht)
|
||||
- BUGFIX: Center align the section labels in advanced settings (thalieht)
|
||||
- BUGFIX: Add documentation links to some advanced settings (thalieht)
|
||||
- BUGFIX: Impove DownloadManager code (glassez)
|
||||
- BUGFIX: Limit DownloadHandler max redirection to 20 (Chocobo1)
|
||||
- BUGFIX: Log DownloadManager SSL errors (Chocobo1)
|
||||
- BUGFIX: Force recheck multiple torrents one by one (glassez)
|
||||
- BUGFIX: Close context menu when content model is reset (glassez)
|
||||
- BUGFIX: Improve Properties widget (glassez)
|
||||
- BUGFIX: Prevent flickering preview dialog (silver)
|
||||
- BUGFIX: Rename "Prefer encryption" to "Allow encryption" (thalieht)
|
||||
- BUGFIX: Fix search icon placement when using RTL languages (Chocobo1)
|
||||
- BUGFIX: Avoid combo boxes extending to the right in Options dialog (Chocobo1)
|
||||
- BUGFIX: Fix speed limit not applying to IPv6 peers (Chocobo1)
|
||||
- BUGFIX: Log failed file rename errors (Chocobo1)
|
||||
- BUGFIX: Fix wrong "Time Active" value displayed (Chocobo1)
|
||||
- BUGFIX: Rename priority to queue in the context of torrents (thalieht)
|
||||
- BUGFIX: Update remaining size of ignored files to 0 (Thomas Piccirello)
|
||||
- BUGFIX: Move "Check for program updates" checkbox to the Behavior settings (Chocobo1)
|
||||
- BUGFIX: Improve error messages for URL seed (Chocobo1)
|
||||
- BUGFIX: Rename share ratio limiting options (thalieht)
|
||||
- BUGFIX: Fix country name misspelling (horgan)
|
||||
- PERFORMANCE: Faster/efficient way of handling updates in the Transfer list (Chocobo1)
|
||||
- WEBUI: Bump Web API version
|
||||
- WEBUI: Use PBKDF2 for the WebUI password. You will need to set your password again. (Chocobo1)
|
||||
- WEBUI: Use Javascript strict mode (Chocobo1)
|
||||
- WEBUI: Remove autocorrect/autocapitalise from filepaths on WebUI (AceLewis)
|
||||
- WEBUI: Display warning when Javascript is disabled (Chocobo1)
|
||||
- WEBUI: Remove mootools lib from login page (Chocobo1)
|
||||
- WEBUI: Prevent login credential appearing in URL (Chocobo1)
|
||||
- WEBUI: Load WebUI certificate & key from file path (Chocobo1)
|
||||
- WEBUI: Add migration code for WebUI https related change (Chocobo1)
|
||||
- WEBUI: Fix wrong element id being used (Thomas Piccirello)
|
||||
- WEBUI: Fix direction of Web UI sorted column icon (Thomas Piccirello)
|
||||
- WEBUI: Match WebUI About page to GUI (Thomas Piccirello)
|
||||
- WEBUI: Simplify tab logic (Thomas Piccirello)
|
||||
- WEBUI: Separate URL components before percent-decoding (glassez)
|
||||
- WEBUI: Capitalize event name (Thomas Piccirello)
|
||||
- WEBUI: Fix bug where input wouldn't always be focused (Thomas Piccirello)
|
||||
- WEBUI: Add Web UI support for escape key (Thomas Piccirello)
|
||||
- WEBUI: Fix broken image link (Tom Piccirello)
|
||||
- WEBUI: Include application version in css/js url for cache busting (Thomas Piccirello)
|
||||
- WEBUI: Update WebUI img to use svg images (Chocobo1)
|
||||
- WEBUI: Fix speed limit icon too large on WebUI (Chocobo1)
|
||||
- WEBUI: Fix misaligned icons in STATUS list in GUI (Chocobo1)
|
||||
- WEBUI: Drop legacy WebAPI support (glassez)
|
||||
- WEBUI: Allow WebUI Content tab to be sorted (Thomas Piccirello)
|
||||
- WEBUI: Encode torrent name before passing in URL (Thomas Piccirello)
|
||||
- WEBUI: Move WebUI Peers code to separate file (Thomas Piccirello)
|
||||
- WEBUI: Prevent WebUI tables from being highlighted (Thomas Piccirello)
|
||||
- WEBUI: Allow WebUI Trackers table to be manipulated (Thomas Piccirello)
|
||||
- WEBUI: Fix only the first newline char is replaced (Chocobo1)
|
||||
- WEBUI: Fix missing semicolon in WebUI (Chocobo1)
|
||||
- WEBUI: Add autocomplete attribute to WebUI (Chocobo1)
|
||||
- WEBUI: Always use index.html as default page (CzBiX)
|
||||
- WEBUI: Set title attribute for all WebUI table cells (Thomas Piccirello)
|
||||
- WEBUI: Align WebUI login button to the right (Chocobo1)
|
||||
- WEBUI: Use force refresh on WebUI logout (Chocobo1)
|
||||
- WEBUI: Use a random number for WebUI cache busting (Chocobo1)
|
||||
- WEBUI: Register protocol handler in WebUI for magnet links (Cory)
|
||||
- WEBUI: Add WebAPI session timeout settings (Chocobo1)
|
||||
- WEBUI: Fix encoding of special characters (Tom Piccirello)
|
||||
- WEBUI: Avoid word wrap in webui footer (airium)
|
||||
- WEBUI: Add advanced options in WebUI (Zhaoyu Gan)
|
||||
- WEBUI: Move WebUI copy actions under a submenu (Thomas Piccirello)
|
||||
- WEBUI: Add WebUI support for triggering context menus on mobile (Thomas Piccirello)
|
||||
- WEBUI: Implement tag management for WebUI (Vasiliy Halimonchuk)
|
||||
- WEBUI: Fix WebUI removing parameters from magnet links (Thomas Piccirello)
|
||||
- WEBUI: Enable by default the search tab (Thomas Piccirello)
|
||||
- WEBUI: Add context menu to Web UI search table (Thomas Piccirello)
|
||||
- WEBUI: Display files hierarchically in Web UI content tab (Thomas Piccirello)
|
||||
- WEBUI: Add ability to add and ban a peer from the Web UI (Thomas Piccirello)
|
||||
- WEBUI: Increase WebUI window heights (Thomas Piccirello)
|
||||
- WEBUI: Sort torrent names case-insensitively in webui (airium)
|
||||
- WEBUI: Support exclusions in WebUI table filters (Thomas Piccirello)
|
||||
- WEBUI: Don't save preferences until all options are processed (Tom Piccirello)
|
||||
- WEBUI: Disable port selection when "Use different port on each startup" is selected (Chocobo1)
|
||||
- WEBUI: Remove max character limit of location path (Clément Pera)
|
||||
- RSS: Better widget for choosing file path in automated downloader (thalieht)
|
||||
- RSS: Allow to cancel/retry the fetching of feeds (glassez)
|
||||
- RSS: Add create subfolder option to RSS auto-download rules (Xegor)
|
||||
- RSS: Log "RSS Feed successfully downloaded" event (glassez)
|
||||
- SEARCH: Add default tooltip "Searching..." on tab creation. (paolo-sz)
|
||||
- SEARCH: Avoid crashes on torrent search (paolo-sz)
|
||||
- SEARCH: Add right click menu to SearchJobWidget (Chocobo1)
|
||||
- SEARCH: Rename label in search widget (Chocobo1)
|
||||
- SEARCH: Add more copy field actions to search widget (Chocobo1)
|
||||
- SEARCH: Remove buttons from search widget (Chocobo1)
|
||||
- SEARCH: Update python installer URL (Chocobo1)
|
||||
- WINDOWS: Drop support for < Windows 7
|
||||
- WINDOWS: Allow headless builds on Windows (knackebrot)
|
||||
- WINDOWS: Add option to control qBittorrent process memory priority (Chocobo1)
|
||||
- LINUX: Add content_rating, release tags to appdata (Peter Eszlari)
|
||||
- LINUX: Update .appdata descriptions (Chocobo1)
|
||||
- LINUX: Use reverse DNS convention for metadata files naming (Chocobo1)
|
||||
- LINUX: Adjust open file descriptor limit on startup to max (Chocobo1)
|
||||
- MACOS: Drop support for < macOS 10.10 (Yosemite)
|
||||
- MACOS: Replace deprecated `qt_mac_set_dock_menu()` (Chocobo1)
|
||||
- MACOS: Add some padding to macOS app icon (Nick Korotysh)
|
||||
- OTHER: Raise minimum C++ version to C++14 (Chocobo1)
|
||||
- OTHER: Raise minimum Qt version to 5.9.0 (sledgehammer999)
|
||||
- OTHER: Drop support of libtorrent < 1.1.10 (glassez)
|
||||
- OTHER: Drop upgrade code from older saving systems (sledgehammer999)
|
||||
- OTHER: Update INSTALL dependencies (Chocobo1)
|
||||
- OTHER: Optimize PNG images losslessly with zopflipng (Peter Dave Hello)
|
||||
- OTHER: Optimize svg files using SVGO (sledgehammer999)
|
||||
- OTHER: QMake: Compile translations at build time (glassez)
|
||||
- OTHER: Drop support for "BC Link" format (Chocobo1)
|
||||
- OTHER: Lots of code refactorings, cleanups, improvements and optimizations (Chocobo1, glassez, thalieht)
|
||||
|
||||
* Sun Aug 04 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.7
|
||||
- FEATURE: Add 12 hour and 24 hour speed graphs (dzmat)
|
||||
- FEATURE: Change "Add new torrent" dialog to horizontal layout (Evgeny Lensky)
|
||||
- BUGFIX: Fix messed up symbols in log (Chocobo1)
|
||||
- BUGFIX: Fix incomplete file extension not applied for new torrents (Chocobo1)
|
||||
- BUGFIX: Save updated resume data for completed torrents (Vladimir Golovnev (Glassez))
|
||||
- BUGFIX: Fix requested torrent resume data handling (Vladimir Golovnev (Glassez))
|
||||
- BUGFIX: Prevent command injection via "Run external program" function (Chocobo1)
|
||||
- BUGFIX: Avoid race conditions when adding torrent (Vladimir Golovnev (Glassez))
|
||||
- BUGFIX: Fix torrent checking issues (Vladimir Golovnev (Glassez))
|
||||
- BUGFIX: Use proper log message when there are no error (Chocobo1)
|
||||
- BUGFIX: Fix torrent properties not saved for paused torrents (Chocobo1)
|
||||
- BUGFIX: Some improvements on qtsingleapplication code (Chocobo1)
|
||||
- BUGFIX: Remove limits of "Disk cache expiry interval" setting (Chocobo1)
|
||||
- BUGFIX: Remove upper limit of "Disk cache" setting (Chocobo1)
|
||||
- BUGFIX: Fix crash when removing phantom tags (Chocobo1)
|
||||
- BUGFIX: Improve handleFileErrorAlert error message (Chocobo1)
|
||||
- BUGFIX: Fix updated save path not saved for paused torrents (Chocobo1)
|
||||
- BUGFIX: Log save_resume_data_failed_alert (Chocobo1)
|
||||
- BUGFIX: Don't remove parent directories (Chocobo1)
|
||||
- BUGFIX: Properly remove empty leftover folders after rename (Chocobo1)
|
||||
- BUGFIX: Focus behavior row in Options dialog (silverqx)
|
||||
- BUGFIX: Fix unable to rename folder on Windows when same is used in different case(Chocobo1)
|
||||
- BUGFIX: Fix unable to control add torrent dialogs when opened simultaneously (Chocobo1)
|
||||
- BUGFIX: Disable "Upload mode" when start preloaded torrent (Vladimir Golovnev (Glassez))
|
||||
- BUGFIX: Fix wrong comparison result when sorting items(Chocobo1)
|
||||
- BUGFIX: Fix sequential downloading when redirected (Vladimir Golovnev (Glassez))
|
||||
- BUGFIX: Fix typos (Chocobo1)
|
||||
- BUGFIX: Fix assertion fail (Chocobo1)
|
||||
- BUGFIX: Change number of time axis divisions from 5 to 6 for convenience (dzmat)
|
||||
- BUGFIX: Don't turn window blank when closed to system tray (Ekin Dursun)
|
||||
- WEBUI: Fix WebUI encoding of special characters (Thomas Piccirello)
|
||||
- WEBUI: Change the speed unit from Bytes/s to KiB/s for the rate limiter(jerrymakesjelly)
|
||||
- WEBUI: Fix '+' char not decoded to space correctly (Chocobo1)
|
||||
- RSS: Ignore RSS articles with non-unique identifiers (Vladimir Golovnev (Glassez))
|
||||
- RSS: Perform more RSS parsing in working thread (Vladimir Golovnev (Glassez))
|
||||
- RSS: Download RSS enclosure element if no proper MIME type is found (Matan Bareket)
|
||||
|
||||
* Sun May 05 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.6
|
||||
- BUGFIX: Force recheck multiple torrents one by one in all possible cases. Closes #9120 (glassez)
|
||||
- BUGFIX: Don't query Google for tracker favicons, for privacy reasons (sledgehammer999)
|
||||
- BUGFIX: Work around the crash occurred in QTimer. Closes #9985 (Chocobo1)
|
||||
- BUGFIX: Increase the .torrent file download size limit to 100 MiB (thalieht)
|
||||
- BUGFIX: Disable downloading tracker favicons by default. Works around reported crashes in Linux. Closes #9667 (Chocobo1)
|
||||
- WEBUI: Separate URL components before percent-decoding. Allow special characters in query string parameters. Closes #9116 (glassez)
|
||||
- WEBUI: Prevent login credential appearing in URL. Closes #10221 (Chocobo1)
|
||||
- WEBUI: Display warning when Javascript is disabled (Chocobo1)
|
||||
- WEBUI: Fix translatable strings (Chocobo1)
|
||||
- WEBUI: Correctly handle '+' sign in x-www-form-urlencoded data. Closes #10451 (Chocobo1)
|
||||
- WEBUI: Remove closed connections immediately. Closes #10487 (Chocobo1)
|
||||
- WEBUI: Fix "Create subfolder" option is not working. Closes ##10392 (Chocobo1)
|
||||
- SEARCH: Make num enter key work the same as return in searchjobwidget (thalieht)
|
||||
- LINUX: Make window title bar icon work in Wayland (Peter Eszlari)
|
||||
- LINUX: Update appdata.xml file (Chocobo1)
|
||||
- MACOS: Fix progress bar drawing by using different style than native (Nick Korotysh)
|
||||
- MACOS: Updated and cleaned up fields in Info.plist (Nick Korotysh)
|
||||
- OTHER: Mention more translators in the about tab. Closes #10043 (sledgehammer999)
|
||||
|
||||
* Mon Dec 24 2018 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.5
|
||||
- FEATURE: Add checking_mem_usage option to AdvancedSettings (FranciscoPombal)
|
||||
- FEATURE: Save torrents queue in separate file. Now a new file named 'queue' is created, saving on each line the infohash of each queued torrent in sorted order. (glassez)
|
||||
|
48
INSTALL
48
INSTALL
@@ -1,26 +1,7 @@
|
||||
qBittorrent - A BitTorrent client in C++ / Qt
|
||||
------------------------------------------
|
||||
|
||||
1) Install these dependencies:
|
||||
|
||||
- Boost >= 1.40
|
||||
|
||||
- libtorrent-rasterbar >= 1.2 (by Arvid Norberg)
|
||||
* https://www.libtorrent.org/
|
||||
* Be careful: another library (the one used by rTorrent) uses a similar name
|
||||
|
||||
- OpenSSL >= 1.0
|
||||
|
||||
- Qt >= 5.9.0
|
||||
|
||||
- zlib >= 1.2.5.2
|
||||
|
||||
- pkg-config (compile-time only)
|
||||
|
||||
- Python >= 3.5.0 (optional, runtime only)
|
||||
* Required by the internal search engine
|
||||
|
||||
2a) Compile and install qBittorrent with Qt graphical interface
|
||||
1) Compile and install qBittorrent with Qt graphical interface
|
||||
|
||||
$ ./configure
|
||||
$ make && make install
|
||||
@@ -28,7 +9,21 @@ qBittorrent - A BitTorrent client in C++ / Qt
|
||||
|
||||
will install and execute qBittorrent.
|
||||
|
||||
2b) Compile and install qBittorrent without Qt graphical interface
|
||||
Dependencies:
|
||||
- Qt >= 5.5.1
|
||||
|
||||
- pkg-config
|
||||
|
||||
- libtorrent-rasterbar >= 1.0.6 (by Arvid Norberg)
|
||||
* https://www.libtorrent.org/
|
||||
* Be careful: another library (the one used by rTorrent) uses a similar name
|
||||
|
||||
- Boost >= 1.35
|
||||
|
||||
- Python >= 2.7.9 / 3.3.0 (optional, runtime only)
|
||||
* Required by the internal search engine
|
||||
|
||||
2) Compile and install qBittorrent without Qt graphical interface
|
||||
|
||||
$ ./configure --disable-gui
|
||||
$ make && make install
|
||||
@@ -36,6 +31,17 @@ qBittorrent - A BitTorrent client in C++ / Qt
|
||||
|
||||
will install and execute qBittorrent.
|
||||
|
||||
Dependencies:
|
||||
- Qt >= 5.5.1
|
||||
|
||||
- pkg-config
|
||||
|
||||
- libtorrent-rasterbar >= 1.0.6 (by Arvid Norberg)
|
||||
* https://www.libtorrent.org/
|
||||
* Be careful: another library (the one used by rTorrent) uses a similar name
|
||||
|
||||
- Boost >= 1.35
|
||||
|
||||
DOCUMENTATION:
|
||||
Please note that there is a "Compilation" section at http://wiki.qbittorrent.org.
|
||||
|
||||
|
@@ -3,7 +3,6 @@ qBittorrent - A BitTorrent client in Qt
|
||||
|
||||
[](https://travis-ci.org/qbittorrent/qBittorrent)
|
||||
[](https://ci.appveyor.com/project/qbittorrent/qBittorrent)
|
||||
[](https://github.com/qbittorrent/qBittorrent/actions)
|
||||
[](https://scan.coverity.com/projects/5494)
|
||||
********************************
|
||||
### Description:
|
||||
@@ -14,7 +13,8 @@ It aims to be a good alternative to all other bittorrent clients
|
||||
out there. qBittorrent is fast, stable and provides unicode
|
||||
support as well as many features.
|
||||
|
||||
The free [IP to Country Lite database](https://db-ip.com/db/download/ip-to-country-lite) by [DB-IP](https://db-ip.com/) is used for resolving the countries of peers. The database is licensed under the [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/).
|
||||
This product includes GeoLite data created by MaxMind, available from
|
||||
https://www.maxmind.com/
|
||||
|
||||
### Installation:
|
||||
For installation, follow the instructions from INSTALL file, but simple:
|
||||
|
@@ -1,9 +1,9 @@
|
||||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand '-c -o'.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
scriptversion=2012-10-14.11; # UTC
|
||||
|
||||
# Copyright (C) 1999-2018 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@@ -17,7 +17,7 @@ scriptversion=2018-03-07.03; # UTC
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
@@ -255,8 +255,7 @@ EOF
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
|
||||
func_cl_wrapper "$@" # Doesn't return...
|
||||
;;
|
||||
esac
|
||||
@@ -340,9 +339,9 @@ exit $ret
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
|
966
build-aux/config.guess
vendored
966
build-aux/config.guess
vendored
File diff suppressed because it is too large
Load Diff
2702
build-aux/config.sub
vendored
2702
build-aux/config.sub
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2018-03-11.20; # UTC
|
||||
scriptversion=2013-12-25.23; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
@@ -271,18 +271,15 @@ do
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename.
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test "$is_target_a_directory" = never; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dstbase=`basename "$src"`
|
||||
case $dst in
|
||||
*/) dst=$dst$dstbase;;
|
||||
*) dst=$dst/$dstbase;;
|
||||
esac
|
||||
dst=$dstdir/`basename "$src"`
|
||||
dstdir_status=0
|
||||
else
|
||||
dstdir=`dirname "$dst"`
|
||||
@@ -291,11 +288,6 @@ do
|
||||
fi
|
||||
fi
|
||||
|
||||
case $dstdir in
|
||||
*/) dstdirslash=$dstdir;;
|
||||
*) dstdirslash=$dstdir/;;
|
||||
esac
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
@@ -332,43 +324,34 @@ do
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||
;;
|
||||
*)
|
||||
# Note that $RANDOM variable is not portable (e.g. dash); Use it
|
||||
# here however when possible just to lower collision chance.
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p' feature.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
rmdir "$tmpdir/d" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
@@ -444,8 +427,8 @@ do
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=${dstdirslash}_inst.$$_
|
||||
rmtmp=${dstdirslash}_rm.$$_
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
@@ -510,9 +493,9 @@ do
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
|
@@ -1,9 +1,9 @@
|
||||
#! /bin/sh
|
||||
# Common wrapper for a few potentially missing GNU programs.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
scriptversion=2013-10-28.13; # UTC
|
||||
|
||||
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@@ -17,7 +17,7 @@ scriptversion=2018-03-07.03; # UTC
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
@@ -101,9 +101,9 @@ else
|
||||
exit $st
|
||||
fi
|
||||
|
||||
perl_URL=https://www.perl.org/
|
||||
flex_URL=https://github.com/westes/flex
|
||||
gnu_software_URL=https://www.gnu.org/software
|
||||
perl_URL=http://www.perl.org/
|
||||
flex_URL=http://flex.sourceforge.net/
|
||||
gnu_software_URL=http://www.gnu.org/software
|
||||
|
||||
program_details ()
|
||||
{
|
||||
@@ -207,9 +207,9 @@ give_advice "$1" | sed -e '1s/^/WARNING: /' \
|
||||
exit $st
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
|
22
cmake/Modules/CompileFeature.cmake
Normal file
22
cmake/Modules/CompileFeature.cmake
Normal file
@@ -0,0 +1,22 @@
|
||||
# Helper function for coupling add_feature_info(), option(), and add_definitions()
|
||||
|
||||
function(optional_compile_definitions _name)
|
||||
set(options FEATURE)
|
||||
set(oneValueArgs DESCRIPTION DEFAULT)
|
||||
set(multiValueArgs ENABLED DISABLED)
|
||||
cmake_parse_arguments(OCD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
option(${_name} "${OCD_DESCRIPTION}" ${OCD_DEFAULT})
|
||||
if (${${_name}})
|
||||
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY COMPILE_DEFINITIONS ${OCD_ENABLED})
|
||||
else()
|
||||
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY COMPILE_DEFINITIONS ${OCD_DISABLED})
|
||||
endif()
|
||||
if(${OCD_FEATURE})
|
||||
add_feature_info(${_name} ${_name} "${OCD_DESCRIPTION}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
macro(feature_option _name _description _default)
|
||||
option(${_name} "${_description}" ${_default})
|
||||
add_feature_info(${_name} ${_name} "${_description}")
|
||||
endmacro()
|
355
cmake/Modules/DeployQt5.cmake
Normal file
355
cmake/Modules/DeployQt5.cmake
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,14 +0,0 @@
|
||||
# Helper functions for coupling add_feature_info() or CMAKE_DEPENDENT_OPTION() and option()
|
||||
|
||||
function(feature_option _name _description _default)
|
||||
string(CONCAT _desc "${_description} (default: ${_default})")
|
||||
option("${_name}" "${_desc}" "${_default}")
|
||||
add_feature_info("${_name}" "${_name}" "${_desc}")
|
||||
endfunction()
|
||||
|
||||
include(CMakeDependentOption)
|
||||
function(feature_option_dependent _name _description _default_opt _dependency _default_dep_not_sat)
|
||||
string(CONCAT _desc "${_description} (default: ${_default_opt}; depends on condition: ${_dependency})")
|
||||
CMAKE_DEPENDENT_OPTION("${_name}" "${_desc}" "${_default_opt}" "${_dependency}" "${_default_dep_not_sat}")
|
||||
add_feature_info("${_name}" "${_name}" "${_desc}")
|
||||
endfunction()
|
128
cmake/Modules/FindLibtorrentRasterbar.cmake
Normal file
128
cmake/Modules/FindLibtorrentRasterbar.cmake
Normal file
@@ -0,0 +1,128 @@
|
||||
# - Try to find libtorrent-rasterbar
|
||||
#
|
||||
# If not using pkg-config, you can pre-set LibtorrentRasterbar_CUSTOM_DEFINITIONS
|
||||
# for definitions unrelated to Boost's separate compilation (which are already
|
||||
# decided by the LibtorrentRasterbar_USE_STATIC_LIBS variable).
|
||||
#
|
||||
# Once done this will define
|
||||
# LibtorrentRasterbar_FOUND - System has libtorrent-rasterbar
|
||||
# LibtorrentRasterbar_INCLUDE_DIRS - The libtorrent-rasterbar include directories
|
||||
# LibtorrentRasterbar_LIBRARIES - The libraries needed to use libtorrent-rasterbar
|
||||
# LibtorrentRasterbar_DEFINITIONS - Compiler switches required for using libtorrent-rasterbar
|
||||
# LibtorrentRasterbar_OPENSSL_ENABLED - libtorrent-rasterbar uses and links against OpenSSL
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
find_package(PkgConfig QUIET)
|
||||
|
||||
macro(_detect_boost_components _outComponets librariesList)
|
||||
string(REGEX MATCHALL "boost_[a-z_]+[-a-z]*" _boost_libraries "${librariesList}")
|
||||
string(REGEX REPLACE "boost_([a-z_]+)[-a-z]*" "\\1" ${_outComponets} "${_boost_libraries}")
|
||||
endmacro()
|
||||
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(PC_LIBTORRENT_RASTERBAR QUIET libtorrent-rasterbar)
|
||||
endif()
|
||||
|
||||
if(LibtorrentRasterbar_USE_STATIC_LIBS)
|
||||
set(LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
endif()
|
||||
|
||||
if(PC_LIBTORRENT_RASTERBAR_FOUND)
|
||||
set(LibtorrentRasterbar_DEFINITIONS ${PC_LIBTORRENT_RASTERBAR_CFLAGS})
|
||||
else()
|
||||
if(LibtorrentRasterbar_CUSTOM_DEFINITIONS)
|
||||
set(LibtorrentRasterbar_DEFINITIONS ${LibtorrentRasterbar_CUSTOM_DEFINITIONS})
|
||||
else()
|
||||
# Without pkg-config, we can't possibly figure out the correct build flags.
|
||||
# libtorrent is very picky about those. Let's take a set of defaults and
|
||||
# hope that they apply. If not, you the user are on your own.
|
||||
set(LibtorrentRasterbar_DEFINITIONS
|
||||
-DTORRENT_USE_OPENSSL
|
||||
-DTORRENT_DISABLE_GEO_IP
|
||||
-DBOOST_ASIO_ENABLE_CANCELIO
|
||||
-DUNICODE -D_UNICODE -D_FILE_OFFSET_BITS=64)
|
||||
endif()
|
||||
|
||||
if(NOT LibtorrentRasterbar_USE_STATIC_LIBS)
|
||||
list(APPEND LibtorrentRasterbar_DEFINITIONS
|
||||
-DTORRENT_LINKING_SHARED
|
||||
-DBOOST_SYSTEM_DYN_LINK -DBOOST_CHRONO_DYN_LINK)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
message(STATUS "libtorrent definitions: ${LibtorrentRasterbar_DEFINITIONS}")
|
||||
|
||||
find_path(LibtorrentRasterbar_INCLUDE_DIR libtorrent
|
||||
HINTS ${PC_LIBTORRENT_RASTERBAR_INCLUDEDIR} ${PC_LIBTORRENT_RASTERBAR_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES libtorrent-rasterbar)
|
||||
|
||||
find_library(LibtorrentRasterbar_LIBRARY NAMES torrent-rasterbar libtorrent
|
||||
HINTS ${PC_LIBTORRENT_RASTERBAR_LIBDIR} ${PC_LIBTORRENT_RASTERBAR_LIBRARY_DIRS})
|
||||
|
||||
if(LibtorrentRasterbar_USE_STATIC_LIBS)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif()
|
||||
|
||||
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
|
||||
set(LibtorrentRasterbar_INCLUDE_DIRS ${LibtorrentRasterbar_INCLUDE_DIR})
|
||||
|
||||
# Without pkg-config, we can't possibly figure out the correct boost dependencies
|
||||
if (LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
|
||||
set(_boost_components "${LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES}")
|
||||
else(LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
|
||||
if(PC_LIBTORRENT_RASTERBAR_FOUND)
|
||||
_detect_boost_components(_boost_components "${PC_LIBTORRENT_RASTERBAR_LIBRARIES}")
|
||||
else()
|
||||
# all possible boost dependencies
|
||||
set(_boost_components
|
||||
date_time
|
||||
system
|
||||
chrono
|
||||
random
|
||||
thread
|
||||
)
|
||||
endif()
|
||||
endif(LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
|
||||
|
||||
list(SORT _boost_components)
|
||||
message(STATUS "Libtorrent Boost dependencies: ${_boost_components}")
|
||||
find_package(Boost REQUIRED COMPONENTS ${_boost_components})
|
||||
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
foreach(_boost_cmpnt IN LISTS _boost_components)
|
||||
list(APPEND LibtorrentRasterbar_LIBRARIES "Boost::${_boost_cmpnt}")
|
||||
endforeach(_boost_cmpnt)
|
||||
|
||||
set(LibtorrentRasterbar_INCLUDE_DIRS ${LibtorrentRasterbar_INCLUDE_DIRS})
|
||||
|
||||
list(FIND LibtorrentRasterbar_DEFINITIONS -DTORRENT_USE_OPENSSL LibtorrentRasterbar_ENCRYPTION_INDEX)
|
||||
if(LibtorrentRasterbar_ENCRYPTION_INDEX GREATER -1)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto)
|
||||
list(APPEND LibtorrentRasterbar_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}")
|
||||
set(LibtorrentRasterbar_OPENSSL_ENABLED ON)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
# handle the QUIETLY and REQUIRED arguments and set LibtorrentRasterbar_FOUND to TRUE
|
||||
# if all listed variables are TRUE
|
||||
find_package_handle_standard_args(LibtorrentRasterbar DEFAULT_MSG
|
||||
LibtorrentRasterbar_LIBRARY
|
||||
LibtorrentRasterbar_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(LibtorrentRasterbar_INCLUDE_DIR LibtorrentRasterbar_LIBRARY
|
||||
LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES
|
||||
LibtorrentRasterbar_ENCRYPTION_INDEX)
|
||||
|
||||
if (LibtorrentRasterbar_FOUND AND NOT TARGET LibtorrentRasterbar::torrent-rasterbar)
|
||||
add_library(LibtorrentRasterbar::torrent-rasterbar UNKNOWN IMPORTED)
|
||||
|
||||
set_target_properties(LibtorrentRasterbar::torrent-rasterbar PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${LibtorrentRasterbar_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${LibtorrentRasterbar_INCLUDE_DIRS}"
|
||||
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${LibtorrentRasterbar_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "${LibtorrentRasterbar_LIBRARIES}"
|
||||
INTERFACE_COMPILE_OPTIONS "${LibtorrentRasterbar_DEFINITIONS}"
|
||||
)
|
||||
endif()
|
79
cmake/Modules/FindQtSingleApplication.cmake
Normal file
79
cmake/Modules/FindQtSingleApplication.cmake
Normal file
@@ -0,0 +1,79 @@
|
||||
# - Try to find the QtSingleApplication includes and library
|
||||
# which defines
|
||||
#
|
||||
# QtSingleApplication_FOUND - system has QtSingleApplication
|
||||
# QtSingleApplication_INCLUDE_DIR - where to find header QtSingleApplication
|
||||
# QtSingleApplication_LIBRARIES - the libraries to link against to use QtSingleApplication
|
||||
# QtSingleApplication_LIBRARY - where to find the QtSingleApplication library (not for general use)
|
||||
|
||||
# copyright (c) 2013 TI_Eugene ti.eugene@gmail.com
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the FreeBSD license.
|
||||
|
||||
SET(QtSingleApplication_FOUND FALSE)
|
||||
|
||||
if (Qt5Widgets_FOUND)
|
||||
set(_includeFileName qtsingleapplication.h)
|
||||
else()
|
||||
set(_includeFileName qtsinglecoreapplication.h)
|
||||
endif()
|
||||
|
||||
FOREACH(TOP_INCLUDE_PATH in ${Qt5Core_INCLUDE_DIRS} ${FRAMEWORK_INCLUDE_DIR})
|
||||
FIND_PATH(QtSingleApplication_INCLUDE_DIR ${_includeFileName} ${TOP_INCLUDE_PATH}/QtSolutions)
|
||||
|
||||
IF(QtSingleApplication_INCLUDE_DIR)
|
||||
BREAK()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
SET(QtSingleApplication_NAMES ${QtSingleApplication_NAMES}
|
||||
Qt5Solutions_SingleApplication-2.6 libQt5Solutions_SingleApplication-2.6
|
||||
QtSolutions_SingleApplication-2.6 libQtSolutions_SingleApplication-2.6)
|
||||
GET_TARGET_PROPERTY(_QT5_CORELIBRARY Qt5::Core LOCATION)
|
||||
GET_FILENAME_COMPONENT(_QT5_CORELIBRARYPATH ${_QT5_CORELIBRARY} PATH)
|
||||
|
||||
FIND_LIBRARY(QtSingleApplication_LIBRARY
|
||||
NAMES ${QtSingleApplication_NAMES}
|
||||
PATHS ${_QT5_CORELIBRARYPATH}
|
||||
)
|
||||
|
||||
IF (QtSingleApplication_LIBRARY AND QtSingleApplication_INCLUDE_DIR)
|
||||
|
||||
SET(QtSingleApplication_LIBRARIES ${QtSingleApplication_LIBRARY})
|
||||
SET(QtSingleApplication_FOUND TRUE)
|
||||
|
||||
IF (CYGWIN)
|
||||
IF(BUILD_SHARED_LIBS)
|
||||
# No need to define QtSingleApplication_USE_DLL here, because it's default for Cygwin.
|
||||
ELSE(BUILD_SHARED_LIBS)
|
||||
SET (QtSingleApplication_DEFINITIONS -DQTSINGLEAPPLICATION_STATIC)
|
||||
ENDIF(BUILD_SHARED_LIBS)
|
||||
ENDIF (CYGWIN)
|
||||
|
||||
ENDIF (QtSingleApplication_LIBRARY AND QtSingleApplication_INCLUDE_DIR)
|
||||
|
||||
IF (QtSingleApplication_FOUND)
|
||||
IF (NOT QtSingleApplication_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Found QtSingleApplication: ${QtSingleApplication_LIBRARY}")
|
||||
MESSAGE(STATUS " includes: ${QtSingleApplication_INCLUDE_DIR}")
|
||||
ENDIF (NOT QtSingleApplication_FIND_QUIETLY)
|
||||
if(NOT TARGET QtSingleApplication::QtSingleApplication)
|
||||
add_library(QtSingleApplication::QtSingleApplication UNKNOWN IMPORTED)
|
||||
set_target_properties(QtSingleApplication::QtSingleApplication PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${QtSingleApplication_INCLUDE_DIR}"
|
||||
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${QtSingleApplication_INCLUDE_DIR}"
|
||||
)
|
||||
if(EXISTS "${QtSingleApplication_LIBRARY}")
|
||||
set_target_properties(QtSingleApplication::QtSingleApplication PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${QtSingleApplication_LIBRARY}")
|
||||
endif()
|
||||
endif(NOT TARGET QtSingleApplication::QtSingleApplication)
|
||||
|
||||
ELSE (QtSingleApplication_FOUND)
|
||||
IF (QtSingleApplication_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could not find QtSingleApplication library")
|
||||
ENDIF (QtSingleApplication_FIND_REQUIRED)
|
||||
ENDIF (QtSingleApplication_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(QtSingleApplication_INCLUDE_DIR QtSingleApplication_LIBRARY)
|
@@ -8,7 +8,7 @@ find_package(PkgConfig QUIET REQUIRED)
|
||||
|
||||
if (NOT SYSTEMD_FOUND)
|
||||
pkg_check_modules(SYSTEMD "systemd")
|
||||
endif()
|
||||
endif(NOT SYSTEMD_FOUND)
|
||||
|
||||
if (SYSTEMD_FOUND AND "${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "")
|
||||
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE}
|
||||
@@ -23,4 +23,4 @@ endif()
|
||||
|
||||
if (SYSTEMD_FOUND)
|
||||
message(STATUS "systemd services install dir: ${SYSTEMD_SERVICES_INSTALL_DIR}")
|
||||
endif()
|
||||
endif(SYSTEMD_FOUND)
|
||||
|
28
cmake/Modules/FunctionReadVersion.cmake
Normal file
28
cmake/Modules/FunctionReadVersion.cmake
Normal file
@@ -0,0 +1,28 @@
|
||||
# function for parsing version variables that are set in version.pri file
|
||||
# the version identifiers there are defined as follows:
|
||||
# VER_MAJOR = 3
|
||||
# VER_MINOR = 4
|
||||
# VER_BUGFIX = 0
|
||||
# VER_BUILD = 0
|
||||
# VER_STATUS = alpha
|
||||
|
||||
function(read_version priFile outMajor outMinor outBugfix outBuild outStatus)
|
||||
file(STRINGS ${priFile} _priFileContents REGEX "^VER_.+")
|
||||
# message(STATUS "version.pri version contents: ${_priFileContents}")
|
||||
# the _priFileContents variable contains something like the following:
|
||||
# VER_MAJOR = 3;VER_MINOR = 4;VER_BUGFIX = 0;VER_BUILD = 0;VER_STATUS = alpha # Should be empty for stable releases!
|
||||
set(_regex "VER_MAJOR += +([0-9]+);VER_MINOR += +([0-9]+);VER_BUGFIX += +([0-9]+);VER_BUILD += +([0-9]+);VER_STATUS += +([0-9A-Za-z]+)?")
|
||||
# note quotes around _regex, they are needed because the variable contains semicolons
|
||||
string(REGEX MATCH "${_regex}" _tmp "${_priFileContents}")
|
||||
if (NOT _tmp)
|
||||
message(FATAL_ERROR "Could not detect project version number from ${priFile}")
|
||||
endif()
|
||||
|
||||
# message(STATUS "Matched version string: ${_tmp}")
|
||||
|
||||
set(${outMajor} ${CMAKE_MATCH_1} PARENT_SCOPE)
|
||||
set(${outMinor} ${CMAKE_MATCH_2} PARENT_SCOPE)
|
||||
set(${outBugfix} ${CMAKE_MATCH_3} PARENT_SCOPE)
|
||||
set(${outBuild} ${CMAKE_MATCH_4} PARENT_SCOPE)
|
||||
set(${outStatus} ${CMAKE_MATCH_5} PARENT_SCOPE)
|
||||
endfunction()
|
38
cmake/Modules/MacroConfigureMSVCRuntime.cmake
Normal file
38
cmake/Modules/MacroConfigureMSVCRuntime.cmake
Normal file
@@ -0,0 +1,38 @@
|
||||
macro(configure_msvc_runtime)
|
||||
if(MSVC)
|
||||
# Default to statically-linked runtime.
|
||||
if("${MSVC_RUNTIME}" STREQUAL "")
|
||||
set(MSVC_RUNTIME "static")
|
||||
endif()
|
||||
# Set compiler options.
|
||||
set(variables
|
||||
CMAKE_C_FLAGS_DEBUG
|
||||
CMAKE_C_FLAGS_MINSIZEREL
|
||||
CMAKE_C_FLAGS_RELEASE
|
||||
CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_CXX_FLAGS_DEBUG
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL
|
||||
CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
)
|
||||
if(${MSVC_RUNTIME} STREQUAL "static")
|
||||
message(STATUS
|
||||
"MSVC -> forcing use of statically-linked runtime."
|
||||
)
|
||||
foreach(variable ${variables})
|
||||
if(${variable} MATCHES "/MD")
|
||||
string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}")
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
message(STATUS
|
||||
"MSVC -> forcing use of dynamically-linked runtime."
|
||||
)
|
||||
foreach(variable ${variables})
|
||||
if(${variable} MATCHES "/MT")
|
||||
string(REGEX REPLACE "/MT" "/MD" ${variable} "${${variable}}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
49
cmake/Modules/MacroGlibcDetect.cmake
Normal file
49
cmake/Modules/MacroGlibcDetect.cmake
Normal file
@@ -0,0 +1,49 @@
|
||||
###############################################################
|
||||
#
|
||||
# Copyright 2011 Red Hat, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
||||
# may not use this file except in compliance with the License. You may
|
||||
# obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
###############################################################
|
||||
|
||||
MACRO (GLIBC_DETECT _VERSION)
|
||||
|
||||
# there are multiple ways to detect glibc, but given nmi's
|
||||
# cons'd up paths I will trust only gcc. I guess I could also use
|
||||
# ldd --version to detect.
|
||||
|
||||
set(_GLIB_SOURCE_DETECT "
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
int main()
|
||||
{
|
||||
printf(\"%d%d\",__GLIBC__, __GLIBC_MINOR__);
|
||||
return 0;
|
||||
}
|
||||
")
|
||||
|
||||
file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/build/cmake/glibc.cpp "${_GLIB_SOURCE_DETECT}\n")
|
||||
|
||||
try_run(POST26_GLIBC_DETECTED
|
||||
POST26_GLIBC_COMPILE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/build/cmake
|
||||
${CMAKE_CURRENT_BINARY_DIR}/build/cmake/glibc.cpp
|
||||
RUN_OUTPUT_VARIABLE GLIBC_VERSION )
|
||||
|
||||
if (GLIBC_VERSION AND POST26_GLIBC_COMPILE )
|
||||
set(${_VERSION} ${GLIBC_VERSION})
|
||||
else()
|
||||
message(STATUS "NOTE: Could not detect GLIBC_VERSION from compiler")
|
||||
endif()
|
||||
|
||||
ENDMACRO (GLIBC_DETECT)
|
28
cmake/Modules/MacroLinkQtComponents.cmake
Normal file
28
cmake/Modules/MacroLinkQtComponents.cmake
Normal file
@@ -0,0 +1,28 @@
|
||||
# - macro similar to target_link_libraries, which links Qt components
|
||||
# names of the components are passed in Qt4/Qt5 agnostic way (Core, DBus, Xml...)
|
||||
# and the macro links Qt4 ones if QT4_FOUND is set or Qt5 ones if not
|
||||
|
||||
macro (target_link_qt_components target)
|
||||
if (QT4_FOUND)
|
||||
foreach(_cmp ${ARGN})
|
||||
if ("${_cmp}" STREQUAL "PRIVATE" OR
|
||||
"${_cmp}" STREQUAL "PUBLIC" OR
|
||||
"${_cmp}" STREQUAL "INTERFACE")
|
||||
list(APPEND _QT_CMPNTS "${_cmp}")
|
||||
else()
|
||||
list(APPEND _QT_CMPNTS "Qt4::Qt${_cmp}")
|
||||
endif()
|
||||
endforeach()
|
||||
else (QT4_FOUND)
|
||||
foreach(_cmp ${ARGN})
|
||||
if ("${_cmp}" STREQUAL "PRIVATE" OR
|
||||
"${_cmp}" STREQUAL "PUBLIC" OR
|
||||
"${_cmp}" STREQUAL "INTERFACE")
|
||||
list(APPEND _QT_CMPNTS "${_cmp}")
|
||||
else()
|
||||
list(APPEND _QT_CMPNTS "Qt5::${_cmp}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif (QT4_FOUND)
|
||||
target_link_libraries(${target} ${_QT_CMPNTS})
|
||||
endmacro()
|
@@ -1,112 +0,0 @@
|
||||
# Set common variables and create some interface-only library targets
|
||||
# that some or all other targets will link to, either directly or transitively,
|
||||
# to consume common compile options/definitions
|
||||
|
||||
macro(qbt_common_config)
|
||||
|
||||
# treat value specified by the CXX_STANDARD target property as a requirement by default
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# these definitions are only needed for calls to
|
||||
# lt::generate_fingerprint and for the qbittorrent.rc file on Windows
|
||||
add_library(qbt_version_definitions INTERFACE)
|
||||
|
||||
target_compile_definitions(qbt_version_definitions INTERFACE
|
||||
QBT_VERSION_MAJOR=${qBittorrent_VERSION_MAJOR}
|
||||
QBT_VERSION_MINOR=${qBittorrent_VERSION_MINOR}
|
||||
QBT_VERSION_BUGFIX=${qBittorrent_VERSION_PATCH}
|
||||
QBT_VERSION_BUILD=${qBittorrent_VERSION_TWEAK}
|
||||
)
|
||||
|
||||
add_library(qbt_common_cfg INTERFACE)
|
||||
|
||||
# Full C++ 14 support is required
|
||||
# See also https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html
|
||||
# for a breakdown of the features that CMake recognizes for each C++ standard
|
||||
target_compile_features(qbt_common_cfg INTERFACE
|
||||
cxx_std_14
|
||||
cxx_aggregate_default_initializers
|
||||
cxx_attribute_deprecated
|
||||
cxx_binary_literals
|
||||
cxx_contextual_conversions
|
||||
cxx_decltype_auto
|
||||
cxx_digit_separators
|
||||
cxx_generic_lambdas
|
||||
cxx_lambda_init_captures
|
||||
cxx_relaxed_constexpr
|
||||
cxx_return_type_deduction
|
||||
cxx_variable_templates
|
||||
)
|
||||
|
||||
set(QBT_PROJECT_VERSION "${qBittorrent_VERSION_MAJOR}.${qBittorrent_VERSION_MINOR}.${qBittorrent_VERSION_PATCH}")
|
||||
if (NOT ${qBittorrent_VERSION_TWEAK} EQUAL 0)
|
||||
set(QBT_PROJECT_VERSION "${QBT_PROJECT_VERSION}.${qBittorrent_VERSION_TWEAK}")
|
||||
endif()
|
||||
|
||||
set(QBT_FULL_VERSION "${QBT_PROJECT_VERSION}${QBT_VER_STATUS}")
|
||||
|
||||
target_compile_definitions(qbt_common_cfg INTERFACE
|
||||
QBT_VERSION="v${QBT_FULL_VERSION}"
|
||||
QBT_VERSION_2="${QBT_FULL_VERSION}"
|
||||
QT_DEPRECATED_WARNINGS
|
||||
QT_NO_CAST_TO_ASCII
|
||||
QT_NO_CAST_FROM_BYTEARRAY
|
||||
QT_USE_QSTRINGBUILDER
|
||||
QT_STRICT_ITERATORS
|
||||
$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG_OUTPUT>
|
||||
)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
target_compile_definitions(qbt_common_cfg INTERFACE
|
||||
NTDDI_VERSION=0x06010000
|
||||
_WIN32_WINNT=0x0601
|
||||
_WIN32_IE=0x0601
|
||||
WIN32_LEAN_AND_MEAN
|
||||
NOMINMAX
|
||||
UNICODE
|
||||
_UNICODE
|
||||
)
|
||||
endif()
|
||||
|
||||
if ((CXX_COMPILER_ID STREQUAL "GNU") OR (CXX_COMPILER_ID STREQUAL "Clang") OR (CXX_COMPILER_ID STREQUAL "AppleClang"))
|
||||
target_compile_options(qbt_common_cfg INTERFACE
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wcast-qual
|
||||
-Wcast-align
|
||||
-Winvalid-pch
|
||||
-Woverloaded-virtual
|
||||
-Wold-style-cast
|
||||
-Wnon-virtual-dtor
|
||||
-pedantic
|
||||
-pedantic-errors
|
||||
)
|
||||
|
||||
# Clang 11 still doesn't support -Wstrict-null-sentinel
|
||||
include(CheckCXXCompilerFlag)
|
||||
check_cxx_compiler_flag(-Wstrict-null-sentinel SNS_SUPPORT)
|
||||
if (SNS_SUPPORT)
|
||||
target_compile_options(qbt_common_cfg INTERFACE -Wstrict-null-sentinel)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (MINGW)
|
||||
target_link_options(qbt_common_cfg INTERFACE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:LINKER:--dynamicbase>)
|
||||
endif()
|
||||
|
||||
if (MSVC_RUNTIME_DYNAMIC)
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
||||
else()
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
target_compile_options(qbt_common_cfg INTERFACE /guard:cf)
|
||||
target_link_options(qbt_common_cfg INTERFACE /guard:cf
|
||||
$<$<NOT:$<CONFIG:Debug>>:/OPT:REF /OPT:ICF>
|
||||
# suppress linking warning due to /INCREMENTAL and /OPT:ICF being both ON
|
||||
$<$<CONFIG:RelWithDebInfo>:/INCREMENTAL:NO>
|
||||
)
|
||||
endif()
|
||||
|
||||
endmacro(qbt_common_config)
|
102
cmake/Modules/MacroQbtCompilerSettings.cmake
Normal file
102
cmake/Modules/MacroQbtCompilerSettings.cmake
Normal file
@@ -0,0 +1,102 @@
|
||||
# Sets cache variable QBT_ADDITONAL_FLAGS and QBT_ADDITONAL_CXX_FLAGS to list of additional
|
||||
# compiler flags for C and C++ (QBT_ADDITONAL_FLAGS) and for C++ only (QBT_ADDITONAL_CXX_FLAGS)
|
||||
# and appends them to CMAKE_XXX_FLAGS variables.
|
||||
|
||||
# It could use add_compile_options(), but then it is needed to use generator expressions,
|
||||
# and most interesting of them are not compatible with Visual Studio :(
|
||||
|
||||
macro(qbt_set_compiler_options)
|
||||
# if (NOT QBT_ADDITONAL_FLAGS)
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
#-Wshadow -Wconversion ?
|
||||
set(_GCC_COMMON_C_AND_CXX_FLAGS "-Wall -Wextra"
|
||||
"-Wfloat-equal -Wcast-qual -Wcast-align"
|
||||
"-Wsign-conversion -Winvalid-pch -Wno-long-long"
|
||||
#"-fstack-protector-all"
|
||||
#"-Werror -Wno-error=deprecated-declarations"
|
||||
)
|
||||
set(_GCC_COMMON_CXX_FLAGS "-fexceptions -frtti"
|
||||
"-Woverloaded-virtual -Wold-style-cast"
|
||||
"-Wnon-virtual-dtor -Wfloat-equal -Wcast-qual -Wcast-align"
|
||||
#"-Weffc++"
|
||||
#"-Werror -Wno-error=cpp"
|
||||
# we should modify code to make these ones obsolete
|
||||
#"-Wno-error=sign-conversion -Wno-error=float-equal"
|
||||
)
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
|
||||
# GCC 4.8 has problems with std::array and its initialization
|
||||
list(APPEND _GCC_COMMON_CXX_FLAGS "-Wno-error=missing-field-initializers")
|
||||
endif()
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
# check for -pedantic
|
||||
check_cxx_compiler_flag(-pedantic _PEDANTIC_IS_SUPPORTED)
|
||||
if (_PEDANTIC_IS_SUPPORTED)
|
||||
list(APPEND _GCC_COMMON_CXX_FLAGS "-pedantic -pedantic-errors")
|
||||
else (_PEDANTIC_IS_SUPPORTED)
|
||||
list(APPEND _GCC_COMMON_CXX_FLAGS "-Wpedantic")
|
||||
endif (_PEDANTIC_IS_SUPPORTED)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
||||
# if Glibc version is 2.20 or higher, set -D_DEFAULT_SOURCE
|
||||
include(MacroGlibcDetect)
|
||||
message(STATUS "Detecting Glibc version...")
|
||||
glibc_detect(GLIBC_VERSION)
|
||||
if(${GLIBC_VERSION})
|
||||
if(GLIBC_VERSION LESS "220")
|
||||
message(STATUS "Glibc version is ${GLIBC_VERSION}")
|
||||
else(GLIBC_VERSION LESS "220")
|
||||
message(STATUS "Glibc version is ${GLIBC_VERSION}, adding -D_DEFAULT_SOURCE")
|
||||
add_definitions(-D_DEFAULT_SOURCE)
|
||||
endif(GLIBC_VERSION LESS "220")
|
||||
endif(${GLIBC_VERSION})
|
||||
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
# Clang 5.0 still doesn't support -Wstrict-null-sentinel
|
||||
check_cxx_compiler_flag(-Wstrict-null-sentinel _STRICT_NULL_SENTINEL_IS_SUPPORTED)
|
||||
if (_STRICT_NULL_SENTINEL_IS_SUPPORTED)
|
||||
list(APPEND _GCC_COMMON_CXX_FLAGS "-Wstrict-null-sentinel")
|
||||
endif (_STRICT_NULL_SENTINEL_IS_SUPPORTED)
|
||||
|
||||
# Code should be improved to render this not needed
|
||||
list(APPEND _GCC_COMMON_CXX_FLAGS "-Wno-error=unused-function -Wno-error=inconsistent-missing-override")
|
||||
else ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
# GCC supports it
|
||||
list(APPEND _GCC_COMMON_CXX_FLAGS "-Wstrict-null-sentinel")
|
||||
endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
|
||||
string(REPLACE ";" " " _GCC_COMMON_C_AND_CXX_FLAGS_STRING "${_GCC_COMMON_C_AND_CXX_FLAGS}")
|
||||
string(REPLACE ";" " " _GCC_COMMON_CXX_FLAGS_STRING "${_GCC_COMMON_CXX_FLAGS}")
|
||||
|
||||
string(APPEND CMAKE_C_FLAGS " ${_GCC_COMMON_C_AND_CXX_FLAGS_STRING}")
|
||||
string(APPEND CMAKE_CXX_FLAGS " ${_GCC_COMMON_C_AND_CXX_FLAGS_STRING} ${_GCC_COMMON_CXX_FLAGS_STRING}")
|
||||
|
||||
set(QBT_ADDITONAL_FLAGS "${_GCC_COMMON_C_AND_CXX_FLAGS_STRING}" CACHE STRING
|
||||
"Additional qBittorent compile flags" FORCE)
|
||||
set(QBT_ADDITONAL_CXX_FLAGS "${_GCC_COMMON_CXX_FLAGS_STRING}" CACHE STRING
|
||||
"Additional qBittorent C++ compile flags" FORCE)
|
||||
|
||||
# check whether we can enable -Og optimization for debug build
|
||||
# also let's enable -march=native for debug builds
|
||||
check_cxx_compiler_flag(-Og _DEBUG_OPTIMIZATION_LEVEL_IS_SUPPORTED)
|
||||
|
||||
if (_DEBUG_OPTIMIZATION_LEVEL_IS_SUPPORTED)
|
||||
string(APPEND CMAKE_C_FLAGS_DEBUG " -Og -g3 -march=native -pipe" )
|
||||
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -Og -g3 -march=native -pipe" )
|
||||
else(_DEBUG_OPTIMIZATION_LEVEL_IS_SUPPORTED)
|
||||
string(APPEND CMAKE_C_FLAGS_DEBUG " -O0 -g3 -march=native -pipe" )
|
||||
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g3 -march=native -pipe" )
|
||||
endif (_DEBUG_OPTIMIZATION_LEVEL_IS_SUPPORTED)
|
||||
endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
set(QBT_ADDITONAL_FLAGS "-wd4290 -wd4275 -wd4251 /W4" CACHE STRING "Additional qBittorent compile flags")
|
||||
string(APPEND CMAKE_C_FLAGS " ${QBT_ADDITONAL_FLAGS}")
|
||||
string(APPEND CMAKE_CXX_FLAGS " ${QBT_ADDITONAL_FLAGS}")
|
||||
endif ()
|
||||
|
||||
# endif (NOT QBT_ADDITONAL_FLAGS)
|
||||
endmacro(qbt_set_compiler_options)
|
||||
|
17
cmake/Modules/QbtTargetSources.cmake
Normal file
17
cmake/Modules/QbtTargetSources.cmake
Normal file
@@ -0,0 +1,17 @@
|
||||
# a helper function which appends source to the target
|
||||
# sources file names are relative to the the target source dir
|
||||
|
||||
function (qbt_target_sources _target _scope)
|
||||
get_target_property(targetSourceDir ${_target} SOURCE_DIR)
|
||||
set(sourcesRelative "")
|
||||
foreach(source IN ITEMS ${ARGN})
|
||||
if(IS_ABSOLUTE "${source}")
|
||||
set(sourceAbsolutePath "${source}")
|
||||
else()
|
||||
get_filename_component(sourceAbsolutePath "${source}" ABSOLUTE)
|
||||
endif()
|
||||
file(RELATIVE_PATH sourceRelativePath "${targetSourceDir}" "${sourceAbsolutePath}")
|
||||
list(APPEND sourcesRelative "${sourceRelativePath}")
|
||||
endforeach()
|
||||
target_sources(${_target} ${_scope} "${sourcesRelative}")
|
||||
endfunction(qbt_target_sources)
|
48
cmake/Modules/QbtTranslations.cmake
Normal file
48
cmake/Modules/QbtTranslations.cmake
Normal file
@@ -0,0 +1,48 @@
|
||||
# macros to handle translation files
|
||||
|
||||
# qbt_add_translations(<target> QRC_FILE <filename> TS_FILES <filenames>)
|
||||
# handles out of source builds for Qt resource files that include translations
|
||||
# The function generates translations out of the supplied list of .ts files in the build directory,
|
||||
# copies the .qrc file there, calls qt5_add_resources() adds its output to the target sources list.
|
||||
function(qbt_add_translations _target)
|
||||
set(oneValueArgs QRC_FILE)
|
||||
set(multiValueArgs TS_FILES)
|
||||
cmake_parse_arguments(QBT_TR "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
get_target_property(_binaryDir ${_target} BINARY_DIR)
|
||||
|
||||
if (NOT QBT_TR_QRC_FILE)
|
||||
message(FATAL_ERROR "QRC file is empty")
|
||||
endif()
|
||||
if (NOT QBT_TR_TS_FILES)
|
||||
message(FATAL_ERROR "TS_FILES files are empty")
|
||||
endif()
|
||||
|
||||
if(IS_ABSOLUTE "${QBT_TR_QRC_FILE}")
|
||||
file(RELATIVE_PATH _qrcToTs "${CMAKE_CURRENT_SOURCE_DIR}" "${QBT_TR_QRC_FILE}")
|
||||
else()
|
||||
set(_qrcToTs "${QBT_TR_QRC_FILE}")
|
||||
endif()
|
||||
|
||||
get_filename_component(_qrcToTsDir "${_qrcToTs}" DIRECTORY)
|
||||
|
||||
get_filename_component(_qmFilesBinaryDir "${CMAKE_CURRENT_BINARY_DIR}/${_qrcToTsDir}" ABSOLUTE)
|
||||
# to make qt5_add_translation() work as we need
|
||||
set_source_files_properties(${QBT_TR_TS_FILES} PROPERTIES OUTPUT_LOCATION "${_qmFilesBinaryDir}")
|
||||
qt5_add_translation(_qmFiles ${QBT_TR_TS_FILES})
|
||||
|
||||
set(_qrc_dest_dir "${_binaryDir}/${_qrcToTsDir}")
|
||||
set(_qrc_dest_file "${_binaryDir}/${QBT_TR_QRC_FILE}")
|
||||
|
||||
message(STATUS "copying ${QBT_TR_QRC_FILE} to ${_qrc_dest_dir}")
|
||||
file(COPY ${QBT_TR_QRC_FILE} DESTINATION ${_qrc_dest_dir})
|
||||
|
||||
set_source_files_properties("${_qrc_dest_file}" PROPERTIES
|
||||
GENERATED True
|
||||
OBJECT_DEPENDS "${_qmFiles}")
|
||||
|
||||
# With AUTORCC enabled rcc is ran by cmake before language files are generated,
|
||||
# and thus we call rcc explicitly
|
||||
qt5_add_resources(_resources "${_qrc_dest_file}")
|
||||
target_sources(${_target} PRIVATE "${_resources}")
|
||||
endfunction()
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user