cmake_minimum_required(VERSION 3.10)
project(rviz_ogre_vendor)

find_package(ament_cmake REQUIRED)
find_package(ament_cmake_vendor_package REQUIRED)

option(RVIZ_OGRE_VENDOR_MANGLE_NAME_OF_LIBRARIES_USED_BY_RVIZ "If enabled, append a unique name to OgreMain, OgreOverlay and OgreGLSupport." FALSE)

set(OGRE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
if(MSVC)
  set(OGRE_CXX_FLAGS "/wd4101 ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "/wd4244 ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "/wd4267 ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "/wd4334 ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "/wd4477 ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "/wd4996 ${OGRE_CXX_FLAGS}")
else()
  set(OGRE_CXX_FLAGS "-Wno-deprecated-declarations ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "-Wno-mismatched-new-delete ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "-Wno-range-loop-construct ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "-Wno-undef ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "-Wno-misleading-indentation ${OGRE_CXX_FLAGS}")
  set(OGRE_CXX_FLAGS "-Wno-format-truncation ${OGRE_CXX_FLAGS}")

  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    set(OGRE_CXX_FLAGS "-Wno-implicit-const-int-float-conversion ${OGRE_CXX_FLAGS}")
  else()
    set(OGRE_CXX_FLAGS "-Wno-maybe-uninitialized ${OGRE_CXX_FLAGS}")
    set(OGRE_CXX_FLAGS "-Wno-format-overflow ${OGRE_CXX_FLAGS}")
    set(OGRE_CXX_FLAGS "-Wno-dangling-pointer ${OGRE_CXX_FLAGS}")
    set(OGRE_CXX_FLAGS "-Wno-array-compare ${OGRE_CXX_FLAGS}")
    set(OGRE_CXX_FLAGS "-Wno-stringop-overflow ${OGRE_CXX_FLAGS}")
  endif()
endif()

set(OGRE_CMAKE_ARGS)
if(NOT WIN32)
  list(APPEND OGRE_CMAKE_ARGS -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON)
endif()

if(APPLE)
  list(APPEND OGRE_CMAKE_ARGS -DOGRE_ENABLE_PRECOMPILED_HEADERS:BOOL=OFF)
  list(APPEND OGRE_CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64)
endif()

ament_vendor(ogre_vendor
  VCS_URL https://github.com/OGRECave/ogre.git
  VCS_VERSION v1.12.10
  CMAKE_ARGS
    -DOGRE_STATIC:BOOL=OFF
    -DOGRE_INSTALL_PDB:BOOL=OFF
    -DOGRE_BUILD_DEPENDENCIES:BOOL=OFF
    -DOGRE_BUILD_TESTS:BOOL=OFF
    -DOGRE_BUILD_SAMPLES:BOOL=FALSE
    -DOGRE_INSTALL_SAMPLES:BOOL=FALSE
    -DOGRE_INSTALL_SAMPLES_SOURCE:BOOL=FALSE
    -DOGRE_CONFIG_THREADS:STRING=0
    -DOGRE_RESOURCEMANAGER_STRICT:STRING=2
    -DOGRE_BUILD_LIBS_AS_FRAMEWORKS:BOOL=OFF
    -DOGRE_BUILD_COMPONENT_PYTHON:BOOL=FALSE
    -DOGRE_BUILD_COMPONENT_JAVA:BOOL=FALSE
    -DOGRE_BUILD_COMPONENT_CSHARP:BOOL=FALSE
    -DOGRE_BUILD_COMPONENT_BITES:BOOL=FALSE
    -DOGRE_BUILD_PLUGIN_DOT_SCENE:BOOL=FALSE
    -DOGRE_BUILD_TOOLS:BOOL=FALSE
    -DOGRE_CONFIG_ENABLE_ZIP:BOOL=ON
    -DOGRE_BUILD_RENDERSYSTEM_GL:BOOL=TRUE
    -DOGRE_BUILD_RENDERSYSTEM_D3D11:BOOL=OFF
    -DOGRE_BUILD_RENDERSYSTEM_D3D9:BOOL=OFF
    -DCMAKE_POLICY_DEFAULT_CMP0074=NEW
    -DOGRE_MANGLE_NAME_OF_LIBRARIES_USED_BY_RVIZ:BOOL=${RVIZ_OGRE_VENDOR_MANGLE_NAME_OF_LIBRARIES_USED_BY_RVIZ}
    "-DCMAKE_CXX_FLAGS=${OGRE_CXX_FLAGS}"
    ${OGRE_CMAKE_ARGS}
  PATCHES patches
)

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  ament_lint_auto_find_test_dependencies()
endif()

ament_package(
  CONFIG_EXTRAS_POST "rviz_ogre_vendor-extras.cmake.in"
)
