find_package(PkgConfig)
pkg_check_modules(MIRCORE mircore REQUIRED)
pkg_check_modules(MIRSERVER mirserver REQUIRED)
pkg_check_modules(MIRAL miral REQUIRED)
pkg_check_modules(YAML REQUIRED IMPORTED_TARGET yaml-cpp)
pkg_check_modules(LIBEVDEV REQUIRED IMPORTED_TARGET libevdev)
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
find_package(GTest REQUIRED)

add_library(miracle-wm-config
    SHARED
    src/miracle-wm-config.cpp include/miracle/miracle-wm-config.h
    include/miracle/animation_definition.h
    include/miracle/container_type.h
    include/miracle/default_key_command.h
    include/miracle/cursor_focus_mode.h
    include/miracle/modifiers.h
    src/miracle-wm-config-c.cpp include/miracle/miracle-wm-config-c.h)

set_target_properties(miracle-wm-config PROPERTIES
    CXX_STANDARD 20
    VERSION ${PROJECT_VERSION}
    SOVERSION ${PROJECT_VERSION_MAJOR}
)

target_include_directories(miracle-wm-config PUBLIC SYSTEM
    include
    ${MIRCORE_INCLUDE_DIRS}
    ${MIRAL_INCLUDE_DIRS})

target_link_libraries(miracle-wm-config
    ${MIRCORE_LDFLAGS}
    ${MIRAL_LDFLAGS}
    PkgConfig::YAML
    PkgConfig::LIBEVDEV
    PkgConfig::GLIB)

configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/miracle-wm-config.pc.in
    ${CMAKE_CURRENT_BINARY_DIR}/miracle-wm-config.pc
    @ONLY
)

# Installation
install(TARGETS miracle-wm-config
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(DIRECTORY include/miracle
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
    FILES_MATCHING PATTERN "*.h"
)

install(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/miracle-wm-config.pc
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)

# Tests
add_executable(test_miracle_wm_config_c_api
    tests/test_miracle_wm_config_c_api.cpp
    tests/test_miracle_wm_config.cpp
)

target_include_directories(test_miracle_wm_config_c_api PRIVATE
    ${CMAKE_SOURCE_DIR}/include
    ${MIRCORE_INCLUDE_DIRS}
    ${MIRSERVER_INCLUDE_DIRS}
    ${GTEST_INCLUDE_DIRS}
    ${GMOCK_INCLUDE_DIRS}
)

target_link_libraries(test_miracle_wm_config_c_api
    miracle-wm-config
    GTest::GTest
    GTest::Main
    ${MIRCORE_LDFLAGS}
    ${MIRSERVER_LDFLAGS}
)

add_test(NAME test_miracle_wm_config_c_api COMMAND test_miracle_wm_config_c_api)
