diff options
Diffstat (limited to 'Tests/Contracts')
-rw-r--r-- | Tests/Contracts/Home.cmake | 19 | ||||
-rw-r--r-- | Tests/Contracts/PLplot/CMakeLists.txt | 18 | ||||
-rw-r--r-- | Tests/Contracts/PLplot/Configure.cmake | 4 | ||||
-rw-r--r-- | Tests/Contracts/Trilinos/CMakeLists.txt | 86 | ||||
-rw-r--r-- | Tests/Contracts/Trilinos/Configure.cmake | 7 | ||||
-rw-r--r-- | Tests/Contracts/Trilinos/Dashboard.cmake.in | 63 | ||||
-rw-r--r-- | Tests/Contracts/Trilinos/Patch.cmake | 38 | ||||
-rw-r--r-- | Tests/Contracts/Trilinos/ValidateBuild.cmake.in | 39 | ||||
-rw-r--r-- | Tests/Contracts/VTK/CMakeLists.txt | 30 | ||||
-rw-r--r-- | Tests/Contracts/VTK/Configure.cmake | 3 | ||||
-rw-r--r-- | Tests/Contracts/VTK/Dashboard.cmake.in | 37 |
11 files changed, 344 insertions, 0 deletions
diff --git a/Tests/Contracts/Home.cmake b/Tests/Contracts/Home.cmake new file mode 100644 index 0000000..8b05e81 --- /dev/null +++ b/Tests/Contracts/Home.cmake @@ -0,0 +1,19 @@ +# Find a home in which to build. +if(NOT DEFINED HOME) + if(DEFINED ENV{CTEST_REAL_HOME}) + set(HOME "$ENV{CTEST_REAL_HOME}") + else() + set(HOME "$ENV{HOME}") + endif() + + if(NOT HOME AND WIN32) + # Try for USERPROFILE as HOME equivalent: + string(REPLACE "\\" "/" HOME "$ENV{USERPROFILE}") + + # But just use root of SystemDrive if USERPROFILE contains any spaces: + # (Default on XP and earlier...) + if(HOME MATCHES " ") + string(REPLACE "\\" "/" HOME "$ENV{SystemDrive}") + endif() + endif() +endif() diff --git a/Tests/Contracts/PLplot/CMakeLists.txt b/Tests/Contracts/PLplot/CMakeLists.txt new file mode 100644 index 0000000..8e95ba3 --- /dev/null +++ b/Tests/Contracts/PLplot/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.9) +project(PLplotDriver NONE) +include(ExternalProject) +include(${CMAKE_CURRENT_SOURCE_DIR}/../Home.cmake) +set(PLplot_PREFIX "${HOME}/.cmake/Contracts/PLplot") +file(REMOVE_RECURSE "${PLplot_PREFIX}") +separate_arguments(PLplot_CMAKE_ARGS UNIX_COMMAND "${PLplot_CMAKE_FLAGS}") +if(NOT PLplot_GIT_TAG) + set(PLplot_GIT_TAG "plplot-5.13.0") +endif() +ExternalProject_Add(PLplot + GIT_REPOSITORY "https://git.code.sf.net/p/plplot/plplot" + GIT_TAG "${PLplot_GIT_TAG}" + PREFIX "${PLplot_PREFIX}" + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> + ${PLplot_CMAKE_ARGS} + ) diff --git a/Tests/Contracts/PLplot/Configure.cmake b/Tests/Contracts/PLplot/Configure.cmake new file mode 100644 index 0000000..83591d4 --- /dev/null +++ b/Tests/Contracts/PLplot/Configure.cmake @@ -0,0 +1,4 @@ +set(Contracts.PLplot_BUILD_OPTIONS + -DPLplot_CMAKE_FLAGS=${CMake_TEST_CONTRACT_PLplot_CMAKE_FLAGS} + -DPLplot_GIT_TAG=${CMake_TEST_CONTRACT_PLplot_GIT_TAG} + ) diff --git a/Tests/Contracts/Trilinos/CMakeLists.txt b/Tests/Contracts/Trilinos/CMakeLists.txt new file mode 100644 index 0000000..6cc2d09 --- /dev/null +++ b/Tests/Contracts/Trilinos/CMakeLists.txt @@ -0,0 +1,86 @@ +cmake_minimum_required(VERSION 2.8.12) +project(Trilinos) + +include(ExternalProject) + +include("${CMAKE_CURRENT_SOURCE_DIR}/LocalOverrides.cmake" OPTIONAL) +include("${CMAKE_CURRENT_BINARY_DIR}/LocalOverrides.cmake" OPTIONAL) + +include(${CMAKE_CURRENT_SOURCE_DIR}/../Home.cmake) +message(STATUS "HOME='${HOME}'") + +if(NOT DEFINED url) + set(url "https://cmake.org/files/contracts/trilinos-11.4.1.tar.gz") +endif() +message(STATUS "url='${url}'") + +if(NOT DEFINED md5) + set(md5 "28b6a3c7c0fb317b3a237997293faa8b") +endif() +message(STATUS "md5='${md5}'") + +string(SUBSTRING "${md5}" 0 8 shorttag) +set(shorttag "m${shorttag}") + +set(download_dir "${HOME}/.cmake/Downloads") + +set(base_dir "${HOME}/.cmake/Contracts/${PROJECT_NAME}/${shorttag}") +set(binary_dir "${base_dir}/build") +set(script_dir "${base_dir}") +set(source_dir "${base_dir}/src") + +if(NOT DEFINED BUILDNAME) + set(BUILDNAME "CMakeContract-${shorttag}") +endif() +message(STATUS "BUILDNAME='${BUILDNAME}'") + +if(NOT DEFINED SITE) + site_name(SITE) +endif() +message(STATUS "SITE='${SITE}'") + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/Dashboard.cmake.in" + "${script_dir}/Dashboard.cmake" + @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/ValidateBuild.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/ValidateBuild.cmake" + @ONLY) + +# Source dir for this project exists outside the CMake build tree because it +# is absolutely huge. Source dir is therefore cached under a '.cmake/Contracts' +# dir in your HOME directory. Downloads are cached under '.cmake/Downloads' +# +if(EXISTS "${source_dir}/cmake/ctest/TrilinosCTestDriverCore.cmake") + # If it exists already, download is a complete no-op: + ExternalProject_Add(download-${PROJECT_NAME} + DOWNLOAD_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + ) +else() + # If it does not yet exist, download pulls the tarball from the web (or + # no-ops if it already exists with the given md5 sum): + # + ExternalProject_Add(download-${PROJECT_NAME} + DOWNLOAD_DIR "${download_dir}" + URL "${url}" + URL_MD5 "${md5}" + SOURCE_DIR "${source_dir}" + PATCH_COMMAND ${CMAKE_COMMAND} -Dsource_dir=${source_dir} -P "${CMAKE_CURRENT_SOURCE_DIR}/Patch.cmake" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + ) +endif() + +ExternalProject_Add(build-${PROJECT_NAME} + DOWNLOAD_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND ${CMAKE_COMMAND} -P "${script_dir}/Dashboard.cmake" + INSTALL_COMMAND "" + DEPENDS download-${PROJECT_NAME} + ) diff --git a/Tests/Contracts/Trilinos/Configure.cmake b/Tests/Contracts/Trilinos/Configure.cmake new file mode 100644 index 0000000..d62eb79 --- /dev/null +++ b/Tests/Contracts/Trilinos/Configure.cmake @@ -0,0 +1,7 @@ +# ValidateBuild.cmake is configured into this location when the test is built: +set(dir "${CMAKE_CURRENT_BINARY_DIR}/Contracts/${project}") + +set(exe "${CMAKE_COMMAND}") +set(args -P "${dir}/ValidateBuild.cmake") + +set(CMake_TEST_CONTRACT_Trilinos_RUN_TEST ${exe} ${args}) diff --git a/Tests/Contracts/Trilinos/Dashboard.cmake.in b/Tests/Contracts/Trilinos/Dashboard.cmake.in new file mode 100644 index 0000000..93d4f61 --- /dev/null +++ b/Tests/Contracts/Trilinos/Dashboard.cmake.in @@ -0,0 +1,63 @@ +# This "cmake -P" script may be configured to drive a dashboard on any machine. +# +set(CTEST_BINARY_DIRECTORY "@binary_dir@") +set(CTEST_BUILD_NAME "@BUILDNAME@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@") +set(CTEST_SITE "@SITE@") +set(CTEST_SOURCE_DIRECTORY "@source_dir@") + +# Set the environment: +# +set(ENV{CTEST_BUILD_NAME} "${CTEST_BUILD_NAME}") +set(ENV{CTEST_CMAKE_GENERATOR} "${CTEST_CMAKE_GENERATOR}") +set(ENV{CTEST_SITE} "${CTEST_SITE}") + +# Allow override of the environment on a per-client basis: +# +set(ENV_SCRIPT "$ENV{CMAKE_CONTRACT_Trilinos_ENV_SCRIPT}") +if(ENV_SCRIPT AND EXISTS "${ENV_SCRIPT}") + include("${ENV_SCRIPT}") +endif() + +# Empty build dir to start with: +# +message("Cleaning binary dir '${CTEST_BINARY_DIRECTORY}'") +file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}") + +# Generate 'do-configure' script: +# +file(WRITE "${CTEST_BINARY_DIRECTORY}/do-configure" " +\"${CMAKE_COMMAND}\" -G \"${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\" +") + +# Make the 'do-configure' script executable and execute it: +# +if(WIN32) + configure_file( + "${CTEST_BINARY_DIRECTORY}/do-configure" + "${CTEST_BINARY_DIRECTORY}/do-configure.cmd" + COPYONLY) + execute_process(COMMAND "${CTEST_BINARY_DIRECTORY}/do-configure.cmd" + WORKING_DIRECTORY "${CTEST_BINARY_DIRECTORY}") +else() + execute_process(COMMAND chmod +x "${CTEST_BINARY_DIRECTORY}/do-configure") + execute_process(COMMAND "${CTEST_BINARY_DIRECTORY}/do-configure" + WORKING_DIRECTORY "${CTEST_BINARY_DIRECTORY}") +endif() + +# Run an experimental Trilinos dashboard: +# +execute_process(COMMAND + "${CMAKE_CTEST_COMMAND}" + -S "${CTEST_SOURCE_DIRECTORY}/cmake/tribits/ctest/experimental_build_test.cmake" + -VV + WORKING_DIRECTORY "${CTEST_BINARY_DIRECTORY}" + RESULT_VARIABLE rv + ) + +if(NOT "${rv}" STREQUAL "0") + message("error(s) (or warnings or test failures) running Trilinos dashboard +script experimental_build_test.cmake... +ctest returned rv='${rv}' +") +endif() diff --git a/Tests/Contracts/Trilinos/Patch.cmake b/Tests/Contracts/Trilinos/Patch.cmake new file mode 100644 index 0000000..6c619ac --- /dev/null +++ b/Tests/Contracts/Trilinos/Patch.cmake @@ -0,0 +1,38 @@ +if(NOT DEFINED source_dir) + message(FATAL_ERROR "variable 'source_dir' not defined") +endif() + + +if(NOT EXISTS "${source_dir}/CMakeLists.txt") + message(FATAL_ERROR "error: No CMakeLists.txt file to patch!") +endif() + +set(text " + +# +# Reference variables typically given as experimental_build_test configure +# options to avoid CMake warnings about unused variables +# + +message(\"Trilinos_ALLOW_NO_PACKAGES='\${Trilinos_ALLOW_NO_PACKAGES}'\") +message(\"Trilinos_WARNINGS_AS_ERRORS_FLAGS='\${Trilinos_WARNINGS_AS_ERRORS_FLAGS}'\") +") + +file(APPEND "${source_dir}/CMakeLists.txt" "${text}") + + +if(NOT EXISTS "${source_dir}/CTestConfig.cmake") + message(FATAL_ERROR "error: No CTestConfig.cmake file to patch!") +endif() + +set(text " + +# +# Use newer than 10.6.1 CTestConfig settings from the Trilinos project. +# Send the Trilinos dashboards to the new Trilinos CDash server instance. +# +set(CTEST_NIGHTLY_START_TIME \"04:00:00 UTC\") # 10 PM MDT or 9 PM MST +set(CTEST_DROP_SITE \"testing.sandia.gov\") +") + +file(APPEND "${source_dir}/CTestConfig.cmake" "${text}") diff --git a/Tests/Contracts/Trilinos/ValidateBuild.cmake.in b/Tests/Contracts/Trilinos/ValidateBuild.cmake.in new file mode 100644 index 0000000..fa38ada --- /dev/null +++ b/Tests/Contracts/Trilinos/ValidateBuild.cmake.in @@ -0,0 +1,39 @@ +# +# This code validates that the Trilinos build was "successful enough" (since it +# is difficult to detect this from the caller of the experimental_build_test +# dashboard script...) +# +set(binary_dir "@binary_dir@") +message("binary_dir='${binary_dir}'") + + +# Count *.exe files: +# +file(GLOB_RECURSE exes "${binary_dir}/*.exe") +message(STATUS "exes='${exes}'") +list(LENGTH exes len) +if(len LESS 47) + message(FATAL_ERROR "len='${len}' is less than minimum expected='47' (count of executables)") +endif() +message(STATUS "Found len='${len}' *.exe files") + + +# Try to find the Teuchos unit tests executable: +# +file(GLOB_RECURSE exe "${binary_dir}/TeuchosCore_UnitTest_UnitTests.exe") +list(LENGTH exe len) +if(NOT len EQUAL 1) + message(FATAL_ERROR "len='${len}' is not the expected='1' (count of TeuchosCore_UnitTest_UnitTests.exe)") +endif() +message(STATUS "Found exe='${exe}'") + + +# Try to run it: +execute_process(COMMAND ${exe} RESULT_VARIABLE rv) +if(NOT "${rv}" STREQUAL "0") + message(FATAL_ERROR "rv='${rv}' is not the expected='0' (result of running TeuchosCore_UnitTest_UnitTests.exe)") +endif() +message(STATUS "Ran exe='${exe}' rv='${rv}'") + + +message(STATUS "All Trilinos build validation tests pass.") diff --git a/Tests/Contracts/VTK/CMakeLists.txt b/Tests/Contracts/VTK/CMakeLists.txt new file mode 100644 index 0000000..0d36323 --- /dev/null +++ b/Tests/Contracts/VTK/CMakeLists.txt @@ -0,0 +1,30 @@ +# The VTK external project for CMake +# --------------------------------------------------------------------------- +cmake_minimum_required(VERSION 2.8.12) +project(VTK) +include(ExternalProject) + +# find "HOME". VTK will be downloaded & built within a subdirectory. +include(${CMAKE_CURRENT_SOURCE_DIR}/../Home.cmake) + +set(base_dir "${HOME}/.cmake/Contracts/VTK") + +if(NOT DEFINED SITE) + site_name(SITE) +endif() + +# configure our dashboard script +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/Dashboard.cmake.in + ${base_dir}/Dashboard.cmake + @ONLY) + +# build & test VTK's release branch +ExternalProject_Add(${PROJECT_NAME} + GIT_REPOSITORY "https://gitlab.kitware.com/vtk/vtk.git" + GIT_TAG "release" + PREFIX ${base_dir} + CONFIGURE_COMMAND "" + BUILD_COMMAND ${CMAKE_CTEST_COMMAND} -S "${base_dir}/Dashboard.cmake" + INSTALL_COMMAND "" +) diff --git a/Tests/Contracts/VTK/Configure.cmake b/Tests/Contracts/VTK/Configure.cmake new file mode 100644 index 0000000..037d75a --- /dev/null +++ b/Tests/Contracts/VTK/Configure.cmake @@ -0,0 +1,3 @@ +set(exe "$ENV{HOME}/.cmake/Contracts/VTK/VTK-build/bin/vtkCommonCoreCxxTests") +set(args otherArrays) +set(CMake_TEST_CONTRACT_VTK_RUN_TEST ${exe} ${args}) diff --git a/Tests/Contracts/VTK/Dashboard.cmake.in b/Tests/Contracts/VTK/Dashboard.cmake.in new file mode 100644 index 0000000..ae760bc --- /dev/null +++ b/Tests/Contracts/VTK/Dashboard.cmake.in @@ -0,0 +1,37 @@ +# 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" " + VTK_BUILD_EXAMPLES:BOOL=ON + VTK_BUILD_TESTING:STRING=WANT + 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}") |