set(GLDOZE_GLDECK_APP_DIR "${CMAKE_BINARY_DIR}/apps/gldeck")

add_library(gldoze_gldeck MODULE gldeck_plugin.cpp)
target_link_libraries(gldoze_gldeck PRIVATE gldoze_sdk)
get_target_property(_gldeck_link_libraries gldoze_gldeck LINK_LIBRARIES)
foreach(_gldeck_link_library IN LISTS _gldeck_link_libraries)
  if(NOT _gldeck_link_library STREQUAL "gldoze_sdk")
    message(FATAL_ERROR
      "GLDeck must remain SDK-only; unexpected link dependency: ${_gldeck_link_library}")
  endif()
endforeach()
set_target_properties(gldoze_gldeck PROPERTIES
  LIBRARY_OUTPUT_DIRECTORY "${GLDOZE_GLDECK_APP_DIR}"
  PREFIX "lib"
  OUTPUT_NAME "gldoze_gldeck"
  CXX_VISIBILITY_PRESET hidden
  VISIBILITY_INLINES_HIDDEN YES
)

file(MAKE_DIRECTORY "${GLDOZE_GLDECK_APP_DIR}")
configure_file(app.json.in "${GLDOZE_GLDECK_APP_DIR}/app.json" @ONLY)
configure_file("${CMAKE_SOURCE_DIR}/assets/desktop/icons/gldeck.svg"
  "${GLDOZE_GLDECK_APP_DIR}/icon.svg" COPYONLY)

if(BUILD_TESTING)
  add_test(NAME gldeck_sdk_boundary
    COMMAND "${CMAKE_COMMAND}"
      -DGLDECK_PLUGIN_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}/gldeck_plugin.cpp
      -P "${CMAKE_CURRENT_SOURCE_DIR}/verify_sdk_boundary.cmake")
endif()

install(TARGETS gldoze_gldeck
  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/gldeck"
  COMPONENT GLDozeDesktop)
install(FILES "${GLDOZE_GLDECK_APP_DIR}/app.json"
  "${GLDOZE_GLDECK_APP_DIR}/icon.svg"
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/gldeck"
  COMPONENT GLDozeDesktop)
