ollie/kde/CMakeLists.txt

163 lines
4.7 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(kde-ollie VERSION 0.1.0 LANGUAGES CXX)
# Default to user-local install if no prefix specified
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "Install prefix" FORCE)
endif()
# Ensure Qt6 is used
set(QT_DEFAULT_MAJOR_VERSION 6)
# Build lib9p (Go shared library) as part of the cmake build.
set(OLLIE9P_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so")
set(OLLIE9P_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.h")
set(OLLIE9P_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib9p")
add_custom_command(
OUTPUT "${OLLIE9P_LIBRARY}" "${OLLIE9P_HEADER}"
COMMAND go build -buildmode=c-shared -o "${OLLIE9P_LIBRARY}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib9p"
COMMENT "Building lib9p (Go shared library)"
VERBATIM
)
add_custom_target(lib9p_build DEPENDS "${OLLIE9P_LIBRARY}" "${OLLIE9P_HEADER}")
# The native clients link against the bundled C ABI library. Install it as a
# normal runtime library beside the executable, not in the Qt plugin tree.
# CMAKE_INSTALL_LIBDIR is relative to the install prefix (normally lib).
add_library(ollie9p SHARED IMPORTED GLOBAL)
set_target_properties(ollie9p PROPERTIES
IMPORTED_LOCATION "${OLLIE9P_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${OLLIE9P_INCLUDE_DIR}"
)
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(GNUInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
install(FILES "${OLLIE9P_LIBRARY}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# --- Qt6 / KF6 ---
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Quick QuickControls2 Network)
find_package(KF6CoreAddons REQUIRED)
find_package(KF6Config REQUIRED)
find_package(KF6SyntaxHighlighting REQUIRED)
find_package(KF6Runner REQUIRED)
find_package(KF6KIO REQUIRED)
find_package(KF6TextEditor 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 ---
kcoreaddons_add_plugin(ollie_kate SOURCES
kate/ollie_kate.cpp
kate/ollie_ghost.cpp
gui/lib9pclient.cpp
INSTALL_NAMESPACE "kf6/ktexteditor"
)
add_dependencies(ollie_kate lib9p_build)
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
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
)
# --- KIO Worker ---
kcoreaddons_add_plugin(kio_ollie SOURCES
kio/ollie_kio.cpp
gui/lib9pclient.cpp
INSTALL_NAMESPACE "kf6/kio"
)
add_dependencies(kio_ollie lib9p_build)
target_include_directories(kio_ollie PRIVATE
${CMAKE_SOURCE_DIR}/gui
${CMAKE_SOURCE_DIR}/kio
$ENV{HOME}/.local/include
)
target_link_libraries(kio_ollie
KF6::KIOCore
Qt6::Core
Qt6::Network
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
)
# --- GUI App ---
add_executable(ollie-gui
gui/main.cpp
gui/ollie9pclient.cpp
gui/sessionmodel.cpp
gui/lib9pclient.cpp
gui/lib9pstreamer.cpp
gui/chatblockmodel.cpp
gui/thememanager.cpp
gui/clipboardhelper.cpp
gui/plumber.cpp
gui/ninep.cpp
gui/plumbmsg.cpp
)
add_dependencies(ollie-gui lib9p_build)
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
Qt6::Network
KF6::ConfigCore
KF6::SyntaxHighlighting
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
)
qt_add_resources(ollie-gui "gui"
PREFIX "/"
BASE gui
FILES
gui/main.qml
gui/SettingsDialog.qml
gui/NewSessionDialog.qml
gui/NewAgentDialog.qml
gui/GoalDialog.qml
gui/ProcManagerWindow.qml
gui/PeerManagerWindow.qml
gui/ChatBlockDelegate.qml
gui/SessionTree.qml
gui/ChatPane.qml
gui/TextSelection.js
gui/ollie.svg
)
# --- Install ---
install(TARGETS ollie-gui DESTINATION ${KDE_INSTALL_BINDIR})
# Note: KIO protocol is defined via ollie.json embedded in the plugin (KF6 style)
# The ollie.protocol file is not needed for KF6