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) # --- Find libkateprivate for Kate's built-in diff viewer --- file(GLOB _KATEPRIVATE_CANDIDATES "/usr/lib64/libkateprivate.so*" "/usr/lib/libkateprivate.so*" "/usr/lib/x86_64-linux-gnu/libkateprivate.so*" "/usr/lib/aarch64-linux-gnu/libkateprivate.so*") if(_KATEPRIVATE_CANDIDATES) list(GET _KATEPRIVATE_CANDIDATES 0 KATEPRIVATE_LIB) message(STATUS "Found libkateprivate: ${KATEPRIVATE_LIB}") set(HAVE_KATE_DIFF TRUE) else() set(KATEPRIVATE_LIB "") set(HAVE_KATE_DIFF FALSE) message(STATUS "libkateprivate not found -- diffs will render inline") endif() if(OLLIE_KF5) # --- Qt5 / KF5 --- find_package(Qt5 REQUIRED COMPONENTS Core Concurrent DBus 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 (temporarily disabled — 9P conversion in progress) --- # kcoreaddons_add_plugin(ollie_kate SOURCES kate/ollie_kate.cpp kate/ollie_ghost.cpp kate/chat_renderer.cpp INSTALL_NAMESPACE "ktexteditor") # target_link_libraries(ollie_kate # KF5::TextEditor # KF5::SyntaxHighlighting # Qt5::Core # Qt5::Widgets # ) # if(HAVE_KATE_DIFF) # target_compile_definitions(ollie_kate PRIVATE HAVE_KATE_DIFF) # target_include_directories(ollie_kate PRIVATE ${CMAKE_SOURCE_DIR}/kate) # target_link_libraries(ollie_kate ${KATEPRIVATE_LIB}) # endif() # --- GUI App (9P-based) --- configure_file(gui/main-kf5.qml ${CMAKE_CURRENT_BINARY_DIR}/gui-kf5/main.qml COPYONLY) 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_KF5_QRC} ) target_include_directories(ollie-gui PRIVATE ${CMAKE_SOURCE_DIR}/gui) target_link_libraries(ollie-gui Qt5::Core Qt5::Widgets Qt5::Quick Qt5::QuickControls2 ) # --- Install --- install(TARGETS ollie-gui DESTINATION ${KDE_INSTALL_BINDIR}) else() # --- Qt6 / KF6 --- find_package(Qt6 REQUIRED COMPONENTS Core Concurrent DBus Widgets Quick QuickControls2 Multimedia Network) find_package(KF6StatusNotifierItem REQUIRED) find_package(KF6 REQUIRED COMPONENTS Runner Notifications CoreAddons Config) find_package(Plasma REQUIRED) # --- System Tray --- add_executable(ollie-tray tray/main.cpp tray/ollie_tray.cpp ) target_include_directories(ollie-tray PRIVATE ${CMAKE_SOURCE_DIR} ) target_link_libraries(ollie-tray Qt6::Core Qt6::DBus Qt6::Widgets KF6::StatusNotifierItem ) # 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::DBus Qt6::Widgets ) # --- Kate Plugin --- find_package(KF6TextEditor REQUIRED) find_package(KF6SyntaxHighlighting REQUIRED) kcoreaddons_add_plugin(ollie_kate SOURCES kate/ollie_kate.cpp kate/ollie_ghost.cpp kate/chat_renderer.cpp INSTALL_NAMESPACE "kf6/ktexteditor") target_link_libraries(ollie_kate KF6::TextEditor KF6::SyntaxHighlighting Qt6::Core Qt6::DBus Qt6::Widgets ) if(HAVE_KATE_DIFF) target_compile_definitions(ollie_kate PRIVATE HAVE_KATE_DIFF) target_include_directories(ollie_kate PRIVATE ${CMAKE_SOURCE_DIR}/kate) target_link_libraries(ollie_kate ${KATEPRIVATE_LIB}) endif() # --- Plasmoid QML Plugin --- qt6_add_qml_module(ollie-plasmoid-plugin URI org.ollie.private VERSION 1.0 SOURCES plasmoid/plugin/olliedbusclient.h plasmoid/plugin/olliedbusclient.cpp OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/org/ollie/private ) target_link_libraries(ollie-plasmoid-plugin PRIVATE Qt6::Core Qt6::DBus Qt6::Quick ) target_include_directories(ollie-plasmoid-plugin PRIVATE ${CMAKE_SOURCE_DIR}/plasmoid/plugin ) # --- Plasmoid Package --- plasma_install_package(plasmoid org.ollie.plasmoid) # --- GUI App --- add_executable(ollie-gui gui/main.cpp gui/thememanager.cpp gui/chatblockmodel.cpp plasmoid/plugin/olliedbusclient.cpp ) target_include_directories(ollie-gui PRIVATE ${CMAKE_SOURCE_DIR}/plasmoid/plugin ${CMAKE_SOURCE_DIR}/gui ) target_link_libraries(ollie-gui Qt6::Core Qt6::Concurrent Qt6::DBus Qt6::Widgets Qt6::Quick Qt6::QuickControls2 Qt6::Multimedia Qt6::Network KF6::ConfigCore KF6::SyntaxHighlighting ) qt_add_resources(ollie-gui "gui" PREFIX "/" FILES gui/main.qml gui/ChatPane.qml gui/SessionGraph.qml gui/emojis.js ) # --- Install --- install(TARGETS ollie-gui DESTINATION ${KDE_INSTALL_BINDIR}) install(TARGETS ollie-plasmoid-plugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/ollie/private) endif()