if(NOT DEFINED GLDOZE_REPO_ROOT)
  get_filename_component(GLDOZE_REPO_ROOT "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
endif()

set(GLDOZE_DEMO_SUPPORT_SOURCES
  ${CMAKE_CURRENT_LIST_DIR}/src/app.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_datahub.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_project.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_camera.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_charts.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_demo.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_dopeplant.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_terrain.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_layout.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_playlist_buttons.cpp

  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_springmap.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_media.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_streaming.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_widget_panels_a.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_widget_panels_b.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_viewport.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_window2_dropdown.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_window2_tabs.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_widget_windows.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_workspace.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_scenes_windows01.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_settings.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_settings_panels.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/glgallerywindow.cpp

	# GLTop remains a native window in both the desktop and standalone demo.
	${GLDOZE_REPO_ROOT}/gltopwindow.cpp
	${CMAKE_CURRENT_LIST_DIR}/src/glplantmanager.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/glprojectcontrolpanel.cpp
)

add_library(gldoze_gallery_scene_registry STATIC
  ${CMAKE_CURRENT_LIST_DIR}/src/gallery_scene_registry.cpp
)
target_include_directories(gldoze_gallery_scene_registry PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src)

add_library(gldoze_demo_support STATIC ${GLDOZE_DEMO_SUPPORT_SOURCES})
target_link_libraries(gldoze_demo_support
  PUBLIC
    gldoze_engine
    gldoze_gallery_scene_registry
)
target_include_directories(gldoze_demo_support
  PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}/src
)

add_executable(gldoze
  ${CMAKE_CURRENT_LIST_DIR}/src/main.cpp
  ${CMAKE_CURRENT_LIST_DIR}/src/app_factory.cpp
)
target_link_libraries(gldoze PRIVATE gldoze_demo_support)
set_target_properties(gldoze PROPERTIES
  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
)

if(BUILD_TESTING)
  add_executable(gallery_scene_registry_test
    tests/gallery_scene_registry_test.cpp
    src/gallery_scene_registry.cpp
  )
  target_include_directories(gallery_scene_registry_test PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src)
  add_test(NAME gallery_scene_registry COMMAND gallery_scene_registry_test)
endif()
