c0re100 / qBittorrent-Enhanced-Edition

[Unofficial] qBittorrent Enhanced, based on qBittorrent
https://github.com/c0re100/qBittorrent-Enhanced-Edition
Other
18.45k stars 1.24k forks source link

[Build] Consider use Qt6 for release build #297

Closed abcfy2 closed 2 years ago

abcfy2 commented 2 years ago

Just recording the issue. Seems qbittorrent 4.4.0 will support Qt6: https://github.com/qbittorrent/qBittorrent/pull/15567

Maybe I should upgrade build dependencies after 4.4.0 released.

If it works I will create a PR to close this issue.

c0re100 commented 2 years ago

Just recording the issue. Seems qbittorrent 4.4.0 will support Qt6: qbittorrent#15567

Maybe I should upgrade build dependencies after 4.4.0 released.

If it works I will create a PR to close this issue.

Most important question: I don't know how many Windows 7/8/8.1 users is using Enhanced Edition..... Cause Qt6 dropped Windows 7 support.

abcfy2 commented 2 years ago

https://www.qt.io/blog/qt6-development-hosts-and-targets

Don't worry, target win 7 is OK. So you can build on win 10 but running on win 7.

c0re100 commented 2 years ago

https://www.qt.io/blog/qt6-development-hosts-and-targets

Don't worry, target win 7 is OK. So you can build on win 10 but running on win 7.

Upstream commit is merged into v4_4_x, you can create a PR for testing.

magic-akari commented 2 years ago

Does it support Apple Silicon macOS?

c0re100 commented 2 years ago

Does it support Apple Silicon macOS?

Yes. https://www.qt.io/blog/qt-6.2-lts-released Qt 6.2 fully supports macOS on Apple Silicon.

abcfy2 commented 2 years ago

Because Qt6 does not contains pkgconfig(issue: https://github.com/qbittorrent/qBittorrent/issues/15609) , So I have to switch to use cmake to build qbittorrent.

abcfy2 commented 2 years ago

Also, seems Qt6 required a high version libc(maybe >= 2.32). So I have to use ubuntu-18.04 or ubuntu-20.04 for appimage build. After that AppImage may not working on an old Linux distro like CentOS 7.

abcfy2 commented 2 years ago

@c0re100 Please pull again from upstream master branch, because upstream already fix qt6 build.

c0re100 commented 2 years ago

@c0re100 Please pull again from upstream master branch, because upstream already fix qt6 build.

Done.

abcfy2 commented 2 years ago

@c0re100 Build failed:

-- Build files have been written to: /build/build
root@d335289cc0f6:/build# cmake --build build
[43/311] Building CXX object src/base/CMakeFiles/qbt_base.dir/bittorrent/session.cpp.o
FAILED: src/base/CMakeFiles/qbt_base.dir/bittorrent/session.cpp.o 
/usr/bin/c++ -DBOOST_ASIO_ENABLE_CANCELIO -DBOOST_ASIO_NO_DEPRECATED -DOPENSSL_NO_SSL2 -DQBT_USES_LIBTORRENT2 -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0x050f02 -DQT_NETWORK_LIB -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_SQL_LIB -DQT_STRICT_ITERATORS -DQT_USE_QSTRINGBUILDER -DQT_XML_LIB -DTORRENT_LINKING_SHARED -DTORRENT_SSL_PEERS -DTORRENT_USE_LIBCRYPTO -DTORRENT_USE_OPENSSL -Isrc/base/qbt_base_autogen/include -I../src -isystem /usr/local/Qt-6.2.0/include/QtCore -isystem /usr/local/Qt-6.2.0/include -isystem /usr/local/Qt-6.2.0/mkspecs/linux-g++ -isystem /usr/local/Qt-6.2.0/include/QtNetwork -isystem /usr/local/Qt-6.2.0/include/QtSql -isystem /usr/local/Qt-6.2.0/include/QtXml -isystem /usr/local/Qt-6.2.0/include/QtDBus -O3 -DNDEBUG -fexceptions -fPIC -Wall -Wextra -Wcast-qual -Wcast-align -Winvalid-pch -Woverloaded-virtual -Wold-style-cast -Wnon-virtual-dtor -pedantic -pedantic-errors -Wstrict-null-sentinel -std=gnu++17 -MD -MT src/base/CMakeFiles/qbt_base.dir/bittorrent/session.cpp.o -MF src/base/CMakeFiles/qbt_base.dir/bittorrent/session.cpp.o.d -o src/base/CMakeFiles/qbt_base.dir/bittorrent/session.cpp.o -c ../src/base/bittorrent/session.cpp
../src/base/bittorrent/session.cpp: In member function 'void BitTorrent::Session::populatePublicTrackers()':
../src/base/bittorrent/session.cpp:1683:10: error: 'QStringRef' was not declared in this scope; did you mean 'QStringMap'?
 1683 |     for (QStringRef tracker : asConst(trackers.splitRef('\n'))) {
      |          ^~~~~~~~~~
      |          QStringMap
../src/base/bittorrent/session.cpp:1688:1: error: expected primary-expression before '}' token
 1688 | }
      | ^
../src/base/bittorrent/session.cpp:1687:6: error: expected ';' before '}' token
 1687 |     }
      |      ^
      |      ;
 1688 | }
      | ~     
../src/base/bittorrent/session.cpp:1688:1: error: expected primary-expression before '}' token
 1688 | }
      | ^
../src/base/bittorrent/session.cpp:1687:6: error: expected ')' before '}' token
 1687 |     }
      |      ^
      |      )
 1688 | }
      | ~     
../src/base/bittorrent/session.cpp:1683:9: note: to match this '('
 1683 |     for (QStringRef tracker : asConst(trackers.splitRef('\n'))) {
      |         ^
../src/base/bittorrent/session.cpp:1688:1: error: expected primary-expression before '}' token
 1688 | }
      | ^
[60/311] Building CXX object src/base/CMakeFiles/qbt_base.dir/rss/rss_autodownloader.cpp.o
ninja: build stopped: subcommand failed.

But upstream does not contains this error. Did you forget merge session.cpp from upstream?

QStringRef already dropped in Qt6, and upstream already solved this error.

c0re100 commented 2 years ago

already dropped in Qt6

Ah, fixed. Please pull again. Cause public tracker feature is still using QStringRef. I created a diff patch from v4.3.x and apply to v4.4, so this error appeared...

abcfy2 commented 2 years ago

AppImage building is OK, you can find AppImage in my github action atrifacts: https://github.com/abcfy2/qBittorrent-Enhanced-Edition/actions/runs/1382113425

But I met an issue about linuxdeploy-plugin-qt: https://github.com/linuxdeploy/linuxdeploy-plugin-qt/issues/95

I'm waiting for upstream to resolve this issue.

Now I'm working on cross-compile to migrate to Qt6.

After all done I'll make a PR.

abcfy2 commented 2 years ago

AppImage is working now: image

abcfy2 commented 2 years ago

https://github.com/abcfy2/qBittorrent-Enhanced-Edition/releases/tag/v4.4.0-beta3

All done. After do some manual test I will submit a PR to close issue.