# This submission's role is to test leading edge of cmake development
# against VTK release
#
# Maintainer: Zack Galbreath <zack.galbreath@kitware.com>
#
# This file was generated as part of the CMake/VTK Contracts test.
# See <CMake-src>/Tests/Contracts/VTK/ for more information

set(CTEST_SITE "@SITE@")
set(CTEST_BUILD_NAME "Contracts.VTK")
set(CTEST_DASHBOARD_ROOT "@base_dir@")
set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/src/VTK")
set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/VTK-build")

set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@")
set(CTEST_CONFIGURATION_TYPE Debug)
set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}")

# Assume a Linux build, with a make that supports -j9. Modify this script if
# assumption is ever invalid.
#
set(CTEST_BUILD_COMMAND "@CMAKE_MAKE_PROGRAM@ -j9 -i")

ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})

file(WRITE "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt" "
  BUILD_EXAMPLES:BOOL=ON
  BUILD_TESTING:BOOL=ON
  VTK_WRAP_PYTHON:BOOL=ON
  ExternalData_OBJECT_STORES:FILEPATH=@base_dir@/ExternalData
")

ctest_start(Nightly)
ctest_configure(BUILD "${CTEST_BINARY_DIRECTORY}")
ctest_build(BUILD "${CTEST_BINARY_DIRECTORY}")
ctest_test(BUILD "${CTEST_BINARY_DIRECTORY}" INCLUDE "PythonSmoke")
ctest_submit(BUILD "${CTEST_BINARY_DIRECTORY}")
