cmake_minimum_required(VERSION 3.16) project(kde-ollie VERSION 0.1.0 LANGUAGES CXX) option(OLLIE_KF5 "Build against KF5/Qt5 (Plasma 5.27)" OFF) # Suppress CMP0160 warnings from KF5 cmake files (read-only IMPORTED property) if(OLLIE_KF5) cmake_policy(SET CMP0160 OLD) endif() set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) if(OLLIE_KF5) # --- Qt5 / KF5 --- find_package(Qt5 REQUIRED COMPONENTS Core Concurrent Widgets Quick Qml QuickControls2 Network) # Override KDE_INSTALL_PLUGINDIR so kcoreaddons_add_plugin installs under # CMAKE_INSTALL_PREFIX (e.g. ~/.local/lib/qt5/plugins), not the system dir. set(KDE_INSTALL_PLUGINDIR "lib/qt5/plugins" CACHE PATH "" FORCE) find_package(KF5 REQUIRED COMPONENTS Runner CoreAddons Config TextEditor SyntaxHighlighting ) # --- KRunner Plugin --- kcoreaddons_add_plugin(krunner_ollie SOURCES krunner/ollie_runner.cpp INSTALL_NAMESPACE "kf5/krunner") target_link_libraries(krunner_ollie KF5::Runner Qt5::Core Qt5::Widgets ) # --- Kate Plugin --- kcoreaddons_add_plugin(ollie_kate SOURCES kate/ollie_kate.cpp kate/ollie_ghost.cpp gui/lib9pclient.cpp INSTALL_NAMESPACE "ktexteditor" ) target_include_directories(ollie_kate PRIVATE ${CMAKE_SOURCE_DIR}/gui $ENV{HOME}/.local/include ) target_link_libraries(ollie_kate KF5::TextEditor KF5::SyntaxHighlighting Qt5::Core Qt5::Widgets $ENV{HOME}/.local/lib/libollie9p.so ) # --- GUI App (9P-based) --- # Strip Qt6-only grouped palette syntax (palette.active.*, palette.inactive.*, # palette.disabled.*) — Qt5 QML doesn't support color-group qualifiers. # ThemeManager::applyPalette() sets the application palette which Qt Quick # Controls 2 picks up automatically. file(READ ${CMAKE_CURRENT_SOURCE_DIR}/gui/main.qml _QML_SRC) string(REGEX REPLACE "[ \t]*(//[^\n]*palette[^\n]*\n|palette\\.(active|inactive|disabled)\\.[^\n]*\n)" "" _QML_SRC "${_QML_SRC}") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gui-kf5/main.qml "${_QML_SRC}") configure_file(gui/qml.qrc ${CMAKE_CURRENT_BINARY_DIR}/gui-kf5/qml.qrc COPYONLY) qt5_add_resources(GUI_KF5_QRC ${CMAKE_CURRENT_BINARY_DIR}/gui-kf5/qml.qrc) add_executable(ollie-gui gui/main.cpp gui/ollie9pclient.cpp gui/lib9pclient.cpp gui/ninepconnection.cpp gui/chatblockmodel.cpp gui/thememanager.cpp gui/streamfsm.cpp ${GUI_KF5_QRC} ) target_include_directories(ollie-gui PRIVATE ${CMAKE_SOURCE_DIR}/gui $ENV{HOME}/.local/include ) target_link_libraries(ollie-gui Qt5::Core Qt5::Widgets Qt5::Quick Qt5::QuickControls2 KF5::ConfigCore KF5::SyntaxHighlighting $ENV{HOME}/.local/lib/libollie9p.so ) # --- Install --- install(TARGETS ollie-gui DESTINATION ${KDE_INSTALL_BINDIR}) else() # --- Qt6 / KF6 --- find_package(Qt6 REQUIRED COMPONENTS Core Widgets Quick QuickControls2) find_package(KF6 REQUIRED COMPONENTS Runner CoreAddons) find_package(KF6Config REQUIRED) # KDE's KDE_INSTALL_PLUGINDIR defaults to lib64/plugins/ but Qt6 plugins # live under lib64/qt6/plugins/. Override so kcoreaddons_add_plugin installs # to the correct location. set(KDE_INSTALL_PLUGINDIR "${QT6_INSTALL_PLUGINS}" CACHE PATH "" FORCE) # --- KRunner Plugin --- kcoreaddons_add_plugin(krunner_ollie SOURCES krunner/ollie_runner.cpp INSTALL_NAMESPACE "kf6/krunner") target_link_libraries(krunner_ollie KF6::Runner Qt6::Core Qt6::Widgets ) # --- Kate Plugin --- find_package(KF6TextEditor REQUIRED) kcoreaddons_add_plugin(ollie_kate SOURCES kate/ollie_kate.cpp kate/ollie_ghost.cpp gui/lib9pclient.cpp INSTALL_NAMESPACE "kf6/ktexteditor" ) target_include_directories(ollie_kate PRIVATE ${CMAKE_SOURCE_DIR}/gui $ENV{HOME}/.local/include ) target_link_libraries(ollie_kate KF6::TextEditor KF6::SyntaxHighlighting Qt6::Core Qt6::Widgets $ENV{HOME}/.local/lib/libollie9p.so ) # --- GUI App (9P-based, no D-Bus) --- find_package(KF6SyntaxHighlighting REQUIRED) add_executable(ollie-gui gui/main.cpp gui/ollie9pclient.cpp gui/lib9pclient.cpp gui/ninepconnection.cpp gui/chatblockmodel.cpp gui/thememanager.cpp gui/streamfsm.cpp ) target_include_directories(ollie-gui PRIVATE ${CMAKE_SOURCE_DIR}/gui $ENV{HOME}/.local/include ) target_link_libraries(ollie-gui Qt6::Core Qt6::Widgets Qt6::Quick Qt6::QuickControls2 KF6::ConfigCore KF6::SyntaxHighlighting $ENV{HOME}/.local/lib/libollie9p.so ) qt_add_resources(ollie-gui "gui" PREFIX "/" BASE gui FILES gui/main.qml ) # --- Install --- install(TARGETS ollie-gui DESTINATION ${KDE_INSTALL_BINDIR}) endif()