cmake_minimum_required(VERSION 3.8.2)

#-----------------------------------------------------------------------------
# Plugin name and version

project(truchas-extensions VERSION 1.0)

#-----------------------------------------------------------------------------
# Plugin options
option(BUILD_SHARED_LIBS "Build Truchas Extensions using shared libraries" ON)
option(ENABLE_TESTING "Enable Testing" OFF)
option(BUILD_EXAMPLES "Build example applications" ON)

# Pybind11 settings
set(PYBIND11_FLAGS "")
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
    CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
    CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  string(APPEND PYBIND11_FLAGS " -Wno-shadow")
endif()

# Set the directory where the binaries will be stored
include(GNUInstallDirs)
set(EXECUTABLE_OUTPUT_PATH         ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")

# Add our Cmake directory to the module search path
list(APPEND CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMake)

# include(CMakeDependentOption)

#-----------------------------------------------------------------------------
# Find packages for the plugin
find_package(smtk REQUIRED)
find_package(ParaView QUIET)
find_package(Qt5 REQUIRED COMPONENTS Core Svg Widgets)
find_package(Boost ${SMTK_MINIMUM_BOOST_VERSION} REQUIRED)

# Add optional path for installing simulation-workflow files.
# This would typically be set by superbuild.
set(SIMULATION_WORKFLOWS_ROOT "share/workflows" CACHE PATH
  "Install directory for simulation-workflow files")

#-----------------------------------------------------------------------------
# Plugin tests

if (ENABLE_TESTING)
  enable_testing()
  include(TestingMacros)
  add_subdirectory(test)
endif()

#-----------------------------------------------------------------------------
# Plugin sources

# Include the plugin's source directory
add_subdirectory(smtk)

# #-----------------------------------------------------------------------------
# # Plugin configuration
if (SMTK_ENABLE_PARAVIEW_SUPPORT)
  set(plugin_files
    smtk/simulation/truchas/plugin/paraview.plugin
  )

  paraview_plugin_scan(
    PLUGIN_FILES ${plugin_files}
    PROVIDES_PLUGINS paraview_plugins
    ENABLE_BY_DEFAULT ON
    HIDE_PLUGINS_FROM_CACHE ON)

  set(autoload_args AUTOLOAD)

  option(ENABLE_PLUGIN_BY_DEFAULT "Automatically enable the plugin in CMB modelbuilder" OFF)
  if (ENABLE_PLUGIN_BY_DEFAULT)
    list(APPEND autoload_args ${paraview_plugins})
  endif ()

  string(REPLACE "-" "_" safe_project_name "${PROJECT_NAME}")

  paraview_plugin_build(
    LIBRARY_SUBDIRECTORY "smtk-${smtk_VERSION}"
    PLUGINS ${paraview_plugins}
    PLUGINS_FILE_NAME "smtk.truchas.xml"
    ${autoload_args}
    INSTALL_EXPORT ${PROJECT_NAME}-plugin
    HEADERS_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${PROJECT_VERSION}"
    CMAKE_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
    ADD_INSTALL_RPATHS ON
    TARGET ${safe_project_name}_paraview_plugins)
endif ()

include(CMakePackageConfigHelpers)

# Our requirements for a version file are basic, so we use CMake's basic version
# file generator
write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake"
  VERSION ${${PROJECT_NAME}_VERSION}
  COMPATIBILITY AnyNewerVersion
)

# Export the targets generated by the plugin
export(EXPORT ${PROJECT_NAME}
  FILE "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}/${PROJECT_NAME}-targets.cmake"
)
install(
  EXPORT      ${PROJECT_NAME}
  DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
  FILE        "${PROJECT_NAME}-targets.cmake")

configure_file(
  "${CMAKE_CURRENT_SOURCE_DIR}/CMake/smtk-plugin-config.cmake.in"
  "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}/${PROJECT_NAME}-config.cmake"
  @ONLY)
install(
  FILES       "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}/${PROJECT_NAME}-config.cmake"
  DESTINATION "${CMAKE_INSTALL_CMAKEDIR}")

# Install workflow files
install(
  DIRECTORY "${CMAKE_SOURCE_DIR}/simulation-workflows/"
  DESTINATION "${SIMULATION_WORKFLOWS_ROOT}/Truchas"
)
