# Ensure that these cmake boolean variables are defined
ASSERT_DEFINED(${PACKAGE_NAME}_ENABLE_Belos ${PACKAGE_NAME}_ENABLE_Zoltan2Core)

#
# Executable
#

#TODO: how to remove that?
TRIBITS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
TRIBITS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../src)
TRIBITS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../src/Transfers)
TRIBITS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../src/Smoothers)
TRIBITS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../gallery)
TRIBITS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../unit_tests)

TRIBITS_ADD_EXECUTABLE(
  ParameterListInterpreter
  SOURCES ParameterListInterpreter.cpp ../unit_tests/MueLu_TestHelpers.cpp
  COMM serial mpi
)

TRIBITS_ADD_EXECUTABLE(
  CreateOperator
  SOURCES CreateOperator.cpp ../unit_tests/MueLu_TestHelpers.cpp
  COMM serial mpi
)

#
# Tests
#

# Run the ParameterListInterpreter test with a single thread to avoid non-deterministic behavior
SET(${PACKAGE_NAME}_PARAMETERLISTINTERPRETERTEST_SINGLETHREAD " --kokkos-num-threads=1")

# Test that demangling is enabled, otherwise the test would fail even is they are logically correct.
# NOTE:
# A the moment, the test environment for Trilinos on software is set incorrectly, and
# results in not setting the value correctly.
IF((HAVE_GCC_ABI_DEMANGLE STREQUAL "1") OR (HAVE_GCC_ABI_DEMANGLE STREQUAL "ON"))

  STRING(CONCAT TEST_ARGS "--linAlgebra=Tpetra" "${${PACKAGE_NAME}_PARAMETERLISTINTERPRETERTEST_SINGLETHREAD}")

  TRIBITS_ADD_TEST(
    CreateOperator
    NAME "CreateOperatorTpetra"
    ARGS ${TEST_ARGS}
    STANDARD_PASS_OUTPUT
    NUM_MPI_PROCS 1
    COMM mpi serial
  )
  TRIBITS_ADD_TEST(
    CreateOperator
    NAME "CreateOperatorTpetra"
    ARGS ${TEST_ARGS}
    STANDARD_PASS_OUTPUT
    NUM_MPI_PROCS 4
    COMM mpi
  )

  IF(${PACKAGE_NAME}_ENABLE_Zoltan2Core)

    TRIBITS_ADD_TEST(
      ParameterListInterpreter
      NAME "ParameterListInterpreterTpetra"
      ARGS ${TEST_ARGS}
      STANDARD_PASS_OUTPUT
      NUM_MPI_PROCS 1
      COMM mpi serial
    )
    TRIBITS_ADD_TEST(
      ParameterListInterpreter
      NAME "ParameterListInterpreterTpetra"
      ARGS ${TEST_ARGS}
      STANDARD_PASS_OUTPUT
      NUM_MPI_PROCS 4
      COMM mpi
    )

    STRING(CONCAT TEST_ARGS "--linAlgebra=Tpetra --heavytests" "${${PACKAGE_NAME}_PARAMETERLISTINTERPRETERTEST_SINGLETHREAD}")

    # This test only runs on the dashboard, not at checkin.
    TRIBITS_ADD_TEST(
      ParameterListInterpreter
      NAME "ParameterListInterpreterTpetraHeavy"
      ARGS ${TEST_ARGS}
      STANDARD_PASS_OUTPUT
      NUM_MPI_PROCS 1
      COMM mpi serial
      CATEGORIES CONTINUOUS
    )

    # This test only runs on the dashboard, not at checkin.
    TRIBITS_ADD_TEST(
      ParameterListInterpreter
      NAME "ParameterListInterpreterTpetraHeavy"
      ARGS ${TEST_ARGS}
      STANDARD_PASS_OUTPUT
      NUM_MPI_PROCS 4
      COMM mpi
      CATEGORIES CONTINUOUS
    )

  ENDIF()

ENDIF()

# Select appropriate set of input and gold files, add make target for rebase.
FILE(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/default)
ADD_SUBDIRECTORY(default)

FILE(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/kokkos)
ADD_SUBDIRECTORY(kokkos)

TRIBITS_COPY_FILES_TO_BINARY_DIR(rebase_cp SOURCE_FILES rebase.sh)

ADD_CUSTOM_TARGET(rebase COMMAND ./rebase.sh "${CMAKE_CURRENT_SOURCE_DIR}")
