From 88492823826b3720be4ba29d246848031418bfb5 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sat, 20 Oct 2018 15:14:24 +0200 Subject: Add Kconfiglib to parse Kconfig/.config --- .gitmodules | 3 + CMakeLists.txt | 16 +++-- Kconfig | 20 ++++++ baseconfig | 100 ----------------------------- cmake/VendorConfig.cmake | 58 ++++++++--------- doc/Development/Configuring.asciidoc | 34 ++++++++++ lib/configuration/CMakeLists.txt | 6 +- lib/configuration/configuration.cpp | 24 +++---- linux/.config | 40 +++++------- plugins/ConfigurationEditor/CMakeLists.txt | 4 +- plugins/ProfileEditor/CMakeLists.txt | 4 +- src/CMakeLists.txt | 14 ++-- src/Kconfig | 82 +++++++++++++++++++++++ src/browser.cpp | 5 +- src/webengine/webpage.cpp | 27 -------- src/webengine/webpage.h | 3 - src/webengine/webview.cpp | 3 +- tools/Kconfiglib | 1 + tools/config.py | 64 ++++++++++++++++++ 19 files changed, 288 insertions(+), 220 deletions(-) create mode 100644 Kconfig delete mode 100644 baseconfig create mode 100644 doc/Development/Configuring.asciidoc create mode 100644 src/Kconfig create mode 160000 tools/Kconfiglib create mode 100755 tools/config.py diff --git a/.gitmodules b/.gitmodules index 6da4114..2e84ecd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "3rd-party/SingleApplication/SingleApplication.git"] path = 3rd-party/SingleApplication/SingleApplication.git url = https://github.com/itay-grudev/SingleApplication.git +[submodule "tools/Kconfiglib"] + path = tools/Kconfiglib + url = https://github.com/ulfalizer/Kconfiglib.git diff --git a/CMakeLists.txt b/CMakeLists.txt index f959a8d..cfb121d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,18 +1,16 @@ cmake_minimum_required(VERSION 3.10.0) project(smolbote) +find_package(Qt5 5.11.0 COMPONENTS Core Widgets WebEngineWidgets REQUIRED) +find_package(Boost 1.66 COMPONENTS program_options REQUIRED) +find_package(ECM 1.6.0 NO_MODULE) + # add cmake/ to module path -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) include(FeatureSummary) include(VendorConfig) -# Libraries -find_package(Qt5 5.11.0 COMPONENTS Core Widgets WebEngineWidgets REQUIRED) -find_package(Boost 1.66 COMPONENTS program_options REQUIRED) - if(CONFIG_USEPLASMA) - find_package(ECM 1.6.0 REQUIRED NO_MODULE) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) find_package(KF5 "5.6.0" COMPONENTS Wallet WindowSystem REQUIRED) endif(CONFIG_USEPLASMA) @@ -58,5 +56,9 @@ message(STATUS "CXX compiler: ${CMAKE_CXX_COMPILER_ID}") message(STATUS "CXX flags: ${CMAKE_CXX_FLAGS}") message(STATUS "CXX flags dbg: ${CMAKE_CXX_FLAGS_DEBUG}") message(STATUS "CXX flags rel: ${CMAKE_CXX_FLAGS_RELEASE}") +message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") +message(STATUS "Install bindir ${CONFIG_INSTALL_BINDIR}") +message(STATUS "Install libdir ${CONFIG_INSTALL_LIBDIR}") +message(STATUS "Install plugins ${CONFIG_INSTALL_PLUGINDIR}") feature_summary(WHAT ALL) diff --git a/Kconfig b/Kconfig new file mode 100644 index 0000000..67265fc --- /dev/null +++ b/Kconfig @@ -0,0 +1,20 @@ +mainmenu "smolbote configuration" + +comment "Build system settings" +menu "Install paths" + config INSTALL_BINDIR + string "User executables" + default "bin" + + config INSTALL_LIBDIR + string "Object code libraries" + default "lib64" + + config INSTALL_PLUGINDIR + string "Plugins" + default "lib64/plugins" + +endmenu + +comment "Application Settings" +rsource src/Kconfig diff --git a/baseconfig b/baseconfig deleted file mode 100644 index 0e2fb71..0000000 --- a/baseconfig +++ /dev/null @@ -1,100 +0,0 @@ -mainmenu "smolbote configuration" - -comment "Build" -menu "Compiler settings" - config CXX_FLAGS - string "Compiler Flags" - help - Compiler flags that should be applied to both Debug and Release builds. - default "-pipe -fstack-protector-strong -fno-plt -fPIE" - - config CXX_FLAGS_DEBUG - string "Debug Flags" - help - Compiler flags that should be applied to Debug builds. These flags, together with the Compiler Flags, are appended to CMAKE_CXX_FLAGS_DEBUG. - default "" - - config CXX_FLAGS_RELEASE - string "Release Flags" - help - Compiler flags that should be applied to Release builds. These flags, together with the Compiler Flags, are appended to CMAKE_CXX_FLAGS_RELEASE. - - -march=native -mtune=native will build executables that are optimized for the build environment's native arch. - default "" -endmenu - -menu "Install paths" - config INSTALL_PREFIX - string "Install prefix" - default "/usr/local" - config INSTALL_BIN - string "bin/ prefix" - default "bin" - config INSTALL_LIB - string "lib/ prefix" - default "lib/smolbote" -endmenu - -comment "Branding" -config POI_NAME - string "Application name" - default "smolbote" -config POI_EXE - string "Executable name" - default "poi" - -comment "Browser configuration" -menu "Configuration defaults" - config PATH_CONFIG - string "Configuration location" - default "~/.config/smolbote/smolbote.cfg" - config PATH_CRASHDUMP - string "Crash dump location" - default "~/.config/smolbote/crash.d" - config PATH_FILTER - string "Host filter path" - default "~/.config/smolbote/hosts.d" - config PATH_PLUGINS - string "Plugin load location" - default "~/.config/smolbote/plugins.d" - config PATH_PROFILES - string "Profile load location" - default "~/.config/smolbote/profiles.d" - config PATH_BOOKMARKS - string "Bookmarks location" - default "~/.config/smolbote/bookmarks.xbel" - config PATH_DOWNLOADS - string "Downloads location" - default "~/Downloads" -endmenu - -config USEPLASMA - bool "Enable KDE Frameworks integration" - default n - help - This is a help message - -config USEBREAKPAD - bool "Enable Breakpad integration" - default n - -comment "Devel" -config QTWARNINGS - bool "Enable Qt deprecated API warnings" - default y - -config TESTS - bool "Build tests" - default n - -config LLVMLIBCPP - bool "Link against the LLVM C++ standard library" - default n - -menu "Workarounds" - config QTBUG-62511 - bool "Use RCC version 1 format" - default y - help - See QTBUG-62511: rcc embeds time in output - -endmenu diff --git a/cmake/VendorConfig.cmake b/cmake/VendorConfig.cmake index 1e12b33..c4f3ce9 100644 --- a/cmake/VendorConfig.cmake +++ b/cmake/VendorConfig.cmake @@ -1,3 +1,5 @@ +find_package(PythonInterp 3.2 REQUIRED) + string(TOLOWER ${CMAKE_SYSTEM_NAME} SYSTEM_NAME) if (NOT EXISTS "${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config") @@ -5,28 +7,34 @@ if (NOT EXISTS "${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config") endif() # the .config has been found - -# read .config entries that start with CONFIG_ to a list of strings -file(STRINGS ${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config vendor_config REGEX "^CONFIG_") - -# for every item in the list, turn it into a list and set it -foreach(item IN LISTS vendor_config) - #message("${item}") - string(REPLACE "\"" "" item ${item}) - string(REGEX REPLACE "(^CONFIG_[^=]*)=(.*$)" "\\1;\\2" item_list ${item}) - #message("${item_list}") - set(${item_list}) +add_custom_target(config_header + BYPRODUCTS "${PROJECT_BINARY_DIR}/include/config.h" + COMMAND ${CMAKE_COMMAND} -E env "srctree=${PROJECT_SOURCE_DIR}" + ${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/tools/Kconfiglib/genconfig.py" "--header-path=${PROJECT_BINARY_DIR}/include/config.h" "${PROJECT_SOURCE_DIR}/src/Kconfig" + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}") + +function(config KEY KCONFIG) +execute_process( + COMMAND ${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/tools/config.py" "--kconfig=${PROJECT_SOURCE_DIR}/${KCONFIG}" "--dotconfig=${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config" ${KEY} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE output OUTPUT_STRIP_TRAILING_WHITESPACE) + set("CONFIG_${KEY}" ${output} PARENT_SCOPE) +endfunction() + +config("POI_NAME" "src/Kconfig") +config("POI_EXE" "src/Kconfig") + +config("INSTALL_BINDIR" "Kconfig") +config("INSTALL_LIBDIR" "Kconfig") +config("INSTALL_PLUGINDIR" "Kconfig") + +# QTBUG defines +execute_process( + COMMAND ${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/tools/config.py" "--kconfig=${PROJECT_SOURCE_DIR}/src/Kconfig" "--dotconfig=${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config" "QTBUG" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE QTBUGS OUTPUT_STRIP_TRAILING_WHITESPACE) +foreach(bug IN LISTS QTBUGS) + set(${bug} CACHE STRING "${bug} workaround") endforeach() -# Compiler settings -# Compiler flags -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CONFIG_CXX_FLAGS} ${CONFIG_CXX_FLAGS_DEBUG}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CONFIG_CXX_FLAGS} ${CONFIG_CXX_FLAGS_RELEASE}") - -# Install paths -if(NOT CONFIG_INSTALL_PREFIX STREQUAL "") - set(CMAKE_INSTALL_PREFIX ${CONFIG_INSTALL_PREFIX}) -endif() ## Version information, used in src/version.h.in if (EXISTS "${PROJECT_SOURCE_DIR}/.git") @@ -39,13 +47,3 @@ endif() set(poi_Version "r${VerRevision}" CACHE STRING "Short version string") set(poi_Describe "r${VerRevision}-${VerShortId}" CACHE STRING "Long version string") set(poi_Build "${VerBranch}-${VerCommit}" CACHE STRING "Build string") - -# linking to libc++ doesn't work -if (CONFIG_LLVMLIBCPP) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") -endif (CONFIG_LLVMLIBCPP) - -if(CONFIG_QTWARNINGS) - add_definitions(-DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050900) -endif(CONFIG_QTWARNINGS) diff --git a/doc/Development/Configuring.asciidoc b/doc/Development/Configuring.asciidoc new file mode 100644 index 0000000..f436da5 --- /dev/null +++ b/doc/Development/Configuring.asciidoc @@ -0,0 +1,34 @@ +=== CMake + +==== Compiler flags +-pipe -fstack-protector-strong -fno-plt -fPIE +-march=native -mtune=native + +==== Install paths +CMAKE_INSTALL_PREFIX is prepended onto all install paths. This variable defaults +to /usr/local on *nix and c:/Program Files/${PROJECT_NAME} on Windows. + +On *nix you can use DESTDIR to relocate the entire installation. DESTDIR is +prepended to CMAKE_INSTALL_PREFIX. + +This will install the project to /ports/pkg/install/usr: + +[source, sh] +---- +cmake -DCMAKE_INSTALL_PREFIX=/usr ... +... +make DESTDIR=/ports/pkg/install install +---- + +==== clang-tidy +CMAKE_CXX_CLANG_TIDY="clang-tidy;-checks=*" + +==== cppcheck +CMAKE_CXX_CPPCHECK="cppcheck" + +==== ccache +-DCMAKE_CXX_COMPILER_LAUNCHER=ccache + +==== llvm libcpp +CMAKE_CXX_FLAGS: -stdlib=libc++" +CMAKE_EXE_LINKER_FLAGS -stdlib=libc++ diff --git a/lib/configuration/CMakeLists.txt b/lib/configuration/CMakeLists.txt index 581e1eb..def0356 100644 --- a/lib/configuration/CMakeLists.txt +++ b/lib/configuration/CMakeLists.txt @@ -6,14 +6,14 @@ set(CMAKE_AUTOMOC ON) #set(CMAKE_AUTOUIC ON) #set(CMAKE_AUTORCC ON) -configure_file(defaults.h.in ${PROJECT_BINARY_DIR}/lib/configuration/defaults.h) - add_library(configuration configuration.cpp configuration.h) target_include_directories(configuration - PRIVATE ${Boost_INCLUDE_DIRS}) + PRIVATE ${Boost_INCLUDE_DIRS} + PRIVATE ${PROJECT_BINARY_DIR}/include +) target_link_libraries(configuration Qt5::Core Qt5::Widgets diff --git a/lib/configuration/configuration.cpp b/lib/configuration/configuration.cpp index 25f783c..99efb14 100644 --- a/lib/configuration/configuration.cpp +++ b/lib/configuration/configuration.cpp @@ -12,14 +12,14 @@ #include #include #include -#include "defaults.h" +#include "config.h" namespace po = boost::program_options; inline std::string defaultUserConfigLocation() { -#ifdef Path_Config - return Path_Config; +#ifdef CONFIG_PATH_CONFIG + return CONFIG_PATH_CONFIG; #else // try to locate an existing config QString path = QStandardPaths::locate(QStandardPaths::ConfigLocation, "smolbote/smolbote.cfg"); @@ -55,14 +55,16 @@ Configuration::Configuration(QObject *parent) ("browser.locale", po::value(), "Set Qt localization.") ("browser.translation", po::value(), "Set application localization.") - ("browser.crash.path", po::value()->default_value(Path_Crashdump)) - ("browser.crash.handler", po::value()) +#ifdef CONFIG_USEBREAKPAD + ("browser.crash.path", po::value()->default_value(CONFIG_PATH_CRASHDUMP)) + ("browser.crash.handler", po::value()->default_value(CONFIG_PATH_CRASHHANDLER)) +#endif // main window ui ("mainwindow.height", po::value()->default_value(720)) ("mainwindow.width", po::value()->default_value(1280)) ("mainwindow.maximized", po::value()->default_value(true)) - ("mainwindow.title", po::value()->default_value("smolbote")) + ("mainwindow.title", po::value()->default_value(CONFIG_POI_NAME)) // main window shortcuts ("mainwindow.shortcuts.newGroup", po::value()->default_value("Ctrl+G")) @@ -100,7 +102,7 @@ Configuration::Configuration(QObject *parent) ("subwindow.shortcuts.fullscreen", po::value()->default_value("F11")) // Filter settings - ("filter.hosts", po::value()->default_value(Path_Filter)) + ("filter.hosts", po::value()->default_value(CONFIG_PATH_FILTER)) ("filter.adblock", po::value()) ("filter.header", po::value>()) // ("filter.cookies.block.all", po::value()->default_value(false)) @@ -108,22 +110,22 @@ Configuration::Configuration(QObject *parent) // ("filter.cookies.path", po::value()->default_value("~/.config/smolbote/cookies.d")) // Plugin settings - ("plugins.path", po::value()->default_value(Path_Plugins)) + ("plugins.path", po::value()->default_value(CONFIG_PATH_PLUGINS)) // Profile settings // default profile name the browser should use; "" is off-the-record ("profile.default", po::value()->default_value("")) - ("profile.path", po::value()->default_value(Path_Profiles)) + ("profile.path", po::value()->default_value(CONFIG_PATH_PROFILES)) ("profile.search", po::value()->default_value("https://duckduckgo.com/?q=%1&ia=web")) ("profile.homepage", po::value()->default_value("about:blank")) ("profile.newtab", po::value()->default_value("about:blank")) // Bookmark settings - ("bookmarks.path", po::value()->default_value(Path_Bookmarks)) + ("bookmarks.path", po::value()->default_value(CONFIG_PATH_BOOKMARKS)) ("bookmarks.shortcut", po::value()->default_value("Ctrl+B")) // Downloads settings - ("downloads.path", po::value()->default_value(Path_Downloads)) + ("downloads.path", po::value()->default_value(CONFIG_PATH_DOWNLOADS)) ("downloads.shortcut", po::value()->default_value("Ctrl+D")) ; } diff --git a/linux/.config b/linux/.config index 09b5a4a..e04f44a 100644 --- a/linux/.config +++ b/linux/.config @@ -1,57 +1,47 @@ -# -# Automatically generated file; DO NOT EDIT. -# smolbote configuration -# +# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) # -# Build +# Build system settings # # -# Compiler settings +# Install paths # -CONFIG_CXX_FLAGS="-pipe -fstack-protector-strong -fno-plt -fPIE" -CONFIG_CXX_FLAGS_DEBUG="" -CONFIG_CXX_FLAGS_RELEASE="" +CONFIG_INSTALL_BINDIR="bin" +CONFIG_INSTALL_LIBDIR="lib64/smolbote" +CONFIG_INSTALL_PLUGINDIR="lib64/smolbote/plugins" # -# Install paths +# Application Settings # -CONFIG_INSTALL_PREFIX="" -CONFIG_INSTALL_BIN="bin" -CONFIG_INSTALL_LIB="lib/smolbote" # -# Branding +# Application # CONFIG_POI_NAME="smolbote" CONFIG_POI_EXE="poi" - -# -# Browser configuration -# +CONFIG_POI_ICON=":/icon.svg" # # Configuration defaults # CONFIG_PATH_CONFIG="~/.config/smolbote/smolbote.cfg" -CONFIG_PATH_CRASHDUMP="~/.config/smolbote/crash.d" CONFIG_PATH_FILTER="~/.config/smolbote/hosts.d" CONFIG_PATH_PLUGINS="~/.config/smolbote/plugins.d" CONFIG_PATH_PROFILES="~/.config/smolbote/profiles.d" CONFIG_PATH_BOOKMARKS="~/.config/smolbote/bookmarks.xbel" CONFIG_PATH_DOWNLOADS="~/Downloads" CONFIG_USEPLASMA=y -# CONFIG_USEBREAKPAD is not set # -# Devel +# KDE Integration # -CONFIG_QTWARNINGS=y -CONFIG_TESTS=y -# CONFIG_LLVMLIBCPP is not set +# CONFIG_PLASMA_BLUR is not set +CONFIG_WALLET_FOLDER="smolbote" +# CONFIG_USEBREAKPAD is not set # # Workarounds # -CONFIG_QTBUG-62511=y +CONFIG_QTBUG_62511=y +CONFIG_QTBUG_65223=y diff --git a/plugins/ConfigurationEditor/CMakeLists.txt b/plugins/ConfigurationEditor/CMakeLists.txt index 5f66e13..7eb6de4 100644 --- a/plugins/ConfigurationEditor/CMakeLists.txt +++ b/plugins/ConfigurationEditor/CMakeLists.txt @@ -24,7 +24,7 @@ target_link_libraries(ConfigurationEditorPlugin ) if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - install(TARGETS ConfigurationEditorPlugin RUNTIME DESTINATION ${CONFIG_INSTALL_LIB} CONFIGURATIONS Release) + install(TARGETS ConfigurationEditorPlugin RUNTIME DESTINATION ${CONFIG_INSTALL_PLUGINDIR} CONFIGURATIONS Release) else() - install(TARGETS ConfigurationEditorPlugin LIBRARY DESTINATION ${CONFIG_INSTALL_LIB} CONFIGURATIONS Release) + install(TARGETS ConfigurationEditorPlugin LIBRARY DESTINATION ${CONFIG_INSTALL_PLUGINDIR} CONFIGURATIONS Release) endif() diff --git a/plugins/ProfileEditor/CMakeLists.txt b/plugins/ProfileEditor/CMakeLists.txt index 6f16b48..25a9638 100644 --- a/plugins/ProfileEditor/CMakeLists.txt +++ b/plugins/ProfileEditor/CMakeLists.txt @@ -41,7 +41,7 @@ target_link_libraries(ProfileEditorPlugin ) if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - install(TARGETS ProfileEditorPlugin RUNTIME DESTINATION ${CONFIG_INSTALL_LIB} CONFIGURATIONS Release) + install(TARGETS ProfileEditorPlugin RUNTIME DESTINATION ${CONFIG_INSTALL_PLUGINDIR} CONFIGURATIONS Release) else() - install(TARGETS ProfileEditorPlugin LIBRARY DESTINATION ${CONFIG_INSTALL_LIB} CONFIGURATIONS Release) + install(TARGETS ProfileEditorPlugin LIBRARY DESTINATION ${CONFIG_INSTALL_PLUGINDIR} CONFIGURATIONS Release) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 975cc1b..fbb71aa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -57,24 +57,27 @@ set(srclist ${PROJECT_SOURCE_DIR}/include/browserinterface.h ) -if(CONFIG_QTBUG-62511) +if(DEFINED QTBUG-62511) set_property(SOURCE ${PROJECT_SOURCE_DIR}/data/resources.qrc PROPERTY AUTORCC_OPTIONS "--format-version=1") -endif(CONFIG_QTBUG-62511) +endif() # if you are using a custom build location for breakpad: #if(CONFIG_USEBREAKPAD) # link_directories("${BREAKPAD_LIBRARY_DIRS}") #endif(CONFIG_USEBREAKPAD) -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") +if(WIN32) add_executable(${CONFIG_POI_EXE} WIN32 ${srclist} ${PROJECT_SOURCE_DIR}/data/windows.rc) else() add_executable(${CONFIG_POI_EXE} ${srclist}) endif() +add_dependencies(${CONFIG_POI_EXE} config_header) + target_include_directories(${CONFIG_POI_EXE} PRIVATE ${Boost_INCLUDE_DIRS} PRIVATE ${PROJECT_SOURCE_DIR}/include + PRIVATE ${PROJECT_BINARY_DIR}/include PRIVATE ${PROJECT_SOURCE_DIR}/lib PRIVATE ${PROJECT_SOURCE_DIR}/plugins ) @@ -104,9 +107,6 @@ endif(CONFIG_USEPLASMA) target_compile_definitions(${CONFIG_POI_EXE} PRIVATE QAPPLICATION_CLASS=QApplication - PRIVATE POI_NAME="${CONFIG_POI_NAME}" - PRIVATE QTBUG_65223_WORKAROUND - #PRIVATE QTBUG_68224_WORKAROUND ) -install(TARGETS ${CONFIG_POI_EXE} RUNTIME DESTINATION ${CONFIG_INSTALL_BIN} CONFIGURATIONS Release) +install(TARGETS ${CONFIG_POI_EXE} RUNTIME DESTINATION ${CONFIG_INSTALL_BINDIR} CONFIGURATIONS Release) diff --git a/src/Kconfig b/src/Kconfig new file mode 100644 index 0000000..fcecdea --- /dev/null +++ b/src/Kconfig @@ -0,0 +1,82 @@ +menu "Application" + config POI_NAME + string "Application name" + default "smolbote" + config POI_EXE + string "Executable name" + default "poi" + config POI_ICON + string "Path to icon" + default ":/icons/poi.svg" +endmenu + +menu "Configuration defaults" + config PATH_CONFIG + string "Configuration location" + default "~/.config/smolbote/smolbote.cfg" + config PATH_FILTER + string "Host filter path" + default "~/.config/smolbote/hosts.d" + config PATH_PLUGINS + string "Plugin load location" + default "~/.config/smolbote/plugins.d" + config PATH_PROFILES + string "Profile load location" + default "~/.config/smolbote/profiles.d" + config PATH_BOOKMARKS + string "Bookmarks location" + default "~/.config/smolbote/bookmarks.xbel" + config PATH_DOWNLOADS + string "Downloads location" + default "~/Downloads" +endmenu + +config USEPLASMA + bool "Enable KDE Frameworks integration" + default n + select SHOW_KDE_INTEGRATION + help + This is a help message + +menu "KDE Integration" + depends on USEPLASMA + + config PLASMA_BLUR + bool "Enable translucent background and blur behind window" + default n + + config WALLET_FOLDER + string "KDE Wallet folder name" + default "smolbote" +endmenu + +config USEBREAKPAD + bool "Enable Breakpad integration" + default n + +menu "Breakpad Integration" + depends on USEBREAKPAD + + config PATH_CRASHDUMP + string "Crash dump location" + default "~/.config/smolbote/crash.d" + + config PATH_CRASHHANDLER + string "Crash handler location" + default "" +endmenu + +menu "Workarounds" + config QTBUG_62511 + bool "Use RCC version 1 format" + default y + help + See QTBUG-62511: rcc embeds time in output + + config QTBUG_65223 + bool "Manually emit loadFinished" + default y + help + See QTBUG-65223: loadStarted is emitted twice when loading link with anchor + +endmenu diff --git a/src/browser.cpp b/src/browser.cpp index 27dda2b..cf39c4e 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -30,12 +30,13 @@ #include "webengine/filter.h" #include #include +#include "config.h" Browser::Browser(int &argc, char *argv[], bool allowSecondary) : SingleApplication(argc, argv, allowSecondary, SingleApplication::User | SingleApplication::SecondaryNotification | SingleApplication::ExcludeAppVersion) { - setApplicationName(POI_NAME); - setWindowIcon(QIcon(":/icon.svg")); + setApplicationName(CONFIG_POI_NAME); + setWindowIcon(QIcon(CONFIG_POI_ICON)); setApplicationVersion(poi_Version); } diff --git a/src/webengine/webpage.cpp b/src/webengine/webpage.cpp index 1c5e659..0e1238a 100644 --- a/src/webengine/webpage.cpp +++ b/src/webengine/webpage.cpp @@ -91,33 +91,6 @@ bool WebPage::certificateError(const QWebEngineCertificateError &certificateErro return resp == QMessageBox::Ignore; } -#ifdef QTBUG_68224_WORKAROUND -bool WebPage::acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame) -{ - /* Workaround for https://bugreports.qt.io/browse/QTBUG-68224 - * Only affects 5.11.0; should be fixed in 5.11.1 - */ - - auto *layout = this->view()->layout(); - auto count = layout->count(); - - if(count > 1) { - for(int i = 0; i < count; ++i) { - auto *item = layout->itemAt(i); - if(item == nullptr) - continue; - auto *widget = item->widget(); - if(widget != this->view()->focusProxy()) { - //qDebug("Removing widget"); - layout->removeWidget(widget); - } - } - } - - return true; -} -#endif - void WebPage::featurePermissionDialog(const QUrl &securityOrigin, QWebEnginePage::Feature feature) { QMessageBox messageBox; diff --git a/src/webengine/webpage.h b/src/webengine/webpage.h index a24370e..48011cb 100644 --- a/src/webengine/webpage.h +++ b/src/webengine/webpage.h @@ -19,9 +19,6 @@ public: protected: bool certificateError(const QWebEngineCertificateError &certificateError) override; -#ifdef QTBUG_68224_WORKAROUND - bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame) override; -#endif private slots: void featurePermissionDialog(const QUrl &securityOrigin, QWebEnginePage::Feature feature); diff --git a/src/webengine/webview.cpp b/src/webengine/webview.cpp index 59ad32a..671b32f 100644 --- a/src/webengine/webview.cpp +++ b/src/webengine/webview.cpp @@ -24,6 +24,7 @@ #include #include "browser.h" #include "wallet/wallet.h" +#include "config.h" inline QAction *historyAction(QWebEngineView *view, const QWebEngineHistoryItem &item) { @@ -56,7 +57,7 @@ WebView::WebView(WebProfile *profile, QWidget *parent) m_loaded = true; }); -#if defined(QTBUG_65223_WORKAROUND) +#ifdef CONFIG_QTBUG_65223 connect(this, &QWebEngineView::loadProgress, this, [this](int progress) { if(progress == 100) { emit loadFinished(true); diff --git a/tools/Kconfiglib b/tools/Kconfiglib new file mode 160000 index 0000000..5d91835 --- /dev/null +++ b/tools/Kconfiglib @@ -0,0 +1 @@ +Subproject commit 5d918357dd5734b900e1fdf074090ea662debd9e diff --git a/tools/config.py b/tools/config.py new file mode 100755 index 0000000..22defdd --- /dev/null +++ b/tools/config.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +import argparse +from Kconfiglib import kconfiglib + +def search(node, term): + while node: + if isinstance(node.item, kconfiglib.Symbol): + if node.item.name == term: + return node.item.str_value + + if node.list: + r = search(node.list, term) + if r is not None: + return r + + node = node.next + +def searchBug(node, term): + bugs = "" + + while node: + if isinstance(node.item, kconfiglib.Symbol): + if node.item.name.startswith(term): + if bugs is not "": + bugs += ";" + bugs += node.item.name + + if node.list: + r = searchBug(node.list, term) + if r is not None and r is not "": + if bugs is not "": + bugs += ";" + bugs += r + + node = node.next + return bugs + +def main(args): + kconf = kconfiglib.Kconfig(args.kconfig) + if args.dotconfig is not None: + kconf.load_config(args.dotconfig) + + i = "" + if args.setting.endswith("BUG"): + i = searchBug(kconf.top_node, args.setting) + else: + i = search(kconf.top_node, args.setting) + + if i is not None: + print(i) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + + parser.add_argument("--kconfig", metavar="Kconfig", nargs="?", default="Kconfig", help="Top-level Kconfig file (default: Kconfig)") + + parser.add_argument("--dotconfig", metavar="dotconfig", nargs="?", help=".config") + + parser.add_argument("setting", metavar="CONFIG_KEY", nargs="?", help="Top-level Kconfig file (default: Kconfig)") + + args = parser.parse_args() + main(args) -- cgit v1.2.1