cmake_minimum_required(VERSION 3.25)
project(LorenzKWin LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD 23)
find_package(Qt6 REQUIRED COMPONENTS Widgets DBus Quick)
find_package(KWin CONFIG REQUIRED)
# Some distributions omit this private header from the KWin development package.
# Supply the matching KWin source directory; never mix compositor versions.
set(KWIN_SOURCE_INCLUDE "" CACHE PATH "Directory containing the matching abstract_data_source.h")
# Qt may retain unloaded plugin libraries until the compositor exits. Give each
# source revision a distinct identity and installed path for live upgrades.
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS plugin.cpp ../../desktop/radialwheel.h metadata.json)
file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/plugin.cpp" plugin_hash)
file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/../../desktop/radialwheel.h" wheel_hash)
file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/metadata.json" metadata_hash)
file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt" build_hash)
string(SHA256 revision "${plugin_hash}${wheel_hash}${metadata_hash}${build_hash}${KWin_VERSION}${Qt6_VERSION}${CMAKE_CXX_COMPILER_VERSION}")
string(SUBSTRING "${revision}" 0 12 revision)
set(LORENZ_PLUGIN_ID "lorenz-${revision}")
configure_file(metadata.json lorenz-metadata.json @ONLY)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/plugin-id" "${LORENZ_PLUGIN_ID}\n")
add_library(lorenz MODULE plugin.cpp)
target_include_directories(lorenz PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
target_compile_definitions(lorenz PRIVATE LORENZ_PLUGIN_ID="${LORENZ_PLUGIN_ID}")
target_include_directories(lorenz PRIVATE ${KWIN_SOURCE_INCLUDE} /usr/include/kwin/wayland)
target_link_libraries(lorenz PRIVATE KWin::kwin Qt6::Widgets Qt6::DBus)
set_target_properties(lorenz PROPERTIES PREFIX "")
install(TARGETS lorenz DESTINATION lib/qt6/plugins/kwin/plugins)
option(LORENZ_BUILD_ISOLATED_TEST_DRIVER "Build the test-only input module (never install)" OFF)
if(LORENZ_BUILD_ISOLATED_TEST_DRIVER)
    add_library(lorenz-testinput MODULE ../../tests/kwin_input.cpp)
    target_link_libraries(lorenz-testinput PRIVATE KWin::kwin Qt6::Widgets Qt6::DBus)
    set_target_properties(lorenz-testinput PROPERTIES PREFIX "")
endif()
