diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bf1bcbb2..5cd013b2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ - Dev: Add GitHub action to test builds without precompiled headers enabled. (#3327) - Dev: Renamed CMake's build option `USE_SYSTEM_QT5KEYCHAIN` to `USE_SYSTEM_QTKEYCHAIN`. (#3103) - Dev: Add benchmarks that can be compiled with the `BUILD_BENCHMARKS` CMake flag. Off by default. (#3038) +- Dev: Added CMake build option `BUILD_WITH_QTKEYCHAIN` to build with or without Qt5Keychain support (On by default). (#3318) ## 2.3.4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b5e7a470..9d4d2498a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ option(BUILD_BENCHMARKS "Build the benchmarks for Chatterino" OFF) option(USE_SYSTEM_PAJLADA_SETTINGS "Use system pajlada settings library" OFF) option(USE_SYSTEM_LIBCOMMUNI "Use system communi library" OFF) option(USE_SYSTEM_QTKEYCHAIN "Use system QtKeychain library" OFF) +option(BUILD_WITH_QTKEYCHAIN "Build Chatterino with support for your system key chain" ON) option(USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) option(BUILD_WITH_QT6 "Use Qt6 instead of default Qt5" OFF) @@ -77,20 +78,21 @@ else() add_subdirectory("${LIBCOMMUNI_ROOT_LIB_FOLDER}" EXCLUDE_FROM_ALL) endif() -# Link QtKeychain statically -option(QTKEYCHAIN_STATIC "" ON) +if (BUILD_WITH_QTKEYCHAIN) + # Link QtKeychain statically + option(QTKEYCHAIN_STATIC "" ON) + if (USE_SYSTEM_QTKEYCHAIN) + find_package(Qt${MAJOR_QT_VERSION}Keychain REQUIRED) + else() + set(QTKEYCHAIN_ROOT_LIB_FOLDER "${CMAKE_SOURCE_DIR}/lib/qtkeychain") + if (NOT EXISTS "${QTKEYCHAIN_ROOT_LIB_FOLDER}/CMakeLists.txt") + message(FATAL_ERROR "Submodules probably not loaded, unable to find lib/qtkeychain/CMakeLists.txt") + endif() -if (USE_SYSTEM_QTKEYCHAIN) - find_package(Qt${MAJOR_QT_VERSION}Keychain REQUIRED) -else() - set(QTKEYCHAIN_ROOT_LIB_FOLDER "${CMAKE_SOURCE_DIR}/lib/qtkeychain") - if (NOT EXISTS "${QTKEYCHAIN_ROOT_LIB_FOLDER}/CMakeLists.txt") - message(FATAL_ERROR "Submodules probably not loaded, unable to find lib/qtkeychain/CMakeLists.txt") - endif() - - add_subdirectory("${QTKEYCHAIN_ROOT_LIB_FOLDER}" EXCLUDE_FROM_ALL) - if (NOT TARGET qt${MAJOR_QT_VERSION}keychain) - message(FATAL_ERROR "qt${MAJOR_QT_VERSION}keychain target was not created :@") + add_subdirectory("${QTKEYCHAIN_ROOT_LIB_FOLDER}" EXCLUDE_FROM_ALL) + if (NOT TARGET qt${MAJOR_QT_VERSION}keychain) + message(FATAL_ERROR "qt${MAJOR_QT_VERSION}keychain target was not created :@") + endif() endif() endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8b62babf7..37fb9f4a5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -492,7 +492,6 @@ target_link_libraries(${LIBRARY_PROJECT} Qt${MAJOR_QT_VERSION}::Concurrent LibCommuni::LibCommuni - qt${MAJOR_QT_VERSION}keychain Pajlada::Serialize Pajlada::Settings Pajlada::Signals @@ -501,6 +500,17 @@ target_link_libraries(${LIBRARY_PROJECT} RapidJSON::RapidJSON LRUCache ) +if (BUILD_WITH_QTKEYCHAIN) + target_link_libraries(${LIBRARY_PROJECT} + PUBLIC + qt${MAJOR_QT_VERSION}keychain + ) +else() + target_compile_definitions(${LIBRARY_PROJECT} + PUBLIC + NO_QTKEYCHAIN + ) +endif() if (BUILD_APP) add_executable(${EXECUTABLE_PROJECT} main.cpp) diff --git a/src/common/Credentials.cpp b/src/common/Credentials.cpp index 42ffb481f..5913e0d03 100644 --- a/src/common/Credentials.cpp +++ b/src/common/Credentials.cpp @@ -9,10 +9,12 @@ #include #include -#ifdef CMAKE_BUILD -# include "qt5keychain/keychain.h" -#else -# include "keychain.h" +#ifndef NO_QTKEYCHAIN +# ifdef CMAKE_BUILD +# include "qt5keychain/keychain.h" +# else +# include "keychain.h" +# endif #endif #include #include @@ -28,6 +30,9 @@ namespace chatterino { namespace { bool useKeyring() { +#ifdef NO_QTKEYCHAIN + return false; +#endif if (getPaths()->isPortable()) { return false; @@ -104,6 +109,7 @@ namespace { static void runNextJob() { +#ifndef NO_QTKEYCHAIN auto &&queue = jobQueue(); if (!queue.empty()) @@ -140,6 +146,7 @@ namespace { queue.pop(); } +#endif } static void queueJob(Job &&job) @@ -174,6 +181,8 @@ void Credentials::get(const QString &provider, const QString &name_, if (useKeyring()) { +#ifndef NO_QTKEYCHAIN + // if NO_QTKEYCHAIN is set, then this code is never used either way auto job = new QKeychain::ReadPasswordJob("chatterino"); job->setAutoDelete(true); job->setKey(name); @@ -184,6 +193,7 @@ void Credentials::get(const QString &provider, const QString &name_, }, Qt::DirectConnection); job->start(); +#endif } else { diff --git a/src/widgets/settingspages/AboutPage.cpp b/src/widgets/settingspages/AboutPage.cpp index 73b392143..81b9b54fc 100644 --- a/src/widgets/settingspages/AboutPage.cpp +++ b/src/widgets/settingspages/AboutPage.cpp @@ -140,9 +140,11 @@ AboutPage::AboutPage() addLicense(form.getElement(), "Websocketpp", "https://www.zaphoyd.com/websocketpp/", ":/licenses/websocketpp.txt"); +#ifndef NO_QTKEYCHAIN addLicense(form.getElement(), "QtKeychain", "https://github.com/frankosterfeld/qtkeychain", ":/licenses/qtkeychain.txt"); +#endif addLicense(form.getElement(), "lrucache", "https://github.com/lamerman/cpp-lru-cache", ":/licenses/lrucache.txt"); diff --git a/src/widgets/settingspages/GeneralPage.cpp b/src/widgets/settingspages/GeneralPage.cpp index 639945ca1..e4ea2680b 100644 --- a/src/widgets/settingspages/GeneralPage.cpp +++ b/src/widgets/settingspages/GeneralPage.cpp @@ -584,7 +584,7 @@ void GeneralPage::initLayout(GeneralPageView &layout) layout.addCheckbox("Restart on crash", s.restartOnCrash); -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) && !defined(NO_QTKEYCHAIN) if (!getPaths()->isPortable()) { layout.addCheckbox(