You've already forked qBittorrent
mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-10-14 11:52:15 +02:00
Compare commits
375 Commits
v4_2_x
...
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 |
@@ -45,8 +45,7 @@ before_build:
|
|||||||
- CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
|
- CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
|
||||||
- SET PATH=%PATH%;c:\qbt\qt5_32\bin;%CACHE_DIR%\jom;
|
- SET PATH=%PATH%;c:\qbt\qt5_32\bin;%CACHE_DIR%\jom;
|
||||||
# setup project
|
# setup project
|
||||||
- COPY /Y "%CACHE_DIR%\winconf.pri" "%REPO_DIR%"
|
- COPY /Y "%CACHE_DIR%\conf.pri" "%REPO_DIR%"
|
||||||
- COPY /Y "%CACHE_DIR%\winconf-msvc.pri" "%REPO_DIR%"
|
|
||||||
# workarounds
|
# workarounds
|
||||||
- MKLINK /J "c:\qbt\base" "%CACHE_DIR%\base"
|
- MKLINK /J "c:\qbt\base" "%CACHE_DIR%\base"
|
||||||
|
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -22,6 +22,7 @@ qrc_*.cpp
|
|||||||
ui_*.h
|
ui_*.h
|
||||||
*.moc
|
*.moc
|
||||||
src/lang/qbittorrent_*.qm
|
src/lang/qbittorrent_*.qm
|
||||||
|
src/webui/www/translations/webui_*.qm
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.qmake.stash
|
.qmake.stash
|
||||||
src/qbittorrent.app
|
src/qbittorrent.app
|
||||||
|
73
.travis.yml
73
.travis.yml
@@ -3,7 +3,8 @@ language: cpp
|
|||||||
os:
|
os:
|
||||||
- linux
|
- linux
|
||||||
- osx
|
- osx
|
||||||
osx_image: xcode7.3
|
|
||||||
|
dist: xenial
|
||||||
|
|
||||||
env:
|
env:
|
||||||
matrix:
|
matrix:
|
||||||
@@ -38,11 +39,6 @@ cache:
|
|||||||
directories:
|
directories:
|
||||||
- $HOME/hombebrew_cache
|
- $HOME/hombebrew_cache
|
||||||
|
|
||||||
# opt-in Ubuntu Trusty
|
|
||||||
dist: trusty
|
|
||||||
# container-based builds
|
|
||||||
sudo: false
|
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
coverity_scan:
|
coverity_scan:
|
||||||
project:
|
project:
|
||||||
@@ -54,34 +50,30 @@ addons:
|
|||||||
notification_email: sledgehammer999@qbittorrent.org
|
notification_email: sledgehammer999@qbittorrent.org
|
||||||
apt:
|
apt:
|
||||||
sources:
|
sources:
|
||||||
# sources list: https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json
|
# sources list: https://github.com/travis-ci/apt-source-safelist/blob/master/ubuntu.json
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
#- boost-latest
|
|
||||||
- sourceline: 'ppa:qbittorrent-team/qbittorrent-stable'
|
- sourceline: 'ppa:qbittorrent-team/qbittorrent-stable'
|
||||||
- sourceline: 'ppa:beineri/opt-qt551-trusty'
|
|
||||||
- sourceline: 'ppa:adrozdoff/cmake'
|
|
||||||
packages:
|
packages:
|
||||||
# packages list: https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
|
# packages list: https://github.com/travis-ci/apt-package-safelist/blob/master/ubuntu-trusty
|
||||||
- [autoconf, automake, colormake]
|
- [autoconf, automake, colormake]
|
||||||
- [cmake, ninja-build]
|
- [ninja-build]
|
||||||
- libssl-dev
|
- libssl-dev
|
||||||
- [libboost-dev, libboost-system-dev]
|
- [libboost-dev, libboost-system-dev]
|
||||||
- libtorrent-rasterbar-dev
|
- libtorrent-rasterbar-dev
|
||||||
- [qt55base, qt55svg, qt55tools]
|
- [qtbase5-dev, qttools5-dev-tools, libqt5svg5-dev]
|
||||||
- [gcc-6, g++-6]
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
# only allow specific build for coverity scan, others will stop
|
# only allow specific build for coverity scan, others will stop
|
||||||
- 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
|
- 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
|
- shopt -s expand_aliases
|
||||||
- alias make="colormake -j3" # Using nprocs/2 sometimes may fail (gcc is killed by system)
|
- alias make="colormake -j2" # Using nprocs/2 sometimes may fail (gcc is killed by system)
|
||||||
- qbt_path="$HOME/qbt_install"
|
- qbt_path="$HOME/qbt_install"
|
||||||
- |
|
- |
|
||||||
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||||
qbtconf="$qbtconf --prefix="$qbt_path" PKG_CONFIG_PATH=/opt/qt55/lib/pkgconfig:$PKG_CONFIG_PATH"
|
qbtconf="$qbtconf --prefix="$qbt_path" PKG_CONFIG_PATH=/opt/qt55/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
else
|
else
|
||||||
qbtconf="$qbtconf --prefix="$qbt_path""
|
qbtconf="$qbtconf --prefix="$qbt_path""
|
||||||
|
CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedefs -Wno-inconsistent-missing-override"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# options for specific branches
|
# options for specific branches
|
||||||
@@ -90,14 +82,6 @@ before_install:
|
|||||||
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||||
# setup virtual display for after_success target
|
# 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 ;
|
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 ;
|
||||||
|
|
||||||
# Qt 5
|
|
||||||
PATH=/opt/qt55/bin:${PATH}
|
|
||||||
|
|
||||||
if [ "$build_system" = "cmake" ]; then
|
|
||||||
COMPILER_VERSION=6
|
|
||||||
export CXX="${CXX}-${COMPILER_VERSION}" CC="${CC}-${COMPILER_VERSION}"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# print settings
|
# print settings
|
||||||
@@ -121,34 +105,16 @@ install:
|
|||||||
# dependencies
|
# dependencies
|
||||||
brew update > /dev/null
|
brew update > /dev/null
|
||||||
brew outdated "pkg-config" || brew upgrade "pkg-config"
|
brew outdated "pkg-config" || brew upgrade "pkg-config"
|
||||||
brew install colormake ccache zlib qt
|
brew install colormake ccache zlib qt libtorrent-rasterbar
|
||||||
PATH="/usr/local/opt/ccache/libexec:$PATH"
|
PATH="/usr/local/opt/ccache/libexec:$PATH"
|
||||||
brew link --force zlib qt
|
brew link --force zlib qt
|
||||||
|
|
||||||
wget https://builds.shiki.hu/homebrew/version
|
|
||||||
if ! cmp --quiet "version" "$HOME/hombebrew_cache/version" ; then
|
|
||||||
echo "Cached files are different from server. Downloading new ones."
|
|
||||||
# First delete old files
|
|
||||||
rm -r "$HOME/hombebrew_cache"
|
|
||||||
mkdir "$HOME/hombebrew_cache"
|
|
||||||
cp "version" $HOME/hombebrew_cache
|
|
||||||
cd "$HOME/hombebrew_cache"
|
|
||||||
wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar.rb
|
|
||||||
wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar-1.1.7+git20180422.3ede0b9c20+patched-configure.el_capitan.bottle.tar.gz
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copy custom libtorrent bottle to homebrew's cache so it can find and install it
|
|
||||||
# Also install our custom libtorrent formula by passing the local path to it
|
|
||||||
# These 2 files are restored from Travis' cache.
|
|
||||||
cp "$HOME/hombebrew_cache/libtorrent-rasterbar-1.1.7+git20180422.3ede0b9c20+patched-configure.el_capitan.bottle.tar.gz" "$(brew --cache)"
|
|
||||||
brew install "$HOME/hombebrew_cache/libtorrent-rasterbar.rb"
|
|
||||||
|
|
||||||
if [ "$build_system" = "cmake" ]; then
|
if [ "$build_system" = "cmake" ]; then
|
||||||
brew outdated cmake || brew upgrade cmake
|
brew outdated cmake || brew upgrade cmake
|
||||||
brew install ninja
|
brew install ninja
|
||||||
|
|
||||||
ln -s /usr/local/opt/qt/mkspecs /usr/local/mkspecs
|
sudo ln -s /usr/local/opt/qt/mkspecs /usr/local/mkspecs
|
||||||
ln -s /usr/local/opt/qt/plugins /usr/local/plugins
|
sudo ln -s /usr/local/opt/qt/plugins /usr/local/plugins
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MY_CMAKE_OPENSSL_HINT="-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/"
|
MY_CMAKE_OPENSSL_HINT="-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/"
|
||||||
@@ -156,6 +122,7 @@ install:
|
|||||||
- |
|
- |
|
||||||
if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
|
if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
|
||||||
export use_ccache=true
|
export use_ccache=true
|
||||||
|
ccache -M 512M
|
||||||
ccache -V && ccache --show-stats && ccache --zero-stats
|
ccache -V && ccache --show-stats && ccache --zero-stats
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -166,21 +133,15 @@ script:
|
|||||||
if [ "$build_system" = "cmake" ]; then
|
if [ "$build_system" = "cmake" ]; then
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -DGUI=${gui} -DCMAKE_INSTALL_PREFIX="$qbt_path" "$MY_CMAKE_OPENSSL_HINT" \
|
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 ..
|
-G "Ninja" -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE ..
|
||||||
BUILD_TOOL="ninja"
|
BUILD_TOOL="ninja"
|
||||||
fi
|
fi
|
||||||
if [ "$build_system" = "qmake" ]; then
|
if [ "$build_system" = "qmake" ]; then
|
||||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
./bootstrap.sh && ./configure $qbtconf CXXFLAGS="$CXXFLAGS"
|
||||||
# For some reason for RC_1_1 we need to also specify the OpenSSL compiler/linker flags
|
|
||||||
# Homebrew doesn't symlink OpenSSL for security reasons
|
|
||||||
./bootstrap.sh && ./configure $qbtconf CXXFLAGS="$(PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH" pkg-config --cflags openssl)" LDFLAGS="$(PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH" pkg-config --libs openssl)"
|
|
||||||
sed -i "" -e "s/^\(CC.*&&\).*$/\1 $CC/" src/Makefile # workaround for Qt & ccache: https://bugreports.qt.io/browse/QTBUG-31034
|
|
||||||
sed -i "" -e "s/^\(CXX.*&&\).*$/\1 $CXX/" src/Makefile
|
|
||||||
sed -i "" -e 's/^\(CXXFLAGS.*\)$/\1 -Wno-unused-local-typedefs -Wno-inconsistent-missing-override/' src/Makefile
|
|
||||||
else
|
|
||||||
./bootstrap.sh && ./configure $qbtconf
|
|
||||||
fi
|
|
||||||
BUILD_TOOL="make"
|
BUILD_TOOL="make"
|
||||||
fi
|
fi
|
||||||
- $BUILD_TOOL && $BUILD_TOOL install
|
- $BUILD_TOOL && $BUILD_TOOL install
|
||||||
|
12
.tx/config
12
.tx/config
@@ -10,10 +10,18 @@ type = QT
|
|||||||
minimum_perc = 23
|
minimum_perc = 23
|
||||||
mode = developer
|
mode = developer
|
||||||
|
|
||||||
|
|
||||||
[qbittorrent.qbittorrentdesktop_master]
|
[qbittorrent.qbittorrentdesktop_master]
|
||||||
source_file = src/icons/qBittorrent.desktop
|
source_file = dist/unix/qbittorrent.desktop
|
||||||
source_lang = en
|
source_lang = en
|
||||||
type = DESKTOP
|
type = DESKTOP
|
||||||
minimum_perc = 23
|
minimum_perc = 23
|
||||||
mode = developer
|
mode = developer
|
||||||
|
|
||||||
|
[qbittorrent.qbittorrent_webui]
|
||||||
|
file_filter = src/webui/www/translations/webui_<lang>.ts
|
||||||
|
lang_map = pt: pt_PT
|
||||||
|
source_file = src/webui/www/translations/webui_en.ts
|
||||||
|
source_lang = en
|
||||||
|
type = QT
|
||||||
|
minimum_perc = 23
|
||||||
|
mode = developer
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||||
cmake_policy(VERSION 3.5)
|
|
||||||
|
message(AUTHOR_WARNING "If the build fails, please try the autotools/qmake method.")
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
|
||||||
include(FunctionReadVersion)
|
include(FunctionReadVersion)
|
||||||
@@ -25,32 +26,29 @@ add_definitions(-DQBT_VERSION_BUILD=${VER_BUILD})
|
|||||||
add_definitions(-DQBT_VERSION="v${PROJECT_VERSION}")
|
add_definitions(-DQBT_VERSION="v${PROJECT_VERSION}")
|
||||||
add_definitions(-DQBT_VERSION_2="${PROJECT_VERSION}")
|
add_definitions(-DQBT_VERSION_2="${PROJECT_VERSION}")
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE)
|
include(GNUInstallDirs)
|
||||||
include(GNUInstallDirs)
|
include(FeatureSummary)
|
||||||
endif (UNIX AND NOT APPLE)
|
|
||||||
|
# version requirements
|
||||||
|
set(requiredBoostVersion 1.35)
|
||||||
|
set(requiredQtVersion 5.5.1)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
include(winconf)
|
include(winconf)
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
# we need options here, because they are used not only in "src" subdir, but in the "dist" dir too
|
|
||||||
include(CMakeDependentOption)
|
|
||||||
|
|
||||||
option(SYSTEM_QTSINGLEAPPLICATION
|
# we need options here, at the top level, because they are used not only in "src" subdir, but in the "dist" dir too
|
||||||
"Use the system qtsingleapplication library or shipped one otherwise")
|
include(CompileFeature)
|
||||||
|
|
||||||
option(GUI "Allows to disable GUI for headless running. Disables QtDBus and the GeoIP Database" ON)
|
|
||||||
|
|
||||||
option(WEBUI "Allows to disable the WebUI." ON)
|
|
||||||
|
|
||||||
option(STACKTRACE "Enable stacktrace feature" ON)
|
|
||||||
|
|
||||||
if (UNIX)
|
|
||||||
cmake_dependent_option(SYSTEMD "Install the systemd service file (headless only)" OFF
|
|
||||||
"NOT GUI" OFF)
|
|
||||||
cmake_dependent_option(DBUS "Enable use of QtDBus (GUI only)" ON "GUI" OFF)
|
|
||||||
endif(UNIX)
|
|
||||||
|
|
||||||
|
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(src)
|
||||||
add_subdirectory(dist)
|
add_subdirectory(dist)
|
||||||
|
|
||||||
|
feature_summary(DESCRIPTION "\nConfiguration results:" WHAT ALL)
|
||||||
|
@@ -6,6 +6,31 @@ For programming languages other than C++ (e.g. JavaScript) used in this reposito
|
|||||||
**Note 2:** You can use the `uncrustify` program/tool to clean up any source file. Use it with the `uncrustify.cfg` configuration file found in the root folder.
|
**Note 2:** You can use the `uncrustify` program/tool to clean up any source file. Use it with the `uncrustify.cfg` configuration file found in the root folder.
|
||||||
**Note 3:** There is also a style for QtCreator but it doesn't cover all cases. In QtCreator `Tools->Options...->C++->Code Style->Import...` and choose the `codingStyleQtCreator.xml` file found in the root folder.
|
**Note 3:** There is also a style for QtCreator but it doesn't cover all cases. In QtCreator `Tools->Options...->C++->Code Style->Import...` and choose the `codingStyleQtCreator.xml` file found in the root folder.
|
||||||
|
|
||||||
|
### Table Of Contents
|
||||||
|
|
||||||
|
* [1. New lines & curly braces](#1-new-lines--curly-braces)
|
||||||
|
* [a. Function blocks, class/struct definitions, namespaces](#a-function-blocks-classstruct-definitions-namespaces)
|
||||||
|
* [b. Other code blocks](#b-other-code-blocks)
|
||||||
|
* [c. Blocks in switch's case labels](#c-blocks-in-switchs-case-labels)
|
||||||
|
* [d. If-else statements](#d-if-else-statements)
|
||||||
|
* [e. Single statement if blocks](#e-single-statement-if-blocks)
|
||||||
|
* [f. Acceptable conditions to omit braces](#f-acceptable-conditions-to-omit-braces)
|
||||||
|
* [g. Brace enclosed initializers](#g-brace-enclosed-initializers)
|
||||||
|
* [2. Indentation](#2-indentation)
|
||||||
|
* [3. File encoding and line endings](#3-file-encoding-and-line-endings)
|
||||||
|
* [4. Initialization lists](#4-initialization-lists)
|
||||||
|
* [5. Enums](#5-enums)
|
||||||
|
* [6. Names](#6-names)
|
||||||
|
* [a. Type names and namespaces](#a-type-names-and-namespaces)
|
||||||
|
* [b. Variable names](#b-variable-names)
|
||||||
|
* [c. Private member variable names](#c-private-member-variable-names)
|
||||||
|
* [7. Header inclusion order](#7-header-inclusion-order)
|
||||||
|
* [8. Include guard](#8-include-guard)
|
||||||
|
* [9. Misc](#9-misc)
|
||||||
|
* [10. Git commit message](#10-git-commit-message)
|
||||||
|
* [11. Not covered above](#11-not-covered-above)
|
||||||
|
---
|
||||||
|
|
||||||
### 1. New lines & curly braces ###
|
### 1. New lines & curly braces ###
|
||||||
|
|
||||||
#### a. Function blocks, class/struct definitions, namespaces ####
|
#### a. Function blocks, class/struct definitions, namespaces ####
|
||||||
@@ -165,11 +190,11 @@ QVariantMap map {{"key1", 5}, {"key2", 10}};
|
|||||||
### 2. Indentation ###
|
### 2. Indentation ###
|
||||||
4 spaces.
|
4 spaces.
|
||||||
|
|
||||||
### 3. File encoding and line endings. ###
|
### 3. File encoding and line endings ###
|
||||||
|
|
||||||
UTF-8 and Unix-like line ending (LF). Unless some platform specific files need other encodings/line endings.
|
UTF-8 and Unix-like line ending (LF). Unless some platform specific files need other encodings/line endings.
|
||||||
|
|
||||||
### 4. Initialization lists. ###
|
### 4. Initialization lists ###
|
||||||
Initialization lists should be vertical. This will allow for more easily readable diffs. The initialization colon should be indented and in its own line along with first argument. The rest of the arguments should be indented too and have the comma prepended.
|
Initialization lists should be vertical. This will allow for more easily readable diffs. The initialization colon should be indented and in its own line along with first argument. The rest of the arguments should be indented too and have the comma prepended.
|
||||||
```c++
|
```c++
|
||||||
myClass::myClass(int a, int b, int c, int d)
|
myClass::myClass(int a, int b, int c, int d)
|
||||||
@@ -182,7 +207,7 @@ myClass::myClass(int a, int b, int c, int d)
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5. Enums. ###
|
### 5. Enums ###
|
||||||
Enums should be vertical. This will allow for more easily readable diffs. The members should be indented.
|
Enums should be vertical. This will allow for more easily readable diffs. The members should be indented.
|
||||||
```c++
|
```c++
|
||||||
enum Days
|
enum Days
|
||||||
@@ -197,7 +222,7 @@ enum Days
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6. Names. ###
|
### 6. Names ###
|
||||||
All names should be camelCased.
|
All names should be camelCased.
|
||||||
|
|
||||||
#### a. Type names and namespaces ####
|
#### a. Type names and namespaces ####
|
||||||
@@ -231,7 +256,7 @@ class MyClass
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 7. Header inclusion order. ###
|
### 7. Header inclusion order ###
|
||||||
The headers should be placed in the following group order:
|
The headers should be placed in the following group order:
|
||||||
1. Module header (in .cpp)
|
1. Module header (in .cpp)
|
||||||
2. C++ Standard Library headers
|
2. C++ Standard Library headers
|
||||||
@@ -239,11 +264,11 @@ The headers should be placed in the following group order:
|
|||||||
4. Boost library headers
|
4. Boost library headers
|
||||||
5. Libtorrent headers
|
5. Libtorrent headers
|
||||||
6. Qt headers
|
6. Qt headers
|
||||||
7. qBittorrent own headers, starting from *base* headers.
|
7. qBittorrent's own headers, starting from the *base* headers.
|
||||||
|
|
||||||
The headers should be ordered alphabetically within each group.
|
The headers should be ordered alphabetically within each group.
|
||||||
If there are conditionals for the same header group, then put them at the bottom of the respective group.
|
If there are conditionals for the same header group, then put them at the bottom of the respective group.
|
||||||
If there are conditionals for the different header groups, then put them above of the "qBittorrent own headers" group.
|
If there are conditionals that contain headers from several different header groups, then put them above the "qBittorrent's own headers" group.
|
||||||
|
|
||||||
One exception is the header containing the library version (for example, QtGlobal), this particular header isn't constrained by the aforementioned order.
|
One exception is the header containing the library version (for example, QtGlobal), this particular header isn't constrained by the aforementioned order.
|
||||||
|
|
||||||
@@ -285,19 +310,19 @@ Example:
|
|||||||
#include <QFont>
|
#include <QFont>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// conditional for the different header groups
|
// conditional that contains headers from several different header groups
|
||||||
#if LIBTORRENT_VERSION_NUM >= 10100
|
#if LIBTORRENT_VERSION_NUM >= 10100
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// qBittorrent own headers
|
// qBittorrent's own headers
|
||||||
#include "base/bittorrent/infohash.h"
|
#include "base/bittorrent/infohash.h"
|
||||||
#include "anothermodule.h"
|
#include "anothermodule.h"
|
||||||
#include "ui_examplewidget.h"
|
#include "ui_examplewidget.h"
|
||||||
```
|
```
|
||||||
|
|
||||||
### 8. Include guard. ###
|
### 8. Include guard ###
|
||||||
`#pragma once` should be used instead of "include guard" in new code:
|
`#pragma once` should be used instead of "include guard" in new code:
|
||||||
```c++
|
```c++
|
||||||
// examplewidget.h
|
// examplewidget.h
|
||||||
@@ -313,7 +338,7 @@ class ExampleWidget : public QWidget
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 9. Misc. ###
|
### 9. Misc ###
|
||||||
|
|
||||||
* Line breaks for long lines with operation:
|
* Line breaks for long lines with operation:
|
||||||
|
|
||||||
|
202
Changelog
202
Changelog
@@ -1,3 +1,205 @@
|
|||||||
|
* 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)
|
||||||
|
- BUGFIX: Fix regression on resuming torrents without metadata (thalieht)
|
||||||
|
- BUGFIX: Reorder and rename Tracker list context menu option (Thomas Piccirello)
|
||||||
|
- BUGFIX: Rename Tracker List columns (Thomas Piccirello)
|
||||||
|
- BUGFIX: Show error message when Session failed to start (glassez)
|
||||||
|
- BUGFIX: Embedded tracker: Use ip parameter from tracker request if provided (Chocobo1)
|
||||||
|
- BUGFIX: Fix weekday names translations (Chocobo1)
|
||||||
|
- BUGFIX: Fix strings not translated (Chocobo1)
|
||||||
|
- WEBUI: Change qBittorrent exit message to HTML5 (Chocobo1)
|
||||||
|
- WEBUI: Revise CSP header (Chocobo1)
|
||||||
|
- WEBUI: Enforce referrer-policy in WebUI (Chocobo1)
|
||||||
|
- WEBUI: Add torrent name filtering to WebUI (Thomas Piccirello)
|
||||||
|
- WEBUI: Send numeric status without translation (Thomas Piccirello)
|
||||||
|
- WEBUI: Add WebUI Trackers context menu (Thomas Piccirello)
|
||||||
|
- WEBUI: Add DHT, PeX, and LSD to WebUI Tracker list (Thomas Piccirello)
|
||||||
|
- WEBUI: Add additional Tracker columns to WebUI (Thomas Piccirello)
|
||||||
|
- WEBUI: Bump Web API version
|
||||||
|
- WEBUI: Fix display bugs in WebUI Files tab. Remove <IE9 support (Thomas Piccirello)
|
||||||
|
- WEBUI: Fix incorrect priority value sent from WebUI (Thomas Piccirello)
|
||||||
|
- WEBUI: Set priority for multiple files in one WebAPI request (Thomas Piccirello)
|
||||||
|
- WEBUI: Match WebUI Peers table column order to GUI (Thomas Piccirello)
|
||||||
|
- WEBUI: Fetch data less frequently when torrents tab isn't visible (Thomas Piccirello)
|
||||||
|
- WEBUI: Add Search tab to WebUI (Thomas Piccirello)
|
||||||
|
- WEBUI: Add ability to pass urls to the webui download page (Thomas Piccirello)
|
||||||
|
- WEBUI: Fix JavaScript error (Tom Piccirello)
|
||||||
|
- WEBUI: Disallow setting a blank alternative WebUI location (Thomas Piccirello)
|
||||||
|
- WEBUI: Add slow torrent options (Thomas Piccirello)
|
||||||
|
- WEBUI: Add "Use alternative Web UI" option (Thomas Piccirello)
|
||||||
|
- WEBUI: Add "Apply rate limit to peers on LAN" option (Thomas Piccirello)
|
||||||
|
- WEBUI: Add email "From" option (Thomas Piccirello)
|
||||||
|
- WEBUI: Set WebUI download options using set preferences (Thomas Piccirello)
|
||||||
|
- WEBUI: Show list of categories on WebUI download page (Thomas Piccirello)
|
||||||
|
- WEBUI: Hide WebUI text input for custom monitor save locations (Thomas Piccirello)
|
||||||
|
- WEBUI: Add "When adding a torrent" options (Thomas Piccirello)
|
||||||
|
- WEBUI: Add WebUI Auto TMM options (Thomas Piccirello)
|
||||||
|
- WEBUI: Add speed limit icons to WebUI Speed options (Thomas Piccirello)
|
||||||
|
- WEBUI: Add WebUI Random port button and proxy unencrypted password notice (Thomas Piccirello)
|
||||||
|
- WEBUI: Replace WebUI Options fixed-width labels (Thomas Piccirello)
|
||||||
|
- WEBUI: Reorder WebUI options to match GUI (Thomas Piccirello)
|
||||||
|
- WEBUI: Allow WebUI sidebar to be collapsed (Thomas Piccirello)
|
||||||
|
- WEBUI: Show ellipsis when WebUI sidebar is too narrow (Thomas Piccirello)
|
||||||
|
- WEBUI: Fix WebUI bug on override of Start Download option.Closes #9855. (Tom Piccirello)
|
||||||
|
- WEBUI: Fix missing words in WebUI (Chocobo1)
|
||||||
|
- WEBUI: Add SameSite attribute to WebUI session cookie (Thomas Piccirello)
|
||||||
|
- WEBUI: Put WebUI security related options into a groupbox (Chocobo1)
|
||||||
|
- WEBUI: Add option for WebUI Host header validation (Chocobo1)
|
||||||
|
- WEBUI: Show icon in WebUI sorted column (Thomas Piccirello)
|
||||||
|
- RSS: Keep track of REPACK/PROPER downloads. Closes #9898. (Stephen Dawkins)
|
||||||
|
- SEARCH: Only instantiate SearchPluginManager as needed (Thomas Piccirello)
|
||||||
|
- MACOS: Make file icon look like other macOS icons (Nick Korotysh)
|
||||||
|
- MACOS: Save option to start minimized in Mac (thalieht)
|
||||||
|
|
||||||
|
* Mon Nov 19 2018 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.4
|
||||||
|
- FEATURE: Recognize *.ts files as previewable (silver)
|
||||||
|
- FEATURE: Allow to disable speed graphs (dzmat)
|
||||||
|
- FEATURE: Clear LineEdit on ESC (silverqx)
|
||||||
|
- BUGFIX: Fix divide-by-zero crash (Chocobo1)
|
||||||
|
- BUGFIX: Remove speed limit checkbox in Options dialog (Chocobo1)
|
||||||
|
- BUGFIX: Fix speed graph "high speeds" bug (dzmat)
|
||||||
|
- BUGFIX: Don't update torrent status unnecessarily (glassez)
|
||||||
|
- BUGFIX: Improve force recheck of paused torrent (glassez)
|
||||||
|
- BUGFIX: Restore torrent in two steps (glassez)
|
||||||
|
- BUGFIX: Improve scaling of speed graphs (dzmat)
|
||||||
|
- BUGFIX: Add isNetworkFileSystem() detection on Windows. This allows network mounts to be monitored correctly by polling timer. (Chocobo1)
|
||||||
|
- BUGFIX: Reduce horizontal graphs resolution. Improves perfomance. (dzmat)
|
||||||
|
- BUGFIX: Don't recheck just checked torrent (mj-p, glassez)
|
||||||
|
- BUGFIX: Add SMB2 magic number (Chocobo1)
|
||||||
|
- BUGFIX: Restore startup perfomance to v4.1.2 times. Needs at least libtorrent 1.1.10 (sledgehammer999)
|
||||||
|
- BUGFIX: Make strings actually translatable (sledgehammer999)
|
||||||
|
- WEBUI: Handle downloading .torrent file as success (Tom Piccirello)
|
||||||
|
- WEBUI: Fix Alternative Web UI to be available (glassez)
|
||||||
|
- WEBUI: Consider empty locale setting as not set (glassez)
|
||||||
|
- WEBUI: Add free disk space to WebUI status bar (Thomas Piccirello)
|
||||||
|
- WEBUI: Add WebUI search API controller (Thomas Piccirello)
|
||||||
|
- WEBUI: Fix WebUI Auto TMM context menu bug (Thomas Piccirello)
|
||||||
|
- WEBUI: Use independent translation for WebUI (glassez)
|
||||||
|
- WEBUI: Add categories WebAPI (Thomas Piccirello)
|
||||||
|
- WEBUI: Fix minor JavaScript defects (Thomas Piccirello)
|
||||||
|
- WEBUI: Add locale to js file path (Thomas Piccirello)
|
||||||
|
- WEBUI: Translate WebUI torrents Status column (Thomas Piccirello)
|
||||||
|
- WEBUI: Bump Web API version
|
||||||
|
- RSS: Allow to disable downloading REPACK/PROPER matches (Stephen Dawkins)
|
||||||
|
- RSS: Improve RSS Feed updating (glassez)
|
||||||
|
- SEARCH: Allow resizing search filter in search job (thalieht)
|
||||||
|
- SEARCH: Improve parser for search engine versions.txt (Chocobo1)
|
||||||
|
- SEARCH: Update Python URLs (Chocobo1)
|
||||||
|
- SEARCH: Fix asking to install Python (Chocobo1)
|
||||||
|
- SEARCH: Reformat python code to be compliant with PEP8 (Chocobo1)
|
||||||
|
- OTHER: cmake: restore out-of-source build (Eugene Shalygin)
|
||||||
|
- OTHER: cmake: cmake: use C++14 when available (Eugene Shalygin)
|
||||||
|
|
||||||
|
* Tue Sep 18 2018 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.3
|
||||||
|
- FEATURE: Preselect name without extension when renaming files (thalieht)
|
||||||
|
- FEATURE: Allow setting seq & first/last from context menu without metadata (thalieht)
|
||||||
|
- BUGFIX: Show "N/A" if there is no scrape (thalieht)
|
||||||
|
- BUGFIX: Save option about tracker favicons under correct key (sledgehammer999)
|
||||||
|
- BUGFIX: When file data are unreachable pause torrent and show "Missing Files" status (temporary fix) (sledgehammer999)
|
||||||
|
- BUGFIX: Don't disable DHT when using force proxy (Thomas Piccirello)
|
||||||
|
- BUGFIX: Correctly save torrent queue position/state/priority changes in fastresume (glassez, thalieht, sledgehammer999)
|
||||||
|
- BUGFIX: Fix icon height/width ratio (Chocobo1)
|
||||||
|
- BUGFIX: Fix values sorted wrong in "Last Activity" column (Chocobo1)
|
||||||
|
- BUGFIX: Replace png icons with svg (Chocobo1)
|
||||||
|
- WEBUI: Allow WebUI sidebar filters to be hidden (Thomas Piccirello)
|
||||||
|
- WEBUI: Increase WebUI Options initial height (Thomas Piccirello)
|
||||||
|
- WEBUI: Adjust WebUI Options form alignment (Thomas Piccirello)
|
||||||
|
- WEBUI: Fix WebUI unreachable issue (Chocobo1)
|
||||||
|
- WEBUI: Require torrent category creation to be explicit (Thomas Piccirello)
|
||||||
|
- WEBUI: Include category save path in web api sync data (Thomas Piccirello)
|
||||||
|
- WEBUI: Add save path and editing to WebUI new category dialog (Thomas Piccirello)
|
||||||
|
- WEBUI: Bump Web API version
|
||||||
|
- SEARCH: Refactor in searchjob to always color visited entries (thalieht)
|
||||||
|
- SEARCH: Set "enter" as shortcut to download the selected torrents in search job (thalieht)
|
||||||
|
- SEARCH: Add regex option in the search filter's context menu (thalieht)
|
||||||
|
- LINUX: Fix GUI scaling issue on Linux (Chocobo1)
|
||||||
|
- LINUX: Fix regression that broke installing desktop file (Eli Schwartz)
|
||||||
|
- OPENBSD: Better filesystem support for filewatcher (Elias M. Mariani)
|
||||||
|
|
||||||
|
* Sun Aug 12 2018 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.2
|
||||||
|
- FEATURE: New options for "inhibit sleep" (Lukas Greib)
|
||||||
|
- FEATURE: Add option for regexps in the transferlist search filter's context menu (thalieht)
|
||||||
|
- FEATURE: Add async io threads option to AdvancedSettings (tjjh89017)
|
||||||
|
- FEATURE: Allow save resume interval to be disabled (Chocobo1)
|
||||||
|
- FEATURE: Add checkbox for recursive download dialog (Chocobo1)
|
||||||
|
- FEATURE: Add changelog link in program updater (Chocobo1)
|
||||||
|
- BUGFIX: Avoid allocating large memory when loading a .torrent file (Couchy)
|
||||||
|
- BUGFIX: Notify users on 1st time close/minimize to tray (sledgehammer999)
|
||||||
|
- BUGFIX: Fix I/O error after fetching magnet metadata (Chocobo1)
|
||||||
|
- BUGFIX: Never save resume data for already paused torrents (glassez)
|
||||||
|
- BUGFIX: Make ProgramUpdater upgrade to 64-bit qbt when running on 64-bit Windows (Chocobo1)
|
||||||
|
- BUGFIX: Put temporary files in qbt own temp folder (Chocobo1)
|
||||||
|
- BUGFIX: Avoid potentially setting the wrong piece priorities (Chocobo1)
|
||||||
|
- BUGFIX: Various code refactorings/improvements (Chocobo1, thalieht, glassez)
|
||||||
|
- BUGFIX: Add options "Download in sequential order" and "Download first and last pieces first" in AddNewTorrentDialog (Chocobo1)
|
||||||
|
- BUGFIX: Download favicon using appropriate protocol (glassez)
|
||||||
|
- BUGFIX: Apply proxy settings on DownloadManager creation (glassez)
|
||||||
|
- BUGFIX: Improve torrent initialization (glassez)
|
||||||
|
- BUGFIX: Save resume data on torrent change events (glassez)
|
||||||
|
- BUGFIX: Increase default resume data save interval (Chocobo1)
|
||||||
|
- BUGFIX: Work around crash when procesing recursive download. Closes #9086 (Chocobo1)
|
||||||
|
- BUGFIX: Reduce queries to python version (Chocobo1)
|
||||||
|
- BUGFIX: Disable certain mouse wheel events in Options dialog (Chocobo1)
|
||||||
|
- WEBUI: Send all rechecks in one request (Thomas Piccirello)
|
||||||
|
- WEBUI: Add WebUI Force Reannounce option (Thomas Piccirello)
|
||||||
|
- WEBUI: Create non-existing path in setLocationAction() (Goshik)
|
||||||
|
- WEBUI: Add WebUI support for Mac ⌘ (Command) key (Thomas Piccirello)
|
||||||
|
- WEBUI: Show current save path in 'Set location' window (Goshik)
|
||||||
|
- WEBUI: Fix WebUI cache behavior for css files (Chocobo1)
|
||||||
|
- WEBUI: Send Cache-Control header in WebUI responses (Chocobo1)
|
||||||
|
- WEBUI: Add form-action to CSP (Thomas Piccirello)
|
||||||
|
- WEBUI: Add upgrade-insecure-requests to CSP when HTTPS is enabled (Thomas Piccirello)
|
||||||
|
- WEBUI: Reset WebUI ban counter on login success (Chocobo1)
|
||||||
|
- WEBUI: Add logging messages in WebUI login action (Chocobo1)
|
||||||
|
- WEBUI: Add option to control CSRF protection (Chocobo1)
|
||||||
|
- WEBUI: Add option to control WebUI clickjacking protection (Chocobo1)
|
||||||
|
- RSS: Implement "Sequential downloading" feature. Closes #6835 (glassez)
|
||||||
|
- RSS: Don't use RSS feed URLs as base for file names. Closes #8399 (glassez)
|
||||||
|
- SEARCH: Add a name filter for search results (thalieht)
|
||||||
|
- SEARCH: Fix python version detection (Chocobo1)
|
||||||
|
- SEARCH: Clear python cache conditionally (Chocobo1)
|
||||||
|
- SEARCH: Properly normalize version string before parsing it (hannsen)
|
||||||
|
- WINDOWS: Turn on Control Flow Guard for MSVC builds (Chocobo1)
|
||||||
|
- MACOS: Replace deprecated function IOPMAssertionCreate() on macOS (Chocobo1)
|
||||||
|
- OTHER: Fix CMake build with QtSingleApplication. Fixes #9196 (Eugene Shalygin)
|
||||||
|
|
||||||
|
* Sun May 27 2018 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.1
|
||||||
|
- FEATURE: Add 'Moving' state for torrents being relocated/moved (sledgehammer999)
|
||||||
|
- FEATURE: Show rechecking progress (sledgehammer999)
|
||||||
|
- FEATURE: Add option to remember last used save path (glassez)
|
||||||
|
- FEATURE: Torrent name is also renamed if the content was renamed in the "Add New Torrent" dialog (glassez)
|
||||||
|
- FEATURE: Relax behavior of "Download first and last piece first". It applies to all files and not only to the previewable. (Chocobo1)
|
||||||
|
- BUGFIX: Fix issues with translatable strings (Chocobo1)
|
||||||
|
- BUGFIX: Fix displayed tracker messages (Chocobo1)
|
||||||
|
- BUGFIX: Make settings file recovery more robust (Chocobo1)
|
||||||
|
- BUGFIX: Retry saving settings when operation failed (Chocobo1)
|
||||||
|
- BUGFIX: Log successful torrent move (sledgehammer999)
|
||||||
|
- BUGFIX: Fix deletion of old logs (sledgehammer999)
|
||||||
|
- BUGFIX: Delete non-commited fastresume files (sledgehammer999)
|
||||||
|
- BUGFIX: Don't migrate torrents that have newer fastresumes (sledgehammer999)
|
||||||
|
- BUGFIX: Fix adding multiple torrents at once from WebUI (glassez)
|
||||||
|
- BUGFIX: Improve "Run External Program" behavior. On Windows, a backslash isn't appended to paths from path variables (Chocobo1)
|
||||||
|
- BUGFIX: Suppress multiple I/O errors for the same torrent (sledgehammer999)
|
||||||
|
- BUGFIX: Replace raster qbt logo with vector version (Chocobo1)
|
||||||
|
- WEBUI: Fix wrong API method names (glassez)
|
||||||
|
- WEBUI: Filter torrent info endpoint by hashes (Marcel Petersen)
|
||||||
|
- WEBUI: Fix invalid API calls in WebUI (glassez)
|
||||||
|
- WEBUI: Improve legacy API params handling (glassez)
|
||||||
|
- WEBUI: Fix params handling for some legacy API methods (glassez)
|
||||||
|
- WEBUI: Apply locale changes immediately in WebUI (Chocobo1)
|
||||||
|
- WEBUI: Use 32px icons for favicon (Chocobo1)
|
||||||
|
- WEBUI/RSS: Properly set RSS settings via API (glassez)
|
||||||
|
- RSS: Fix auto-downloading rule when Smart filter with regular Episode filter are used (glassez)
|
||||||
|
- RSS: Make "Ignoring days" to behave like other filters (glassez)
|
||||||
|
- RSS: Place "Use Smart Episode Filter" more correctly (glassez)
|
||||||
|
- RSS: Use RSS feed update time as a fallback (glassez)
|
||||||
|
- COSMETIC: Fix Stats dialog size (sledgehammer999)
|
||||||
|
- MACOS: Fix GUI scaling factor on macOS (Chocobo1)
|
||||||
|
- WINDOWS: Update icons (adem4ik)
|
||||||
|
- LINUX: Fix open destination folder with Nautilus > 3.28 (Evgeny Lensky)
|
||||||
|
- OTHER: Code improvements and refactoring (thalieht, Nick Korotysh, Chocobo1)
|
||||||
|
|
||||||
* Sat May 05 2018 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.0
|
* Sat May 05 2018 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.1.0
|
||||||
- FEATURE: Add "Coalesce reads & writes" checkbox in advanced options (Chocobo1)
|
- FEATURE: Add "Coalesce reads & writes" checkbox in advanced options (Chocobo1)
|
||||||
- FEATURE: Smart Filter for RSS (Stephen Dawkins)
|
- FEATURE: Smart Filter for RSS (Stephen Dawkins)
|
||||||
|
49
INSTALL
49
INSTALL
@@ -1,54 +1,49 @@
|
|||||||
qBittorrent - A BitTorrent client in C++ / Qt4
|
qBittorrent - A BitTorrent client in C++ / Qt
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
1) Compile and install qBittorrent with Qt4 Graphical Interface
|
1) Compile and install qBittorrent with Qt graphical interface
|
||||||
|
|
||||||
$ ./configure
|
$ ./configure
|
||||||
$ make && make install
|
$ make && make install
|
||||||
$ qbittorrent
|
$ qbittorrent
|
||||||
|
|
||||||
will install and execute qBittorrent hopefully without any problems.
|
will install and execute qBittorrent.
|
||||||
|
|
||||||
Dependencies:
|
Dependencies:
|
||||||
- Qt >= 4.6.0 (libqtgui, libqtcore, libqtnetwork, libqtxml, libqtdbus/optional)
|
- Qt >= 5.5.1
|
||||||
|
|
||||||
- pkg-config executable
|
- pkg-config
|
||||||
|
|
||||||
- libtorrent-rasterbar by Arvid Norberg (>= 1.0.6)
|
- libtorrent-rasterbar >= 1.0.6 (by Arvid Norberg)
|
||||||
-> http://www.libtorrent.net
|
* https://www.libtorrent.org/
|
||||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
* Be careful: another library (the one used by rTorrent) uses a similar name
|
||||||
|
|
||||||
- libboost >= 1.35.x (libboost-system)
|
- Boost >= 1.35
|
||||||
|
|
||||||
- python >= 2.3 (needed by search engine)
|
- Python >= 2.7.9 / 3.3.0 (optional, runtime only)
|
||||||
* Run time only dependency
|
* Required by the internal search engine
|
||||||
|
|
||||||
- geoip-database (optional)
|
2) Compile and install qBittorrent without Qt graphical interface
|
||||||
* If qBittorrent cannot find this database, it will try to resolve countries using the Internet but it will be a lot slower.
|
|
||||||
* Run time only dependency
|
|
||||||
|
|
||||||
2) Compile and install qBittorrent without Qt4 Graphical interface
|
|
||||||
|
|
||||||
$ ./configure --disable-gui
|
$ ./configure --disable-gui
|
||||||
$ make && make install
|
$ make && make install
|
||||||
$ qbittorrent
|
$ qbittorrent-nox
|
||||||
|
|
||||||
will install and execute qBittorrent hopefully without any problems.
|
will install and execute qBittorrent.
|
||||||
|
|
||||||
Dependencies:
|
Dependencies:
|
||||||
- Qt >= 4.4.0 (libqt-devel, libqtcore, libqtnetwork)
|
- Qt >= 5.5.1
|
||||||
|
|
||||||
- pkg-config executable
|
- pkg-config
|
||||||
|
|
||||||
- libtorrent-rasterbar by Arvid Norberg (>= v1.0.6)
|
- libtorrent-rasterbar >= 1.0.6 (by Arvid Norberg)
|
||||||
-> http://www.libtorrent.net
|
* https://www.libtorrent.org/
|
||||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
* Be careful: another library (the one used by rTorrent) uses a similar name
|
||||||
|
|
||||||
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
|
||||||
|
|
||||||
|
- Boost >= 1.35
|
||||||
|
|
||||||
DOCUMENTATION:
|
DOCUMENTATION:
|
||||||
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.
|
Please note that there is a "Compilation" section at http://wiki.qbittorrent.org.
|
||||||
|
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Christophe Dumez <chris@qbittorrent.org>
|
sledgehammer999 <sledgehammer999@qbittorrent.org>
|
||||||
|
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()
|
@@ -99,6 +99,7 @@ list(FIND LibtorrentRasterbar_DEFINITIONS -DTORRENT_USE_OPENSSL LibtorrentRaster
|
|||||||
if(LibtorrentRasterbar_ENCRYPTION_INDEX GREATER -1)
|
if(LibtorrentRasterbar_ENCRYPTION_INDEX GREATER -1)
|
||||||
find_package(OpenSSL REQUIRED)
|
find_package(OpenSSL REQUIRED)
|
||||||
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto)
|
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
list(APPEND LibtorrentRasterbar_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}")
|
||||||
set(LibtorrentRasterbar_OPENSSL_ENABLED ON)
|
set(LibtorrentRasterbar_OPENSSL_ENABLED ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -113,10 +114,10 @@ mark_as_advanced(LibtorrentRasterbar_INCLUDE_DIR LibtorrentRasterbar_LIBRARY
|
|||||||
LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES
|
LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES
|
||||||
LibtorrentRasterbar_ENCRYPTION_INDEX)
|
LibtorrentRasterbar_ENCRYPTION_INDEX)
|
||||||
|
|
||||||
if (LibtorrentRasterbar_FOUND AND NOT TARGET LibtorrentRasterbar::LibTorrent)
|
if (LibtorrentRasterbar_FOUND AND NOT TARGET LibtorrentRasterbar::torrent-rasterbar)
|
||||||
add_library(LibtorrentRasterbar::LibTorrent UNKNOWN IMPORTED)
|
add_library(LibtorrentRasterbar::torrent-rasterbar UNKNOWN IMPORTED)
|
||||||
|
|
||||||
set_target_properties(LibtorrentRasterbar::LibTorrent PROPERTIES
|
set_target_properties(LibtorrentRasterbar::torrent-rasterbar PROPERTIES
|
||||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||||
IMPORTED_LOCATION "${LibtorrentRasterbar_LIBRARY}"
|
IMPORTED_LOCATION "${LibtorrentRasterbar_LIBRARY}"
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${LibtorrentRasterbar_INCLUDE_DIRS}"
|
INTERFACE_INCLUDE_DIRECTORIES "${LibtorrentRasterbar_INCLUDE_DIRS}"
|
||||||
|
@@ -1,94 +1,79 @@
|
|||||||
# - Try to find the QtSingleApplication includes and library
|
# - Try to find the QtSingleApplication includes and library
|
||||||
# which defines
|
# which defines
|
||||||
#
|
#
|
||||||
# QTSINGLEAPPLICATION_FOUND - system has QtSingleApplication
|
# QtSingleApplication_FOUND - system has QtSingleApplication
|
||||||
# QTSINGLEAPPLICATION_INCLUDE_DIR - where to find header QtSingleApplication
|
# QtSingleApplication_INCLUDE_DIR - where to find header QtSingleApplication
|
||||||
# QTSINGLEAPPLICATION_LIBRARIES - the libraries to link against to use QtSingleApplication
|
# QtSingleApplication_LIBRARIES - the libraries to link against to use QtSingleApplication
|
||||||
# QTSINGLEAPPLICATION_LIBRARY - where to find the QtSingleApplication library (not for general use)
|
# QtSingleApplication_LIBRARY - where to find the QtSingleApplication library (not for general use)
|
||||||
|
|
||||||
# copyright (c) 2013 TI_Eugene ti.eugene@gmail.com
|
# copyright (c) 2013 TI_Eugene ti.eugene@gmail.com
|
||||||
#
|
#
|
||||||
# Redistribution and use is allowed according to the terms of the FreeBSD license.
|
# Redistribution and use is allowed according to the terms of the FreeBSD license.
|
||||||
|
|
||||||
SET(QTSINGLEAPPLICATION_FOUND FALSE)
|
SET(QtSingleApplication_FOUND FALSE)
|
||||||
|
|
||||||
IF(QT4_FOUND)
|
if (Qt5Widgets_FOUND)
|
||||||
message(STATUS "Looking for Qt4 single application library")
|
set(_includeFileName qtsingleapplication.h)
|
||||||
FIND_PATH(QTSINGLEAPPLICATION_INCLUDE_DIR QtSingleApplication
|
else()
|
||||||
# standard locations
|
set(_includeFileName qtsinglecoreapplication.h)
|
||||||
/usr/include
|
endif()
|
||||||
/usr/include/QtSolutions
|
|
||||||
# qt4 location except mac's frameworks
|
|
||||||
"${QT_INCLUDE_DIR}/QtSolutions"
|
|
||||||
# mac's frameworks
|
|
||||||
${FRAMEWORK_INCLUDE_DIR}/QtSolutions
|
|
||||||
)
|
|
||||||
|
|
||||||
SET(QTSINGLEAPPLICATION_NAMES ${QTSINGLEAPPLICATION_NAMES}
|
FOREACH(TOP_INCLUDE_PATH in ${Qt5Core_INCLUDE_DIRS} ${FRAMEWORK_INCLUDE_DIR})
|
||||||
QtSolutions_SingleApplication-2.6 libQtSolutions_SingleApplication-2.6)
|
FIND_PATH(QtSingleApplication_INCLUDE_DIR ${_includeFileName} ${TOP_INCLUDE_PATH}/QtSolutions)
|
||||||
FIND_LIBRARY(QTSINGLEAPPLICATION_LIBRARY
|
|
||||||
NAMES ${QTSINGLEAPPLICATION_NAMES}
|
|
||||||
PATHS ${QT_LIBRARY_DIR}
|
|
||||||
)
|
|
||||||
ELSEIF(Qt5Core_FOUND)
|
|
||||||
message(STATUS "Looking for Qt5 single application library")
|
|
||||||
FOREACH(TOP_INCLUDE_PATH in ${Qt5Core_INCLUDE_DIRS} ${FRAMEWORK_INCLUDE_DIR})
|
|
||||||
FIND_PATH(QTSINGLEAPPLICATION_INCLUDE_DIR QtSingleApplication ${TOP_INCLUDE_PATH}/QtSolutions)
|
|
||||||
|
|
||||||
IF(QTSINGLEAPPLICATION_INCLUDE_DIR)
|
IF(QtSingleApplication_INCLUDE_DIR)
|
||||||
BREAK()
|
BREAK()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
|
|
||||||
SET(QTSINGLEAPPLICATION_NAMES ${QTSINGLEAPPLICATION_NAMES}
|
SET(QtSingleApplication_NAMES ${QtSingleApplication_NAMES}
|
||||||
Qt5Solutions_SingleApplication-2.6 libQt5Solutions_SingleApplication-2.6
|
Qt5Solutions_SingleApplication-2.6 libQt5Solutions_SingleApplication-2.6
|
||||||
QtSolutions_SingleApplication-2.6 libQtSolutions_SingleApplication-2.6)
|
QtSolutions_SingleApplication-2.6 libQtSolutions_SingleApplication-2.6)
|
||||||
GET_TARGET_PROPERTY(_QT5_CORELIBRARY Qt5::Core LOCATION)
|
GET_TARGET_PROPERTY(_QT5_CORELIBRARY Qt5::Core LOCATION)
|
||||||
GET_FILENAME_COMPONENT(_QT5_CORELIBRARYPATH ${_QT5_CORELIBRARY} PATH)
|
GET_FILENAME_COMPONENT(_QT5_CORELIBRARYPATH ${_QT5_CORELIBRARY} PATH)
|
||||||
|
|
||||||
FIND_LIBRARY(QTSINGLEAPPLICATION_LIBRARY
|
FIND_LIBRARY(QtSingleApplication_LIBRARY
|
||||||
NAMES ${QTSINGLEAPPLICATION_NAMES}
|
NAMES ${QtSingleApplication_NAMES}
|
||||||
PATHS ${_QT5_CORELIBRARYPATH}
|
PATHS ${_QT5_CORELIBRARYPATH}
|
||||||
)
|
)
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF (QTSINGLEAPPLICATION_LIBRARY AND QTSINGLEAPPLICATION_INCLUDE_DIR)
|
IF (QtSingleApplication_LIBRARY AND QtSingleApplication_INCLUDE_DIR)
|
||||||
|
|
||||||
SET(QTSINGLEAPPLICATION_LIBRARIES ${QTSINGLEAPPLICATION_LIBRARY})
|
SET(QtSingleApplication_LIBRARIES ${QtSingleApplication_LIBRARY})
|
||||||
SET(QTSINGLEAPPLICATION_FOUND TRUE)
|
SET(QtSingleApplication_FOUND TRUE)
|
||||||
|
|
||||||
IF (CYGWIN)
|
IF (CYGWIN)
|
||||||
IF(BUILD_SHARED_LIBS)
|
IF(BUILD_SHARED_LIBS)
|
||||||
# No need to define QTSINGLEAPPLICATION_USE_DLL here, because it's default for Cygwin.
|
# No need to define QtSingleApplication_USE_DLL here, because it's default for Cygwin.
|
||||||
ELSE(BUILD_SHARED_LIBS)
|
ELSE(BUILD_SHARED_LIBS)
|
||||||
SET (QTSINGLEAPPLICATION_DEFINITIONS -DQTSINGLEAPPLICATION_STATIC)
|
SET (QtSingleApplication_DEFINITIONS -DQTSINGLEAPPLICATION_STATIC)
|
||||||
ENDIF(BUILD_SHARED_LIBS)
|
ENDIF(BUILD_SHARED_LIBS)
|
||||||
ENDIF (CYGWIN)
|
ENDIF (CYGWIN)
|
||||||
|
|
||||||
ENDIF (QTSINGLEAPPLICATION_LIBRARY AND QTSINGLEAPPLICATION_INCLUDE_DIR)
|
ENDIF (QtSingleApplication_LIBRARY AND QtSingleApplication_INCLUDE_DIR)
|
||||||
|
|
||||||
IF (QTSINGLEAPPLICATION_FOUND)
|
IF (QtSingleApplication_FOUND)
|
||||||
IF (NOT QtSingleApplication_FIND_QUIETLY)
|
IF (NOT QtSingleApplication_FIND_QUIETLY)
|
||||||
MESSAGE(STATUS "Found QtSingleApplication: ${QTSINGLEAPPLICATION_LIBRARY}")
|
MESSAGE(STATUS "Found QtSingleApplication: ${QtSingleApplication_LIBRARY}")
|
||||||
MESSAGE(STATUS " includes: ${QTSINGLEAPPLICATION_INCLUDE_DIR}")
|
MESSAGE(STATUS " includes: ${QtSingleApplication_INCLUDE_DIR}")
|
||||||
ENDIF (NOT QtSingleApplication_FIND_QUIETLY)
|
ENDIF (NOT QtSingleApplication_FIND_QUIETLY)
|
||||||
ELSE (QTSINGLEAPPLICATION_FOUND)
|
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)
|
IF (QtSingleApplication_FIND_REQUIRED)
|
||||||
MESSAGE(FATAL_ERROR "Could not find QtSingleApplication library")
|
MESSAGE(FATAL_ERROR "Could not find QtSingleApplication library")
|
||||||
ENDIF (QtSingleApplication_FIND_REQUIRED)
|
ENDIF (QtSingleApplication_FIND_REQUIRED)
|
||||||
ENDIF (QTSINGLEAPPLICATION_FOUND)
|
ENDIF (QtSingleApplication_FOUND)
|
||||||
|
|
||||||
MARK_AS_ADVANCED(QTSINGLEAPPLICATION_INCLUDE_DIR QTSINGLEAPPLICATION_LIBRARY)
|
MARK_AS_ADVANCED(QtSingleApplication_INCLUDE_DIR QtSingleApplication_LIBRARY)
|
||||||
|
|
||||||
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)
|
|
||||||
|
@@ -11,18 +11,17 @@ macro(qbt_set_compiler_options)
|
|||||||
#-Wshadow -Wconversion ?
|
#-Wshadow -Wconversion ?
|
||||||
set(_GCC_COMMON_C_AND_CXX_FLAGS "-Wall -Wextra"
|
set(_GCC_COMMON_C_AND_CXX_FLAGS "-Wall -Wextra"
|
||||||
"-Wfloat-equal -Wcast-qual -Wcast-align"
|
"-Wfloat-equal -Wcast-qual -Wcast-align"
|
||||||
"-Wsign-conversion -Winvalid-pch -Werror=return-type -Wno-long-long"
|
"-Wsign-conversion -Winvalid-pch -Wno-long-long"
|
||||||
# -fstack-protector-all
|
#"-fstack-protector-all"
|
||||||
"-Werror -Wno-error=deprecated-declarations"
|
#"-Werror -Wno-error=deprecated-declarations"
|
||||||
)
|
)
|
||||||
set (_GCC_COMMON_CXX_FLAGS "-fexceptions -frtti"
|
set(_GCC_COMMON_CXX_FLAGS "-fexceptions -frtti"
|
||||||
"-Woverloaded-virtual -Wold-style-cast"
|
"-Woverloaded-virtual -Wold-style-cast"
|
||||||
"-Wnon-virtual-dtor -Wfloat-equal -Wcast-qual -Wcast-align"
|
"-Wnon-virtual-dtor -Wfloat-equal -Wcast-qual -Wcast-align"
|
||||||
"-Werror=overloaded-virtual"
|
#"-Weffc++"
|
||||||
# "-Weffc++"
|
#"-Werror -Wno-error=cpp"
|
||||||
"-Werror -Wno-error=cpp"
|
|
||||||
# we should modify code to make these ones obsolete
|
# we should modify code to make these ones obsolete
|
||||||
"-Wno-error=sign-conversion -Wno-error=float-equal"
|
#"-Wno-error=sign-conversion -Wno-error=float-equal"
|
||||||
)
|
)
|
||||||
|
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
|
||||||
|
@@ -1,16 +1,17 @@
|
|||||||
# a helper function which appends source to the main qBt target
|
# a helper function which appends source to the target
|
||||||
# sources file names are relative to the the ${qBittorrent_SOURCE_DIR}
|
# sources file names are relative to the the target source dir
|
||||||
|
|
||||||
function (qbt_target_sources)
|
function (qbt_target_sources _target _scope)
|
||||||
set (_sources_rel "")
|
get_target_property(targetSourceDir ${_target} SOURCE_DIR)
|
||||||
foreach (_source IN ITEMS ${ARGN})
|
set(sourcesRelative "")
|
||||||
if (IS_ABSOLUTE "${_source}")
|
foreach(source IN ITEMS ${ARGN})
|
||||||
set(source_abs "${_source}")
|
if(IS_ABSOLUTE "${source}")
|
||||||
|
set(sourceAbsolutePath "${source}")
|
||||||
else()
|
else()
|
||||||
get_filename_component(_source_abs "${_source}" ABSOLUTE)
|
get_filename_component(sourceAbsolutePath "${source}" ABSOLUTE)
|
||||||
endif()
|
endif()
|
||||||
file (RELATIVE_PATH _source_rel "${qbt_executable_SOURCE_DIR}" "${_source_abs}")
|
file(RELATIVE_PATH sourceRelativePath "${targetSourceDir}" "${sourceAbsolutePath}")
|
||||||
list (APPEND _sources_rel "${_source_rel}")
|
list(APPEND sourcesRelative "${sourceRelativePath}")
|
||||||
endforeach()
|
endforeach()
|
||||||
target_sources (qBittorrent PRIVATE "${_sources_rel}")
|
target_sources(${_target} ${_scope} "${sourcesRelative}")
|
||||||
endfunction (qbt_target_sources)
|
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()
|
@@ -1,9 +1,9 @@
|
|||||||
if (STACKTRACE_WIN)
|
if (STACKTRACE)
|
||||||
if ("${WINXXBITS}" NOT STREQUAL "Win64")
|
if ("${WINXXBITS}" NOT STREQUAL "Win64")
|
||||||
add_compile_options(-fno-omit-frame-pointer)
|
add_compile_options(-fno-omit-frame-pointer)
|
||||||
endif ("${WINXXBITS}" NOT STREQUAL "Win64")
|
endif ("${WINXXBITS}" NOT STREQUAL "Win64")
|
||||||
link_libraries(libdbghelp -Wl,--export-all-symbols)
|
link_libraries(libdbghelp -Wl,--export-all-symbols)
|
||||||
endif (STACKTRACE_WIN)
|
endif (STACKTRACE)
|
||||||
|
|
||||||
if (("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") OR ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo"))
|
if (("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") OR ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo"))
|
||||||
link_libraries(-Wl,--dynamicbase)
|
link_libraries(-Wl,--dynamicbase)
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
if (STACKTRACE_WIN)
|
if (STACKTRACE)
|
||||||
if ("${WINXXBITS}" STREQUAL "Win64")
|
if ("${WINXXBITS}" STREQUAL "Win64")
|
||||||
add_compile_options(-Zi)
|
add_compile_options(-Zi)
|
||||||
else ("${WINXXBITS}" STREQUAL "Win64")
|
else ("${WINXXBITS}" STREQUAL "Win64")
|
||||||
@@ -6,7 +6,7 @@ if (STACKTRACE_WIN)
|
|||||||
add_compile_options(-Oy-)
|
add_compile_options(-Oy-)
|
||||||
endif ("${WINXXBITS}" STREQUAL "Win64")
|
endif ("${WINXXBITS}" STREQUAL "Win64")
|
||||||
link_libraries(dbghelp.lib)
|
link_libraries(dbghelp.lib)
|
||||||
endif (STACKTRACE_WIN)
|
endif (STACKTRACE)
|
||||||
|
|
||||||
# Enable Wide characters
|
# Enable Wide characters
|
||||||
add_definitions(-DTORRENT_USE_WPATH)
|
add_definitions(-DTORRENT_USE_WPATH)
|
||||||
|
@@ -5,6 +5,8 @@ BINDIR = @EXPAND_BINDIR@
|
|||||||
DATADIR = @EXPAND_DATADIR@
|
DATADIR = @EXPAND_DATADIR@
|
||||||
MANPREFIX = @EXPAND_MANDIR@
|
MANPREFIX = @EXPAND_MANDIR@
|
||||||
|
|
||||||
|
QMAKE_CC = @QBT_CC@
|
||||||
|
QMAKE_CXX = @QBT_CXX@
|
||||||
QMAKE_CXXFLAGS += @QBT_CONF_EXTRA_CFLAGS@
|
QMAKE_CXXFLAGS += @QBT_CONF_EXTRA_CFLAGS@
|
||||||
|
|
||||||
EXTERNAL_INCLUDES = @QBT_CONF_INCLUDES@
|
EXTERNAL_INCLUDES = @QBT_CONF_INCLUDES@
|
||||||
|
@@ -50,6 +50,8 @@ DEFINES += BOOST_USE_WINAPI_VERSION=0x0501
|
|||||||
#DEFINES += BOOST_ASIO_SEPARATE_COMPILATION
|
#DEFINES += BOOST_ASIO_SEPARATE_COMPILATION
|
||||||
# Enable if building against libtorrent 1.0.x (RC_1_0) (dynamic linking)
|
# Enable if building against libtorrent 1.0.x (RC_1_0) (dynamic linking)
|
||||||
#DEFINES += BOOST_ASIO_DYN_LINK
|
#DEFINES += BOOST_ASIO_DYN_LINK
|
||||||
|
# Enable if encountered build error with boost version <= 1.59
|
||||||
|
#DEFINES += BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||||
|
|
||||||
# Enable if building against libtorrent 1.1.x (RC_1_1)
|
# Enable if building against libtorrent 1.1.x (RC_1_1)
|
||||||
# built with this flag defined
|
# built with this flag defined
|
||||||
@@ -58,4 +60,10 @@ DEFINES += BOOST_USE_WINAPI_VERSION=0x0501
|
|||||||
#DEFINES += TORRENT_LINKING_SHARED
|
#DEFINES += TORRENT_LINKING_SHARED
|
||||||
|
|
||||||
# Enable stack trace support
|
# Enable stack trace support
|
||||||
CONFIG += strace_win
|
CONFIG += stacktrace
|
||||||
|
|
||||||
|
win32-msvc* {
|
||||||
|
QMAKE_CXXFLAGS += "/guard:cf"
|
||||||
|
QMAKE_LFLAGS += "/guard:cf"
|
||||||
|
QMAKE_LFLAGS_RELEASE += "/OPT:REF /OPT:ICF"
|
||||||
|
}
|
||||||
|
67
configure.ac
67
configure.ac
@@ -1,4 +1,4 @@
|
|||||||
AC_INIT([qbittorrent], [v4.1.0alpha], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/])
|
AC_INIT([qbittorrent], [v4.1.5], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
@@ -8,7 +8,9 @@ AC_LANG(C++)
|
|||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
|
|
||||||
|
# use compiler from env variables if available
|
||||||
|
QBT_CC="$CC"
|
||||||
|
QBT_CXX="$CXX"
|
||||||
|
|
||||||
# Define --wth-* and --enable-* arguments
|
# Define --wth-* and --enable-* arguments
|
||||||
|
|
||||||
@@ -162,12 +164,21 @@ AS_CASE(["x$enable_qt_dbus"],
|
|||||||
|
|
||||||
|
|
||||||
AX_BOOST_BASE([1.35],
|
AX_BOOST_BASE([1.35],
|
||||||
[AC_MSG_NOTICE([Boost CPPFLAGS: "$BOOST_CPPFLAGS"
|
[AC_MSG_NOTICE([Boost CXXFLAGS: "$BOOST_CPPFLAGS"])
|
||||||
Boost LDFLAGS: "$BOOST_LDFLAGS"])],
|
AC_MSG_NOTICE([Boost LDFLAGS: "$BOOST_LDFLAGS"])],
|
||||||
[AC_MSG_ERROR([Could not find Boost])])
|
[AC_MSG_ERROR([Could not find Boost])])
|
||||||
CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
|
CXXFLAGS="$BOOST_CPPFLAGS $CXXFLAGS"
|
||||||
LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"
|
LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"
|
||||||
|
|
||||||
|
# add workaround for problematic boost version
|
||||||
|
# taken from ax_boost_base.m4
|
||||||
|
m4_define([DETECT_BOOST_VERSION_PROGRAM],
|
||||||
|
[AC_LANG_PROGRAM([[#include <boost/version.hpp>]],
|
||||||
|
[[(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))]));]])])
|
||||||
|
|
||||||
|
AC_COMPILE_IFELSE([DETECT_BOOST_VERSION_PROGRAM(106000)], [],
|
||||||
|
[QBT_ADD_DEFINES="$QBT_ADD_DEFINES BOOST_NO_CXX11_RVALUE_REFERENCES"])
|
||||||
|
|
||||||
AX_BOOST_SYSTEM()
|
AX_BOOST_SYSTEM()
|
||||||
AC_MSG_NOTICE([Boost.System LIB: "$BOOST_SYSTEM_LIB"])
|
AC_MSG_NOTICE([Boost.System LIB: "$BOOST_SYSTEM_LIB"])
|
||||||
LIBS="$BOOST_SYSTEM_LIB $LIBS"
|
LIBS="$BOOST_SYSTEM_LIB $LIBS"
|
||||||
@@ -185,14 +196,46 @@ AS_CASE(["x$with_qtsingleapplication"],
|
|||||||
|
|
||||||
PKG_CHECK_MODULES(libtorrent,
|
PKG_CHECK_MODULES(libtorrent,
|
||||||
[libtorrent-rasterbar >= 1.0.6],
|
[libtorrent-rasterbar >= 1.0.6],
|
||||||
[CPPFLAGS="$libtorrent_CFLAGS $CPPFLAGS"
|
[CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS"
|
||||||
LIBS="$libtorrent_LIBS $LIBS"])
|
LIBS="$libtorrent_LIBS $LIBS"])
|
||||||
|
|
||||||
PKG_CHECK_MODULES(zlib,
|
PKG_CHECK_MODULES(zlib,
|
||||||
[zlib >= 1.2.5.2],
|
[zlib >= 1.2.5.2],
|
||||||
[CPPFLAGS="$zlib_CFLAGS $CPPFLAGS"
|
[CXXFLAGS="$zlib_CFLAGS $CXXFLAGS"
|
||||||
LIBS="$zlib_LIBS $LIBS"])
|
LIBS="$zlib_LIBS $LIBS"])
|
||||||
|
|
||||||
|
# Check if already in >= C++11 mode because of the flags returned by one of the above packages
|
||||||
|
AC_MSG_CHECKING([if compiler is using C++11 or later mode])
|
||||||
|
AC_COMPILE_IFELSE([DETECT_CPP11_PROGRAM()],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
QBT_CXX11_FOUND="yes"],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
QBT_CXX11_FOUND="no"])
|
||||||
|
|
||||||
|
# In case of no, check if the compiler can support at least C++11
|
||||||
|
# and if yes, enable it leaving a warning to the user
|
||||||
|
AS_IF([test "x$QBT_CXX11_FOUND" = "xno"],
|
||||||
|
[AC_MSG_CHECKING([if compiler supports C++11])
|
||||||
|
TMP_CXXFLAGS="$CXXFLAGS"
|
||||||
|
CXXFLAGS="$CXXFLAGS -std=c++11"
|
||||||
|
AC_COMPILE_IFELSE([DETECT_CPP11_PROGRAM()],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
AC_MSG_CHECKING([if C++11 is disabled by the set compiler flags])
|
||||||
|
# prepend the flag so it won't override conflicting user defined flags
|
||||||
|
CXXFLAGS="-std=c++11 $TMP_CXXFLAGS"
|
||||||
|
AC_COMPILE_IFELSE([DETECT_CPP11_PROGRAM()],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
CXXFLAGS="$TMP_CXXFLAGS -std=c++11"
|
||||||
|
AC_MSG_WARN([C++11 mode is now force enabled.
|
||||||
|
Make sure you use the same C++ mode for qBittorrent and its dependencies.
|
||||||
|
To explicitly set qBittorrent to a later mode use CXXFLAGS.
|
||||||
|
Example: `CXXFLAGS="\$CXXFLAGS -std=c++14" ./configure`])],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
AC_MSG_ERROR([The compiler supports C++11 but the user or a dependency has explicitly enabled a lower mode.])])],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
AC_MSG_ERROR([A compiler supporting C++11 is required.])])
|
||||||
|
])
|
||||||
|
|
||||||
# These are required because autoconf doesn't expand these **particular**
|
# These are required because autoconf doesn't expand these **particular**
|
||||||
# vars automatically. And qmake cannot autoexpand them.
|
# vars automatically. And qmake cannot autoexpand them.
|
||||||
AX_DEFINE_DIR([EXPAND_PREFIX], [prefix])
|
AX_DEFINE_DIR([EXPAND_PREFIX], [prefix])
|
||||||
@@ -219,18 +262,20 @@ extract() {
|
|||||||
for i in $string; do
|
for i in $string; do
|
||||||
case "$(echo "$i" | cut -c1)" in
|
case "$(echo "$i" | cut -c1)" in
|
||||||
'') ;;
|
'') ;;
|
||||||
D) QBT_CONF_DEFINES="$(echo $i | cut -c2-) $QBT_CONF_DEFINES";;
|
D) QBT_CONF_DEFINES="$QBT_CONF_DEFINES $(echo $i | cut -c2-)";;
|
||||||
I) QBT_CONF_INCLUDES="$(echo $i | cut -c2-) $QBT_CONF_INCLUDES";;
|
I) QBT_CONF_INCLUDES="$QBT_CONF_INCLUDES $(echo $i | cut -c2-)";;
|
||||||
*) QBT_CONF_EXTRA_CFLAGS="-$i $QBT_CONF_EXTRA_CFLAGS";;
|
*) QBT_CONF_EXTRA_CFLAGS="$QBT_CONF_EXTRA_CFLAGS -$i";;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
IFS=$SAVEIFS
|
IFS=$SAVEIFS
|
||||||
}
|
}
|
||||||
|
|
||||||
extract "$CFLAGS $CPPFLAGS $CXXFLAGS"
|
extract "$CFLAGS $CXXFLAGS"
|
||||||
QBT_ADD_DEFINES="$QBT_ADD_DEFINES $QBT_CONF_DEFINES"
|
QBT_ADD_DEFINES="$QBT_ADD_DEFINES $QBT_CONF_DEFINES"
|
||||||
|
|
||||||
# Substitute the values of these vars in conf.pri.in
|
# Substitute the values of these vars in conf.pri.in
|
||||||
|
AC_SUBST(QBT_CC)
|
||||||
|
AC_SUBST(QBT_CXX)
|
||||||
AC_SUBST(QBT_CONF_INCLUDES)
|
AC_SUBST(QBT_CONF_INCLUDES)
|
||||||
AC_SUBST(QBT_CONF_EXTRA_CFLAGS)
|
AC_SUBST(QBT_CONF_EXTRA_CFLAGS)
|
||||||
AC_SUBST(QBT_ADD_CONFIG)
|
AC_SUBST(QBT_ADD_CONFIG)
|
||||||
|
2
dist/CMakeLists.txt
vendored
2
dist/CMakeLists.txt
vendored
@@ -1,3 +1,5 @@
|
|||||||
|
find_package(Qt5Widgets ${requiredQtVersion}) # to conditionally install desktop-related files
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
add_subdirectory(mac)
|
add_subdirectory(mac)
|
||||||
else (APPLE)
|
else (APPLE)
|
||||||
|
2
dist/mac/Info.plist
vendored
2
dist/mac/Info.plist
vendored
@@ -45,7 +45,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>4.1.0</string>
|
<string>4.1.5</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>qBit</string>
|
<string>qBit</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
|
BIN
dist/mac/qBitTorrentDocument.icns
vendored
BIN
dist/mac/qBitTorrentDocument.icns
vendored
Binary file not shown.
30
dist/unix/CMakeLists.txt
vendored
30
dist/unix/CMakeLists.txt
vendored
@@ -1,31 +1,37 @@
|
|||||||
if (SYSTEMD)
|
if (NOT Qt5Widgets_FOUND)
|
||||||
find_package(Systemd)
|
feature_option(SYSTEMD "Install systemd service file (headless only)" OFF)
|
||||||
if (SYSTEMD_FOUND)
|
if (SYSTEMD)
|
||||||
|
if (NOT Systemd_SERVICES_INSTALL_DIR)
|
||||||
|
find_package(Systemd)
|
||||||
|
if (NOT Systemd_FOUND)
|
||||||
|
message(FATAL_ERROR "Could not locate systemd services install dir."
|
||||||
|
" Either pass -DSystemd_SERVICES_INSTALL_DIR=/path/to/systemd/services option or install systemd pkg-config")
|
||||||
|
endif(NOT Systemd_FOUND)
|
||||||
|
endif(NOT Systemd_SERVICES_INSTALL_DIR)
|
||||||
set(EXPAND_BINDIR ${CMAKE_INSTALL_FULL_BINDIR})
|
set(EXPAND_BINDIR ${CMAKE_INSTALL_FULL_BINDIR})
|
||||||
configure_file(systemd/qbittorrent-nox@.service.in ${CMAKE_CURRENT_BINARY_DIR}/qbittorrent-nox@.service @ONLY)
|
configure_file(systemd/qbittorrent-nox@.service.in ${CMAKE_CURRENT_BINARY_DIR}/qbittorrent-nox@.service @ONLY)
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qbittorrent-nox@.service
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qbittorrent-nox@.service
|
||||||
DESTINATION ${SYSTEMD_SERVICES_INSTALL_DIR}
|
DESTINATION ${Systemd_SERVICES_INSTALL_DIR}
|
||||||
COMPONENT data)
|
COMPONENT data)
|
||||||
endif(SYSTEMD_FOUND)
|
endif(SYSTEMD)
|
||||||
endif(SYSTEMD)
|
endif()
|
||||||
|
|
||||||
|
if (Qt5Widgets_FOUND)
|
||||||
if (GUI)
|
|
||||||
list(APPEND MAN_FILES ${qBittorrent_SOURCE_DIR}/doc/qbittorrent.1)
|
list(APPEND MAN_FILES ${qBittorrent_SOURCE_DIR}/doc/qbittorrent.1)
|
||||||
else (GUI)
|
else (Qt5Widgets_FOUND)
|
||||||
list(APPEND MAN_FILES ${qBittorrent_SOURCE_DIR}/doc/qbittorrent-nox.1)
|
list(APPEND MAN_FILES ${qBittorrent_SOURCE_DIR}/doc/qbittorrent-nox.1)
|
||||||
endif (GUI)
|
endif (Qt5Widgets_FOUND)
|
||||||
|
|
||||||
install(FILES ${MAN_FILES}
|
install(FILES ${MAN_FILES}
|
||||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
|
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
|
||||||
COMPONENT doc)
|
COMPONENT doc)
|
||||||
|
|
||||||
if (GUI)
|
if (Qt5Widgets_FOUND)
|
||||||
install(DIRECTORY menuicons/
|
install(DIRECTORY menuicons/
|
||||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor
|
||||||
FILES_MATCHING PATTERN "*.png")
|
FILES_MATCHING PATTERN "*.png")
|
||||||
|
|
||||||
install(FILES ${qBittorrent_SOURCE_DIR}/src/icons/qbittorrent.desktop
|
install(FILES qbittorrent.desktop
|
||||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/
|
||||||
COMPONENT data)
|
COMPONENT data)
|
||||||
|
|
||||||
|
2
dist/windows/options.nsi
vendored
2
dist/windows/options.nsi
vendored
@@ -27,7 +27,7 @@ XPStyle on
|
|||||||
!define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path
|
!define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path
|
||||||
|
|
||||||
; Program specific
|
; Program specific
|
||||||
!define PROG_VERSION "4.1.0"
|
!define PROG_VERSION "4.1.5"
|
||||||
|
|
||||||
!define MUI_FINISHPAGE_RUN
|
!define MUI_FINISHPAGE_RUN
|
||||||
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
|
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
|
||||||
|
@@ -36,3 +36,16 @@ AC_DEFUN([FIND_QTDBUS],
|
|||||||
[AC_MSG_RESULT([not found])
|
[AC_MSG_RESULT([not found])
|
||||||
HAVE_QTDBUS=[false]])
|
HAVE_QTDBUS=[false]])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# DETECT_CPP11_PROGRAM()
|
||||||
|
# Detects if at least C++11 mode is enabled.
|
||||||
|
# --------------------------------------
|
||||||
|
AC_DEFUN([DETECT_CPP11_PROGRAM],
|
||||||
|
[AC_LANG_PROGRAM([[
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error "This is not a C++ compiler"
|
||||||
|
#elif __cplusplus < 201103L
|
||||||
|
#error "This is not a C++11 compiler"
|
||||||
|
#endif]],
|
||||||
|
[[]])
|
||||||
|
])
|
||||||
|
@@ -3,7 +3,6 @@ TEMPLATE = subdirs
|
|||||||
SUBDIRS += src
|
SUBDIRS += src
|
||||||
|
|
||||||
include(version.pri)
|
include(version.pri)
|
||||||
include(qm_gen.pri)
|
|
||||||
|
|
||||||
# Make target to create release tarball. Use 'make tarball'
|
# Make target to create release tarball. Use 'make tarball'
|
||||||
tarball.commands += rm -fR ../$${PROJECT_NAME}-$${PROJECT_VERSION}/ &&
|
tarball.commands += rm -fR ../$${PROJECT_NAME}-$${PROJECT_VERSION}/ &&
|
||||||
@@ -18,6 +17,10 @@ tarball.commands += rm -fR $${PROJECT_NAME}-$${PROJECT_VERSION}
|
|||||||
|
|
||||||
QMAKE_EXTRA_TARGETS += tarball
|
QMAKE_EXTRA_TARGETS += tarball
|
||||||
|
|
||||||
|
# Translations included here (at top level) is to avoid regenerating the .qm files
|
||||||
|
# every time when src.pro is processed
|
||||||
|
include(src/lang/lang.pri)
|
||||||
|
|
||||||
# For Qt Creator beautifier
|
# For Qt Creator beautifier
|
||||||
DISTFILES += \
|
DISTFILES += \
|
||||||
uncrustify.cfg
|
uncrustify.cfg
|
||||||
|
21
qm_gen.pri
21
qm_gen.pri
@@ -1,21 +0,0 @@
|
|||||||
TS_IN = $$fromfile(src/src.pro,TRANSLATIONS)
|
|
||||||
TS_IN_NOEXT = $$replace(TS_IN,".ts","")
|
|
||||||
|
|
||||||
isEmpty(QMAKE_LRELEASE) {
|
|
||||||
win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
|
|
||||||
else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
|
|
||||||
unix {
|
|
||||||
equals(QT_MAJOR_VERSION, 5) {
|
|
||||||
!exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease-qt5 }
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
!exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message("Building translations")
|
|
||||||
for(L,TS_IN_NOEXT) {
|
|
||||||
message("Processing $${L}")
|
|
||||||
system("$$QMAKE_LRELEASE -silent src/$${L}.ts -qm src/$${L}.qm")
|
|
||||||
!exists("src/$${L}.qm"):error("Building translations failed, cannot continue")
|
|
||||||
}
|
|
@@ -1,40 +1,53 @@
|
|||||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
set(CMAKE_CXX_STANDARD "11")
|
|
||||||
add_definitions(-DBOOST_NO_CXX11_RVALUE_REFERENCES)
|
# If C++14 is available, use it as libtorent ABI depends on 11/14 version
|
||||||
|
if (cxx_std_14 IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||||
|
message(STATUS "Building in C++14 mode")
|
||||||
|
set(CMAKE_CXX_STANDARD "14")
|
||||||
|
else()
|
||||||
|
message(STATUS "Building in C++11 mode")
|
||||||
|
set(CMAKE_CXX_STANDARD "11")
|
||||||
|
endif()
|
||||||
|
|
||||||
include(MacroQbtCompilerSettings)
|
include(MacroQbtCompilerSettings)
|
||||||
qbt_set_compiler_options()
|
qbt_set_compiler_options()
|
||||||
|
|
||||||
include(MacroLinkQtComponents)
|
|
||||||
include(QbtTargetSources)
|
include(QbtTargetSources)
|
||||||
|
|
||||||
|
find_package(Boost ${requiredBoostVersion} REQUIRED)
|
||||||
find_package(LibtorrentRasterbar REQUIRED)
|
find_package(LibtorrentRasterbar REQUIRED)
|
||||||
|
|
||||||
# Qt
|
if (Boost_VERSION VERSION_LESS 106000)
|
||||||
list(APPEND QBT_QT_COMPONENTS Core Network Xml)
|
add_definitions(-DBOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
if (GUI)
|
endif()
|
||||||
list (APPEND QBT_QT_COMPONENTS Gui Svg Widgets)
|
|
||||||
if (WIN32)
|
|
||||||
list (APPEND QBT_QT_COMPONENTS WinExtras)
|
|
||||||
endif(WIN32)
|
|
||||||
if (APPLE)
|
|
||||||
list (APPEND QBT_GUI_OPTIONAL_LINK_LIBRARIES objc)
|
|
||||||
list (APPEND QBT_QT_COMPONENTS MacExtras)
|
|
||||||
endif (APPLE)
|
|
||||||
endif (GUI)
|
|
||||||
if (DBUS)
|
|
||||||
list (APPEND QBT_QT_COMPONENTS DBus)
|
|
||||||
endif (DBUS)
|
|
||||||
find_package(Qt5 5.5.1 COMPONENTS ${QBT_QT_COMPONENTS} REQUIRED)
|
|
||||||
|
|
||||||
if (GUI AND APPLE)
|
find_package(Qt5 ${requiredQtVersion} REQUIRED COMPONENTS Core Network Xml LinguistTools)
|
||||||
# Fix MOC inability to detect macOS. This seems to only affect cmake.
|
find_package(Qt5Widgets ${requiredQtVersion})
|
||||||
# Relevant issue: https://bugreports.qt.io/browse/QTBUG-58325
|
if (Qt5Widgets_FOUND)
|
||||||
set(CMAKE_AUTOMOC_MOC_OPTIONS ${CMAKE_AUTOMOC_MOC_OPTIONS} -DQ_OS_MAC)
|
find_package(Qt5DBus ${requiredQtVersion})
|
||||||
endif ()
|
else()
|
||||||
|
add_definitions(-DDISABLE_GUI)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_package_properties(Qt5Widgets PROPERTIES
|
||||||
|
DESCRIPTION "Set of components for creating classic desktop-style UIs for the Qt5 framework"
|
||||||
|
PURPOSE "Enables qBittorrent GUI. Unneeded for headless configuration."
|
||||||
|
TYPE OPTIONAL
|
||||||
|
)
|
||||||
|
|
||||||
|
set_package_properties(Qt5DBus PROPERTIES
|
||||||
|
DESCRIPTION "Qt5 module for inter-process communication over the D-Bus protocol"
|
||||||
|
PURPOSE "Enables communication with other system components (e.g. notification service) via D-Bus. "
|
||||||
|
TYPE RECOMMENDED
|
||||||
|
)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC True)
|
set(CMAKE_AUTOMOC True)
|
||||||
list(APPEND CMAKE_AUTORCC_OPTIONS -compress 9 -threshold 5)
|
list(APPEND CMAKE_AUTORCC_OPTIONS -compress 9 -threshold 5)
|
||||||
|
if (APPLE)
|
||||||
|
# Workaround CMake bug (autogen does not pass required parameters to moc)
|
||||||
|
# Relevant issue: https://gitlab.kitware.com/cmake/cmake/issues/18041
|
||||||
|
list(APPEND CMAKE_AUTOMOC_MOC_OPTIONS -DQ_OS_MAC -DQ_OS_DARWIN)
|
||||||
|
endif ()
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
@@ -43,56 +56,34 @@ add_definitions(-DQT_NO_CAST_TO_ASCII)
|
|||||||
# Efficient construction for QString & QByteArray (Qt >= 4.8)
|
# Efficient construction for QString & QByteArray (Qt >= 4.8)
|
||||||
add_definitions(-DQT_USE_QSTRINGBUILDER)
|
add_definitions(-DQT_USE_QSTRINGBUILDER)
|
||||||
|
|
||||||
if (NOT GUI)
|
if (CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||||
add_definitions(-DDISABLE_GUI -DDISABLE_COUNTRIES_RESOLUTION)
|
|
||||||
endif (NOT GUI)
|
|
||||||
|
|
||||||
if (NOT WEBUI)
|
|
||||||
add_definitions(-DDISABLE_WEBUI)
|
|
||||||
endif (NOT WEBUI)
|
|
||||||
|
|
||||||
if (STACKTRACE)
|
|
||||||
add_definitions(-DSTACKTRACE)
|
|
||||||
endif(STACKTRACE)
|
|
||||||
# nogui {
|
|
||||||
# TARGET = qbittorrent-nox
|
|
||||||
# } else {
|
|
||||||
# CONFIG(static) {
|
|
||||||
# DEFINES += QBT_STATIC_QT
|
|
||||||
# QTPLUGIN += qico
|
|
||||||
# }
|
|
||||||
# TARGET = qbittorrent
|
|
||||||
# }
|
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE)
|
|
||||||
add_compile_options(-Wformat -Wformat-security)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
message(STATUS "Project is built in DEBUG mode.")
|
message(STATUS "Project is built in DEBUG mode.")
|
||||||
else (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
else()
|
||||||
message(STATUS "Project is built in RELEASE mode.")
|
message(STATUS "Project is built in RELEASE mode.")
|
||||||
message(STATUS "Disabling debug output.")
|
message(STATUS "Disabling debug output.")
|
||||||
add_definitions(-DQT_NO_DEBUG_OUTPUT)
|
add_definitions(-DQT_NO_DEBUG_OUTPUT)
|
||||||
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
endif()
|
||||||
|
|
||||||
set(QBT_USE_GUI ${GUI})
|
|
||||||
set(QBT_USE_WEBUI ${WEBUI})
|
|
||||||
|
|
||||||
configure_file(config.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
configure_file(config.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
||||||
|
|
||||||
if (SYSTEM_QTSINGLEAPPLICATION)
|
find_package(QtSingleApplication)
|
||||||
find_package(QtSingleApplication REQUIRED)
|
set_package_properties(QtSingleApplication PROPERTIES
|
||||||
else (SYSTEM_QTSINGLEAPPLICATION)
|
URL "https://code.qt.io/cgit/qt-solutions/qt-solutions.git/"
|
||||||
|
DESCRIPTION "Qt library to start applications only once per user"
|
||||||
|
TYPE RECOMMENDED
|
||||||
|
PURPOSE "Use the system qtsingleapplication library or shipped one otherwise"
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT QtSingleApplication_FOUND)
|
||||||
add_subdirectory(app/qtsingleapplication)
|
add_subdirectory(app/qtsingleapplication)
|
||||||
endif (SYSTEM_QTSINGLEAPPLICATION)
|
endif ()
|
||||||
|
|
||||||
add_subdirectory(app)
|
add_subdirectory(app)
|
||||||
add_subdirectory(base)
|
add_subdirectory(base)
|
||||||
|
|
||||||
if (GUI)
|
if (Qt5Widgets_FOUND)
|
||||||
add_subdirectory(gui)
|
add_subdirectory(gui)
|
||||||
endif (GUI)
|
endif ()
|
||||||
|
|
||||||
if (WEBUI)
|
if (WEBUI)
|
||||||
add_subdirectory(webui)
|
add_subdirectory(webui)
|
||||||
|
@@ -1,43 +1,41 @@
|
|||||||
project(qbt_executable)
|
add_executable(qBittorrent
|
||||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
set(QBT_APP_HEADERS
|
|
||||||
application.h
|
application.h
|
||||||
cmdoptions.h
|
cmdoptions.h
|
||||||
filelogger.h
|
filelogger.h
|
||||||
)
|
upgrade.h
|
||||||
|
|
||||||
set(QBT_APP_SOURCES
|
|
||||||
application.cpp
|
application.cpp
|
||||||
cmdoptions.cpp
|
cmdoptions.cpp
|
||||||
filelogger.cpp
|
filelogger.cpp
|
||||||
main.cpp
|
main.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_include_directories(qBittorrent PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
target_link_libraries(qBittorrent
|
||||||
|
PRIVATE
|
||||||
|
qbt_base
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(qBittorrent
|
||||||
|
PROPERTIES
|
||||||
|
AUTOUIC True
|
||||||
|
AUTORCC True
|
||||||
|
MACOSX_BUNDLE True
|
||||||
|
)
|
||||||
|
|
||||||
# translations
|
# translations
|
||||||
|
include(QbtTranslations)
|
||||||
|
|
||||||
file(GLOB QBT_TS_FILES ../lang/*.ts)
|
file(GLOB QBT_TS_FILES ../lang/*.ts)
|
||||||
get_filename_component(QBT_QM_FILES_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/../lang" ABSOLUTE)
|
qbt_add_translations(qBittorrent QRC_FILE "../lang/lang.qrc" TS_FILES ${QBT_TS_FILES})
|
||||||
set_source_files_properties(${QBT_TS_FILES} PROPERTIES OUTPUT_LOCATION "${QBT_QM_FILES_BINARY_DIR}")
|
|
||||||
|
|
||||||
find_package(Qt5 COMPONENTS LinguistTools REQUIRED)
|
if (WEBUI)
|
||||||
qt5_add_translation(QBT_QM_FILES ${QBT_TS_FILES})
|
file(GLOB QBT_WEBUI_TS_FILES ../webui/www/translations/*.ts)
|
||||||
|
qbt_add_translations(qBittorrent QRC_FILE "../webui/www/translations/webui_translations.qrc" TS_FILES ${QBT_WEBUI_TS_FILES})
|
||||||
get_filename_component(_lang_qrc_src "${CMAKE_CURRENT_SOURCE_DIR}/../lang.qrc" ABSOLUTE)
|
endif()
|
||||||
get_filename_component(_lang_qrc_dst "${CMAKE_CURRENT_BINARY_DIR}/../lang.qrc" ABSOLUTE)
|
|
||||||
get_filename_component(_lang_qrc_dst_dir "${CMAKE_CURRENT_BINARY_DIR}/../" ABSOLUTE)
|
|
||||||
|
|
||||||
message(STATUS "copying ${_lang_qrc_src} -> ${_lang_qrc_dst}")
|
|
||||||
file(COPY ${_lang_qrc_src} DESTINATION ${_lang_qrc_dst_dir})
|
|
||||||
|
|
||||||
set_source_files_properties("${_lang_qrc_dst}" PROPERTIES GENERATED True)
|
|
||||||
foreach(qm_file ${QBT_QM_FILES})
|
|
||||||
set_source_files_properties("${_lang_qrc_dst}" PROPERTIES OBJECT_DEPENDS ${qm_file})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(QBT_APP_RESOURCES
|
set(QBT_APP_RESOURCES
|
||||||
../icons.qrc
|
../icons/icons.qrc
|
||||||
../searchengine.qrc
|
../searchengine/searchengine.qrc
|
||||||
"${_lang_qrc_dst}"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# With AUTORCC rcc is ran by cmake before language files are generated,
|
# With AUTORCC rcc is ran by cmake before language files are generated,
|
||||||
@@ -46,51 +44,41 @@ qt5_add_resources(QBT_APP_RESOURCE_SOURCE ${QBT_APP_RESOURCES})
|
|||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
list (APPEND QBT_APP_SOURCES ../qbittorrent_mingw.rc)
|
target_sources(qBittorrent PRIVATE ../qbittorrent_mingw.rc)
|
||||||
else (MINGW)
|
else (MINGW)
|
||||||
list (APPEND QBT_APP_SOURCES ../qbittorrent.rc)
|
target_sources(qBittorrent PRIVATE ../qbittorrent.rc)
|
||||||
endif (MINGW)
|
endif (MINGW)
|
||||||
list(APPEND QBT_APP_SOURCES ../qbittorrent.exe.manifest)
|
target_sources(qBittorrent PRIVATE ../qbittorrent.exe.manifest)
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
if (STACKTRACE)
|
if (STACKTRACE)
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
list(APPEND QBT_APP_HEADERS stacktrace.h)
|
target_sources(qBittorrent PRIVATE stacktrace.h)
|
||||||
else (UNIX)
|
else (UNIX)
|
||||||
list(APPEND QBT_APP_HEADERS stacktrace_win.h)
|
target_sources(qBittorrent PRIVATE stacktrace_win.h)
|
||||||
if (GUI)
|
if (Qt5Widgets_FOUND)
|
||||||
list(APPEND QBT_APP_HEADERS stacktrace_win_dlg.h)
|
target_sources(qBittorrent PRIVATE stacktracedialog.h)
|
||||||
endif (GUI)
|
endif (Qt5Widgets_FOUND)
|
||||||
endif (UNIX)
|
endif (UNIX)
|
||||||
endif (STACKTRACE)
|
endif (STACKTRACE)
|
||||||
|
|
||||||
# usesystemqtsingleapplication {
|
|
||||||
# nogui {
|
|
||||||
# CONFIG += qtsinglecoreapplication
|
|
||||||
# } else {
|
|
||||||
# CONFIG += qtsingleapplication
|
|
||||||
# }
|
|
||||||
# } else {
|
|
||||||
# nogui {
|
|
||||||
# include(qtsingleapplication/qtsinglecoreapplication.pri)
|
|
||||||
# } else {
|
|
||||||
# include(qtsingleapplication/qtsingleapplication.pri)
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
|
|
||||||
# upgrade code
|
if (Qt5Widgets_FOUND)
|
||||||
list(APPEND QBT_APP_HEADERS upgrade.h)
|
target_link_libraries(qBittorrent PRIVATE qbt_searchengine qbt_gui)
|
||||||
list(APPEND QBT_TARGET_LIBRARIES qbt_base)
|
set_target_properties(qBittorrent
|
||||||
|
PROPERTIES
|
||||||
if (GUI)
|
OUTPUT_NAME qbittorrent
|
||||||
list(APPEND QBT_TARGET_LIBRARIES qbt_searchengine qbt_gui)
|
WIN32_EXECUTABLE True
|
||||||
include_directories(../gui
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/../gui
|
|
||||||
)
|
)
|
||||||
endif (GUI)
|
else(Qt5Widgets_FOUND)
|
||||||
|
set_target_properties(qBittorrent
|
||||||
|
PROPERTIES
|
||||||
|
OUTPUT_NAME qbittorrent-nox
|
||||||
|
)
|
||||||
|
endif (Qt5Widgets_FOUND)
|
||||||
|
|
||||||
if (WEBUI)
|
if (WEBUI)
|
||||||
list(APPEND QBT_TARGET_LIBRARIES qbt_webui)
|
target_link_libraries(qBittorrent PRIVATE qbt_webui)
|
||||||
endif (WEBUI)
|
endif (WEBUI)
|
||||||
|
|
||||||
# we have to include resources into the bundle
|
# we have to include resources into the bundle
|
||||||
@@ -142,30 +130,11 @@ if (APPLE)
|
|||||||
PROPERTIES MACOSX_PACKAGE_LOCATION translations)
|
PROPERTIES MACOSX_PACKAGE_LOCATION translations)
|
||||||
endif (APPLE)
|
endif (APPLE)
|
||||||
|
|
||||||
add_executable(qBittorrent ${QBT_APP_HEADERS} ${QBT_APP_SOURCES} ${QBT_QM_FILES} ${QBT_APP_RESOURCE_SOURCE})
|
target_sources(qBittorrent PRIVATE ${QBT_QM_FILES} ${QBT_APP_RESOURCE_SOURCE})
|
||||||
if (GUI)
|
|
||||||
set_target_properties(qBittorrent
|
|
||||||
PROPERTIES
|
|
||||||
OUTPUT_NAME qbittorrent
|
|
||||||
WIN32_EXECUTABLE True
|
|
||||||
)
|
|
||||||
else (GUI)
|
|
||||||
set_target_properties(qBittorrent
|
|
||||||
PROPERTIES
|
|
||||||
OUTPUT_NAME qbittorrent-nox
|
|
||||||
)
|
|
||||||
endif (GUI)
|
|
||||||
|
|
||||||
set_target_properties(qBittorrent
|
|
||||||
PROPERTIES
|
|
||||||
AUTOUIC True
|
|
||||||
AUTORCC True
|
|
||||||
MACOSX_BUNDLE True
|
|
||||||
)
|
|
||||||
|
|
||||||
get_target_property(QBT_EXECUTABLE_NAME qBittorrent OUTPUT_NAME)
|
get_target_property(QBT_EXECUTABLE_NAME qBittorrent OUTPUT_NAME)
|
||||||
|
|
||||||
target_link_libraries(qBittorrent ${QBT_TARGET_LIBRARIES} QtSingleApplication::QtSingleApplication)
|
target_link_libraries(qBittorrent PRIVATE ${QBT_TARGET_LIBRARIES} QtSingleApplication::QtSingleApplication)
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(qbt_BUNDLE_NAME ${QBT_EXECUTABLE_NAME})
|
set(qbt_BUNDLE_NAME ${QBT_EXECUTABLE_NAME})
|
||||||
@@ -186,6 +155,7 @@ install(TARGETS qBittorrent
|
|||||||
BUNDLE DESTINATION .
|
BUNDLE DESTINATION .
|
||||||
COMPONENT runtime)
|
COMPONENT runtime)
|
||||||
|
|
||||||
if (GUI AND APPLE)
|
if (Qt5Widgets_FOUND AND APPLE)
|
||||||
|
find_package(Qt5Svg REQUIRED)
|
||||||
include(bundle)
|
include(bundle)
|
||||||
endif (GUI AND APPLE)
|
endif (Qt5Widgets_FOUND AND APPLE)
|
||||||
|
@@ -32,8 +32,8 @@ stacktrace {
|
|||||||
else {
|
else {
|
||||||
HEADERS += $$PWD/stacktrace_win.h
|
HEADERS += $$PWD/stacktrace_win.h
|
||||||
!nogui {
|
!nogui {
|
||||||
HEADERS += $$PWD/stacktrace_win_dlg.h
|
HEADERS += $$PWD/stacktracedialog.h
|
||||||
FORMS += $$PWD/stacktrace_win_dlg.ui
|
FORMS += $$PWD/stacktracedialog.ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user