cmake_minimum_required(VERSION 3.5)

project(rviz_rendering_tests)

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

option(EnableDisplayTests "EnableDisplayTests")
set(DisplayTests "False" CACHE STRING "DisplayTestsVariable")

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic -Werror)
endif()

find_package(ament_cmake REQUIRED)

if(BUILD_TESTING)
  # Qt5 boilerplate options from http://doc.qt.io/qt-5/cmake-manual.html
  set(CMAKE_INCLUDE_CURRENT_DIR ON)
  set(CMAKE_AUTOMOC ON)

  # do find_package(rviz_ogre_vendor) first to make sure the custom OGRE is found
  find_package(rviz_ogre_vendor REQUIRED)
  find_package(Qt5 REQUIRED COMPONENTS Widgets)
  find_package(rviz_rendering REQUIRED)
  find_package(resource_retriever REQUIRED)

  # Adds shallow folders containing ogre_media such as meshes and scripts to Rviz
  # so that they can be found at runtime. Requires rviz_rendering.
  register_rviz_ogre_media_exports(
    DIRECTORIES
    "ogre_media_resources/scripts"
    "ogre_media_resources/meshes"
  )

  install(DIRECTORY "${CMAKE_SOURCE_DIR}/ogre_media_resources/test_meshes"
    DESTINATION "share/rviz_rendering_tests"
    USE_SOURCE_PERMISSIONS)

  # TODO(Martin-Idel-SI): replace this with ament_lint_auto() and/or add the copyright linter back
  find_package(ament_cmake_cppcheck REQUIRED)
  find_package(ament_cmake_cpplint REQUIRED)
  find_package(ament_cmake_lint_cmake REQUIRED)
  find_package(ament_cmake_uncrustify REQUIRED)
  ament_cppcheck()
  ament_cpplint()
  ament_lint_cmake()
  ament_uncrustify()

  find_package(ament_cmake_gtest REQUIRED)
  find_package(ament_cmake_gmock REQUIRED)
  find_package(ament_index_cpp REQUIRED)

  if($ENV{DISPLAY})
    set(DISPLAYPRESENT TRUE)
  else()
    set(DISPLAYPRESENT FALSE)
  endif()

  if(APPLE OR DISPLAYPRESENT OR EnableDisplayTests STREQUAL "True")
    message(STATUS "Enabling tests requiring a display")

    ament_add_gmock(mesh_loader_test_target
      test/mesh_loader_test.cpp
      APPEND_ENV AMENT_PREFIX_PATH=${CMAKE_INSTALL_PREFIX} PATH=${CMAKE_INSTALL_PREFIX}/opt/rviz_ogre_vendor/bin)
    if(TARGET mesh_loader_test_target)
      target_link_libraries(mesh_loader_test_target
        rviz_ogre_vendor::OgreMain
        rviz_rendering::rviz_rendering
        resource_retriever::resource_retriever
      )
      ament_target_dependencies(mesh_loader_test_target
        rviz_assimp_vendor)
    endif()

    ament_add_gtest(test_rviz_rendering_tests
      test/test_rviz_ogre_media_exports.cpp
      APPEND_ENV AMENT_PREFIX_PATH=${CMAKE_INSTALL_PREFIX} PATH=${CMAKE_INSTALL_PREFIX}/bin;${CMAKE_INSTALL_PREFIX}/opt/rviz_assimp_vendor/bin;${CMAKE_INSTALL_PREFIX}/opt/rviz_yaml_cpp_vendor/bin;${CMAKE_INSTALL_PREFIX}/opt/rviz_ogre_vendor/bin)
    if(TARGET test_rviz_rendering_tests)
      target_include_directories(test_rviz_rendering_tests
        PUBLIC src/rviz_rendering_tests)
      target_link_libraries(test_rviz_rendering_tests
        ament_index_cpp::ament_index_cpp)
    endif()
  endif()
endif()

ament_package()
