cmake_minimum_required(VERSION 3.8)
project(AsyncParaViewExamples)

if (AsyncParaView_BINARY_DIR)
  set(async_paraview_catalyst_directory "")
  if (TARGET AsyncParaView::catalyst-async_paraview)
    get_property(async_paraview_catalyst_directory GLOBAL
      PROPERTY async_paraview_catalyst_directory)
  endif ()

  function (add_example dir)
    cmake_parse_arguments(arg "" "TEST_TIMEOUT" "" ${ARGN})
    if (arg_UNPARSED_ARGUMENTS)
      message(FATAL_ERROR "Unknown arguments passed to 'add_example': ${arg_UNPARSED_ARGUMENTS}")
    endif()

    add_test(
      NAME    "AsyncParaViewExample-${dir}"
      COMMAND "${CMAKE_COMMAND}"
              "-Dconfig=$<CONFIGURATION>"
              "-Dgenerator=${CMAKE_GENERATOR}"
              "-Dsource=${CMAKE_CURRENT_SOURCE_DIR}"
              "-Dbinary=${CMAKE_CURRENT_BINARY_DIR}"
              "-Dexample_dir=${dir}"
              "-Dbuild_type=${CMAKE_BUILD_TYPE}"
              "-Dshared=${BUILD_SHARED_LIBS}"
              "-Dasync_paraview_dir=${async_paraview_cmake_build_dir}"
              "-Dctest=${CMAKE_CTEST_COMMAND}"
              "-Dplatform=${CMAKE_GENERATOR_PLATFORM}"
              "-Dtoolset=${CMAKE_GENERATOR_TOOLSET}"
              "-Dasync_paraview_binary_dir=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
              "-Dcatalyst_DIR=${catalyst_DIR}"
              "-Dasync_paraview_catalyst_dir=${AsyncParaView_BINARY_DIR}/${async_paraview_catalyst_directory}"
              -P "${CMAKE_CURRENT_LIST_DIR}/RunExample.cmake")
    set_property(TEST "AsyncParaViewExample-${dir}" APPEND
      PROPERTY
        SKIP_REGULAR_EXPRESSION "Skipping example")

    if (arg_TEST_TIMEOUT)
      # override timeout, if specified.
      set_property(TEST "AsyncParaViewExample-${dir}"
        PROPERTY
          TIMEOUT "${arg_TEST_TIMEOUT}")
    endif()
  endfunction ()
else ()
  if (NOT BUILD_SHARED_LIBS)
    set(CMAKE_JOB_POOL_LINK static_exe_link)
    set_property(GLOBAL APPEND PROPERTY
      JOB_POOLS "${CMAKE_JOB_POOL_LINK}=1")
  endif ()

  find_package(AsyncParaView REQUIRED)
  include(CTest)
  enable_testing()

  macro (add_example dir)
    add_subdirectory("${dir}")
  endmacro ()
endif ()

if (TARGET VTK::IOCatalystConduit)
  add_example(Catalyst2/CxxFullExample)
endif ()

add_custom_target(async_paraview-examples
  COMMAND
    "${CMAKE_CTEST_COMMAND}"
    --test-dir "${CMAKE_BINARY_DIR}"
    --tests-regex "AsyncParaViewExample-"
    --extra-verbose
    -C "$<CONFIGURATION>"
  USES_TERMINAL
  COMMENT "Running AsyncParaView Examples")
