STK_SUBPACKAGE(Integration_tests)

if(HAVE_STK_Trilinos)

  message("STK integration tests are not currently supported for Trilinos.")

else()

  FILE(GLOB SOURCES CONFIGURE_DEPENDS stk_mesh/*.cpp
                                      stk_io/*.cpp
                                      stk_mesh_doc/*.cpp
                                      stk_mesh/face_creation/skin_mesh/*.cpp
                                      stk_mesh/face_creation/user_created/*.cpp
                                      stk_mesh/face_creation/user_support/*.cpp
      )

  add_executable(stk_integration_tests ${SOURCES})
  target_link_libraries(stk_integration_tests stk_coupling)
  target_link_libraries(stk_integration_tests stk_transfer)
  target_link_libraries(stk_integration_tests stk_mesh_base)
  target_link_libraries(stk_integration_tests stk_io)
  target_link_libraries(stk_integration_tests stk_util_parallel)
  target_link_libraries(stk_integration_tests stk_unit_test_utils)
  target_link_libraries(stk_integration_tests stk_balance_lib)
  target_link_libraries(stk_integration_tests stk_unit_main)

  FILE(GLOB SEARCH_SOURCES CONFIGURE_DEPENDS stk_search/*.cpp)
  add_executable(stk_search_integration_tester ${SEARCH_SOURCES})
  target_link_libraries(stk_search_integration_tester stk_search)
  target_link_libraries(stk_search_integration_tester stk_unit_main)
  target_link_libraries(stk_search_integration_tester stk_math)
  target_link_libraries(stk_search_integration_tester stk_mesh_base)

  FILE(GLOB TRANSFER_SOURCES CONFIGURE_DEPENDS stk_transfer/*.cpp)
  add_executable(stk_transfer_integration_tests ${TRANSFER_SOURCES})
  target_link_libraries(stk_transfer_integration_tests stk_transfer)
  target_link_libraries(stk_transfer_integration_tests stk_mesh_base)
  target_link_libraries(stk_transfer_integration_tests stk_unit_main)

  if(STK_HAS_SEACAS_NEMESIS)
    FILE(GLOB BALANCE_SOURCES CONFIGURE_DEPENDS stk_balance/*.cpp test_utils/*.cpp)
    add_executable(stk_balance_integration_tester ${BALANCE_SOURCES})
    target_link_libraries(stk_balance_integration_tester stk_balance_lib)
    target_link_libraries(stk_balance_integration_tester stk_unit_main)
    target_link_libraries(stk_balance_integration_tester SEACASNemesis::nemesis)
    target_include_directories(stk_balance_integration_tester PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
  else()
    message("stk_balance_integration_tester not enabled since SEACASNemesis not enabled")
  endif()

  FILE(GLOB TOOLS_SOURCES CONFIGURE_DEPENDS stk_tools/*.cpp)
  add_executable(stk_tools_integration_tester ${TOOLS_SOURCES})
  target_link_libraries(stk_tools_integration_tester stk_tools_lib)
  target_link_libraries(stk_tools_integration_tester stk_unit_main)

  FILE(GLOB MIDDLE_MESH_SOURCES CONFIGURE_DEPENDS stk_middle_mesh/*.cpp)
  add_executable(stk_middle_mesh_integration_tester ${MIDDLE_MESH_SOURCES})
  target_link_libraries(stk_middle_mesh_integration_tester stk_middle_mesh)
  target_link_libraries(stk_middle_mesh_integration_tester stk_middle_mesh_util)
  target_link_libraries(stk_middle_mesh_integration_tester stk_middle_mesh_test_util)
  target_link_libraries(stk_middle_mesh_integration_tester stk_unit_main)
  target_link_libraries(stk_middle_mesh_integration_tester stk_unit_test_utils)
  target_include_directories(stk_middle_mesh_integration_tester PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../stk_unit_tests/stk_middle_mesh)
  target_include_directories(stk_middle_mesh_integration_tester PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../stk_middle_mesh_util/stk_middle_mesh_util)

  if (STK_HAS_MPI)
    FILE(GLOB UTIL_SOURCES CONFIGURE_DEPENDS stk_util/*.cpp)
    add_executable(stk_util_integration_tester ${UTIL_SOURCES})
    target_link_libraries(stk_util_integration_tester stk_util_parallel)
    target_link_libraries(stk_util_integration_tester stk_unit_main)

    add_executable(mock_sparc mock_apps/mock_sparc.cpp)
    target_link_libraries(mock_sparc stk_coupling)
    target_link_libraries(mock_sparc stk_transfer)
    target_link_libraries(mock_sparc stk_mesh_base)
    target_link_libraries(mock_sparc stk_io)
    target_link_libraries(mock_sparc stk_util_parallel)
    target_link_libraries(mock_sparc stk_util_registry)
    target_link_libraries(mock_sparc stk_util_command_line)
  
    add_executable(mock_aria mock_apps/mock_aria.cpp)
    target_link_libraries(mock_aria stk_coupling)
    target_link_libraries(mock_aria stk_transfer)
    target_link_libraries(mock_aria stk_mesh_base)
    target_link_libraries(mock_aria stk_io)
    target_link_libraries(mock_aria stk_util_parallel)
    target_link_libraries(mock_aria stk_util_registry)
    target_link_libraries(mock_aria stk_util_command_line)
  
    add_executable(mock_salinas mock_apps/mock_salinas.cpp)
    target_link_libraries(mock_salinas stk_coupling)
    target_link_libraries(mock_salinas stk_transfer)
    target_link_libraries(mock_salinas stk_mesh_base)
    target_link_libraries(mock_salinas stk_io)
    target_link_libraries(mock_salinas stk_util_parallel)
    target_link_libraries(mock_salinas stk_util_registry)
    target_link_libraries(mock_salinas stk_util_command_line)
  
    add_executable(mock_fuego mock_apps/mock_fuego.cpp)
    target_link_libraries(mock_fuego stk_coupling)
    target_link_libraries(mock_fuego stk_transfer)
    target_link_libraries(mock_fuego stk_mesh_base)
    target_link_libraries(mock_fuego stk_io)
    target_link_libraries(mock_fuego stk_util_parallel)
    target_link_libraries(mock_fuego stk_util_registry)
    target_link_libraries(mock_fuego stk_util_command_line)
  
    add_executable(mock_conservative_transfer_mpmd mock_apps/mock_conservative_transfer_mpmd.cpp)
    target_link_libraries(mock_conservative_transfer_mpmd stk_middle_mesh)  
    target_link_libraries(mock_conservative_transfer_mpmd stk_transfer)  
    target_link_libraries(mock_conservative_transfer_mpmd stk_middle_mesh_util)  
    target_link_libraries(mock_conservative_transfer_mpmd stk_unit_test_utils)  
    target_link_libraries(mock_conservative_transfer_mpmd stk_util_command_line)  
  
    add_executable(mock_conservative_transfer_spmd mock_apps/mock_conservative_transfer_spmd.cpp)
    target_link_libraries(mock_conservative_transfer_spmd stk_middle_mesh)  
    target_link_libraries(mock_conservative_transfer_spmd stk_middle_mesh_util)  
    target_link_libraries(mock_conservative_transfer_spmd stk_search)  
    target_link_libraries(mock_conservative_transfer_spmd stk_transfer)  
    target_link_libraries(mock_conservative_transfer_spmd stk_util_command_line)  
    target_link_libraries(mock_conservative_transfer_spmd stk_unit_test_utils)  
  
    add_executable(mock_nonconservative_transfer_spmd mock_apps/mock_nonconservative_transfer_spmd.cpp)
    target_link_libraries(mock_nonconservative_transfer_spmd stk_middle_mesh)  
    target_link_libraries(mock_nonconservative_transfer_spmd stk_middle_mesh_util)  
    target_link_libraries(mock_nonconservative_transfer_spmd stk_search)  
    target_link_libraries(mock_nonconservative_transfer_spmd stk_util_command_line) 
  else()
    message("coupling mock apps not enabled since MPI not enabled")
  endif()

  
  INSTALL(TARGETS stk_integration_tests DESTINATION ${STK_INSTALL_BINDIR}) 
  INSTALL(TARGETS stk_search_integration_tester DESTINATION ${STK_INSTALL_BINDIR}) 
  INSTALL(TARGETS stk_transfer_integration_tests DESTINATION ${STK_INSTALL_BINDIR}) 
  if (TARGET stk_balance_integration_tester)
    INSTALL(TARGETS stk_balance_integration_tester DESTINATION ${STK_INSTALL_BINDIR}) 
  endif()
  INSTALL(TARGETS stk_tools_integration_tester DESTINATION ${STK_INSTALL_BINDIR}) 
  INSTALL(TARGETS stk_middle_mesh_integration_tester DESTINATION ${STK_INSTALL_BINDIR}) 
  if (STK_HAS_MPI)
    INSTALL(TARGETS mock_sparc DESTINATION ${STK_INSTALL_BINDIR}) 
    INSTALL(TARGETS mock_aria DESTINATION ${STK_INSTALL_BINDIR}) 
    INSTALL(TARGETS mock_salinas DESTINATION ${STK_INSTALL_BINDIR}) 
    INSTALL(TARGETS mock_fuego DESTINATION ${STK_INSTALL_BINDIR}) 
    INSTALL(TARGETS mock_conservative_transfer_mpmd DESTINATION ${STK_INSTALL_BINDIR}) 
    INSTALL(TARGETS mock_conservative_transfer_spmd DESTINATION ${STK_INSTALL_BINDIR}) 
    INSTALL(TARGETS mock_nonconservative_transfer_spmd DESTINATION ${STK_INSTALL_BINDIR}) 
  endif()

endif()

STK_SUBPACKAGE_POSTPROCESS()
