# please see common.cmake for more documentation
###################################################################
# The values in this section must always be provided
###################################################################

# this is the cvs module name that should be checked out
SET (CTEST_MODULE_NAME kwsys)

# these are the the name of the source and binary directory on disk. 
# They will be appended to DASHBOARD_ROOT
SET (CTEST_SOURCE_NAME kwsys)
SET (CTEST_BINARY_NAME kwsysBin)

# which ctest command to use for running the dashboard
SET (CTEST_COMMAND 
  "\"${CTEST_EXECUTABLE_NAME}\" --version"
  "\"${CTEST_EXECUTABLE_NAME}\" -D Experimental -A \"${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}\""
  )

# what cmake command to use for configuring this dashboard
GET_FILENAME_COMPONENT(CTEST_EXECUTABLE_PATH "${CTEST_EXECUTABLE_NAME}" PATH)
SET(CTEST_CMAKE_COMMAND "\"${CTEST_EXECUTABLE_PATH}/cmake\"")

MESSAGE("CTest executable: ${CTEST_EXECUTABLE_NAME}")
MESSAGE("CMake executable: ${CTEST_CMAKE_COMMAND}")

CTEST_SLEEP(5)
CTEST_SLEEP(5 5 7)

####################################################################
# The values in this section are optional you can either
# have them or leave them commented out
####################################################################

# should ctest wipe the binary tree before running
SET (CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE)

# this is the initial cache to use for the binary tree, be careful to escape
# any quotes inside of this string if you use it
SET (CTEST_INITIAL_CACHE "
SITE:STRING=@SITE@
BUILDNAME:STRING=KWSys-@BUILDNAME@
CMAKE_GENERATOR:INTERNAL=@CMAKE_GENERATOR@
CMAKE_CXX_FLAGS:STRING=@CMAKE_CXX_FLAGS@
CMAKE_C_FLAGS:STRING=@CMAKE_C_FLAGS@
CMAKE_C_COMPILER:STRING=@CMAKE_C_COMPILER@
CMAKE_CXX_COMPILER:STRING=@CMAKE_CXX_COMPILER@
CMAKE_C_COMPILER_ARG1:STRING=@CMAKE_C_COMPILER_ARG1@
CMAKE_CXX_COMPILER_ARG1:STRING=@CMAKE_CXX_COMPILER_ARG1@
DART_ROOT:PATH=
MEMORYCHECK_COMMAND:STRING=@MEMORYCHECK_COMMAND@
MEMORYCHECK_SUPPRESSIONS_FILE:FILEPATH=@MEMORYCHECK_SUPPRESSIONS_FILE@
MEMORYCHECK_COMMAND_OPTIONS:STRING=@MEMORYCHECK_COMMAND_OPTIONS@
COVERAGE_COMMAND:FILEPATH=@COVERAGE_COMMAND@

# This one is needed for testing advanced ctest features
CTEST_TEST_KWSYS:BOOL=ON
")

# if you do not want to use the default location for a 
# dashboard then set this variable to the directory
# the dashboard should be in
SET (CTEST_DASHBOARD_ROOT "@CMAKE_CURRENT_BINARY_DIR@/Tests/CTestTest")


# set any extra envionment varibles here
SET (CTEST_ENVIRONMENT
)

SET (CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Source/kwsys")
SET (CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTest/${CTEST_BINARY_NAME}")
