Skip to content

Commit

Permalink
Allow for building without QtKeychain (Chatterino#3318)
Browse files Browse the repository at this point in the history
Co-authored-by: Rasmus Karlsson <[email protected]>
  • Loading branch information
Mm2PL and pajlada authored Oct 31, 2021
1 parent 4b903d7 commit fc43870
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 20 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
30 changes: 16 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -77,20 +78,21 @@ else()
add_subdirectory("${LIBCOMMUNI_ROOT_LIB_FOLDER}" EXCLUDE_FROM_ALL)
endif()

# 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()

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 :@")
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()

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()

Expand Down
12 changes: 11 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down
18 changes: 14 additions & 4 deletions src/common/Credentials.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
#include <QJsonDocument>
#include <QJsonObject>

#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 <QSaveFile>
#include <boost/variant.hpp>
Expand All @@ -28,6 +30,9 @@ namespace chatterino {
namespace {
bool useKeyring()
{
#ifdef NO_QTKEYCHAIN
return false;
#endif
if (getPaths()->isPortable())
{
return false;
Expand Down Expand Up @@ -104,6 +109,7 @@ namespace {

static void runNextJob()
{
#ifndef NO_QTKEYCHAIN
auto &&queue = jobQueue();

if (!queue.empty())
Expand Down Expand Up @@ -140,6 +146,7 @@ namespace {

queue.pop();
}
#endif
}

static void queueJob(Job &&job)
Expand Down Expand Up @@ -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);
Expand All @@ -184,6 +193,7 @@ void Credentials::get(const QString &provider, const QString &name_,
},
Qt::DirectConnection);
job->start();
#endif
}
else
{
Expand Down
2 changes: 2 additions & 0 deletions src/widgets/settingspages/AboutPage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion src/widgets/settingspages/GeneralPage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit fc43870

Please sign in to comment.