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 (9P-based) --- 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.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 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::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() # --- GUI App (9P-based, no D-Bus) --- find_package(KF6SyntaxHighlighting REQUIRED) add_executable(ollie-gui gui/main.cpp gui/ollie9pclient.cpp gui/chatblockmodel.cpp gui/thememanager.cpp ) target_include_directories(ollie-gui PRIVATE ${CMAKE_SOURCE_DIR}/gui ) target_link_libraries(ollie-gui Qt6::Core Qt6::Widgets Qt6::Quick Qt6::QuickControls2 KF6::ConfigCore KF6::SyntaxHighlighting ) qt_add_resources(ollie-gui "gui" PREFIX "/" BASE gui FILES gui/main.qml ) # --- Install --- install(TARGETS ollie-gui DESTINATION ${KDE_INSTALL_BINDIR}) endif()