163 lines
4.7 KiB
CMake
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
|