# Define the minimum cmake version required
cmake_minimum_required(VERSION "3.10.2" FATAL_ERROR)

include(CMakeDependentOption)

set(CMAKE_CONFIGURATION_TYPES Debug;Release CACHE STRING "" FORCE)

# Modules libs
project(AllModulesLibs)

# Hide (and set to FALSE) OIV_LOCAL_PROJECT option in OIV_DEV_BUILD mode
cmake_dependent_option(OIV_LOCAL_PROJECT "generate local project ready to distrib" TRUE "NOT OIV_DEV_BUILD" FALSE)

if(OIV_LOCAL_PROJECT)
  set(CMAKE_SUPPRESS_REGENERATION TRUE)
  set(CMAKE_USE_RELATIVE_PATH TRUE)
else()
  if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
    message(FATAL_ERROR "CMake generation is not allowed within the
      source directory! Remove the CMakeCache.txt file and try again from another folder, e.g.:

      rm CMakeCache.txt
      mkdir -p build/{debug/release}
      cd build/debug
      cmake  ../..
      ")
  endif()
endif()

# Detect if we are running Cmake starting from demo directory or from
# main OivSuite directory
if(NOT OIV_DEV_BUILD AND ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
  # Here we have ran CMake directly in the demo directory
  set(OIV_COMMON_CMAKE_DIR ${CMAKE_SOURCE_DIR}/cmake )
  include( ${OIV_COMMON_CMAKE_DIR}/FindGit.cmake )
  include( ${OIV_COMMON_CMAKE_DIR}/InternalBuildKey.cmake )
  include( ${OIV_COMMON_CMAKE_DIR}/GPUDetection.cmake )
  include( ${OIV_COMMON_CMAKE_DIR}/SystemDetection.cmake )

  if(OIV_INTERNAL_BUILD_KEY)
    message(STATUS "SHA1 build key: ${OIV_INTERNAL_BUILD_KEY}")
  endif()

  # ensure we find the OpenInventorConfig.cmake file
  list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR}/../source/cmake/config)

  set(COMPONENTS_LIST 
    volumeViz
    ldm
    inventor_ui
    inventor_ui_qt
    hardCopy
    meshViz
    meshVizXLM_extractor
    meshVizXLM_dataMapping
    inventor_computing_algorithms
    scaleViz
    ivTune
    ivTune_extender
    dialogViz_qt
  )

  if(WIN32)
    list(APPEND COMPONENTS_LIST dialogViz inventor_ui_win)
  elseif(UNIX AND NOT APPLE)
    list(APPEND COMPONENTS_LIST inventor_ui_xt)
  endif()

  find_package(OpenInventor REQUIRED COMPONENTS ${COMPONENTS_LIST})


  include(${OIV_COMMON_CMAKE_DIR}/UsefulMacros.cmake)
  include(${OIV_COMMON_CMAKE_DIR}/DefaultCompilerFlags.cmake)

  # Enable _SCL_SECURE_NO_WARNINGS to avoid warning C4996 on Windows
  if(MSVC)
    add_definitions(-D_SCL_SECURE_NO_WARNINGS)
  endif()

  set(OUTPUT_PATH "${CMAKE_SOURCE_DIR}/../${OIVARCH}")

  set(RUNTIME_OUTPUT_PATH "${OUTPUT_PATH}/bin")
  if(MSVC)
  set(LIBRARY_OUTPUT_PATH "${OUTPUT_PATH}/bin")
  else(MSVC)
  set(LIBRARY_OUTPUT_PATH "${OUTPUT_PATH}/lib")
  endif(MSVC)
  set(ARCHIVE_OUTPUT_PATH "${OUTPUT_PATH}/lib")
  mark_as_advanced(RUNTIME_OUTPUT_PATH LIBRARY_OUTPUT_PATH ARCHIVE_OUTPUT_PATH)

  link_directories(${ARCHIVE_OUTPUT_PATH})

  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${RUNTIME_OUTPUT_PATH})
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ARCHIVE_OUTPUT_PATH})
  if(MSVC)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${RUNTIME_OUTPUT_PATH})
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${RUNTIME_OUTPUT_PATH})
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${RUNTIME_OUTPUT_PATH})
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${RUNTIME_OUTPUT_PATH})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${LIBRARY_OUTPUT_PATH})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${LIBRARY_OUTPUT_PATH})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL ${LIBRARY_OUTPUT_PATH})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${LIBRARY_OUTPUT_PATH})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${ARCHIVE_OUTPUT_PATH})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${ARCHIVE_OUTPUT_PATH})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL ${ARCHIVE_OUTPUT_PATH})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${ARCHIVE_OUTPUT_PATH})
  endif(MSVC)

  set(OIV_TOOLKIT_BUILD TRUE)
endif()

include( ${OIV_COMMON_CMAKE_DIR}/CMakePolicy.cmake NO_POLICY_SCOPE )

# ###################################################
# Option to enable/disable all demos using Qt
option( OIV_ENABLE_QT_DEMOS "Enable all demos using Qt." TRUE)

if(WIN32)
  add_definitions(-DQT_DLL)
endif()

if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR} AND NOT OIV_DEV_BUILD)
  configure_file(${CMAKE_SOURCE_DIR}/cmake/RelativeProjectWindows.cmake.in  ${CMAKE_BINARY_DIR}/cmake/RelativeProjectWindows.cmake @ONLY)
endif()

include_directories(${OIV_INCLUDE_DIR})

add_subdirectory(Inventor)

if(OIV_ENABLE_QT_DEMOS AND NOT OIV_ENABLE_HEADLESS)
  add_subdirectory(IvTune)
endif()

if(NOT OIV_ENABLE_AVIZO_PREPACKED)
  add_subdirectory(Medical)
endif()
