mirror of
https://github.com/reactos/CMake.git
synced 2025-01-22 19:44:50 +00:00
Merge topic 'add-cse-contract-test'
f6f3ae5 Update tag in the Contracts/cse-snapshot test. 1e4fd5f Enable overriding contract test timeout values. c81ad34 Add a contract test for building the CSE. 942ace8 Fix contract test so it is not hard coded to the vtk542 test. fd343a1 Add a "Contract" test for VTK. The test downloads and builds VTK.
This commit is contained in:
commit
385b681138
@ -11,7 +11,7 @@ MACRO(ADD_TEST_MACRO NAME COMMAND)
|
||||
--build-generator ${CMAKE_TEST_GENERATOR}
|
||||
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
|
||||
--build-project ${proj}
|
||||
--test-command ${COMMAND})
|
||||
--test-command ${COMMAND} ${ARGN})
|
||||
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
|
||||
ENDMACRO(ADD_TEST_MACRO)
|
||||
|
||||
@ -21,7 +21,11 @@ IF(DEFINED ENV{HOME} AND NOT CTEST_NO_TEST_HOME)
|
||||
FILE(MAKE_DIRECTORY "${TEST_HOME}")
|
||||
FILE(WRITE "${TEST_HOME}/.cvspass" ":pserver:anoncvs@www.cmake.org:/cvsroot/KWSys A\n")
|
||||
SET(TEST_HOME_ENV_CODE "# Fake a user home directory to avoid polluting the real one.
|
||||
SET(ENV{HOME} \"${TEST_HOME}\")")
|
||||
# But provide original ENV{HOME} value in ENV{CTEST_REAL_HOME} for tests that
|
||||
# need access to the real HOME directory.
|
||||
SET(ENV{CTEST_REAL_HOME} \"\$ENV{HOME}\")
|
||||
SET(ENV{HOME} \"${TEST_HOME}\")
|
||||
")
|
||||
ENDIF()
|
||||
|
||||
# Choose a default configuration for CTest tests.
|
||||
@ -1768,6 +1772,32 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||
-D source_dir:STRING=${CMAKE_CURRENT_SOURCE_DIR}/Tutorial/Step3
|
||||
-D CMAKE_CTEST_COMMAND:STRING=${CMAKE_CTEST_COMMAND}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/CMakeWizardTest.cmake)
|
||||
# If the cache variable CMAKE_CONTRACT_PROJECTS is set
|
||||
# then the dashboard will run a contract with CMake test of that
|
||||
# name. For example CMAKE_CONTRACT_PROJECTS = vtk542 would run
|
||||
# the vtk542 contract test.
|
||||
# For each Contract test, the project should provide a directory
|
||||
# with at least one CMakeLists.txt file that uses ExternalProject
|
||||
# to download and configure the project. The directory should also
|
||||
# contain a RunTest.cmake file that has a single set of the format:
|
||||
# SET(project_RUN_TEST testToRun)
|
||||
# The testToRun should be a test executable that can be run to
|
||||
# smoke test the build.
|
||||
FOREACH(project ${CMAKE_CONTRACT_PROJECTS})
|
||||
INCLUDE(Contracts/${project}/RunTest.cmake)
|
||||
ADD_TEST_MACRO(Contracts.${project}
|
||||
${${project}_RUN_TEST})
|
||||
# Contract test timeout in seconds.
|
||||
# Default to 6 hours.
|
||||
IF(DEFINED ${project}_TEST_TIMEOUT)
|
||||
SET(timeout ${${project}_TEST_TIMEOUT})
|
||||
ELSEIF(CMAKE_CONTRACT_TEST_TIMEOUT_DEFAULT)
|
||||
SET(timeout ${CMAKE_CONTRACT_TEST_TIMEOUT_DEFAULT})
|
||||
ELSE()
|
||||
SET(timeout 21600)
|
||||
ENDIF()
|
||||
SET_TESTS_PROPERTIES(Contracts.${project} PROPERTIES TIMEOUT ${timeout})
|
||||
ENDFOREACH()
|
||||
ENDIF(BUILD_TESTING)
|
||||
|
||||
SUBDIRS(CMakeTests)
|
||||
|
114
Tests/Contracts/cse-snapshot/CMakeLists.txt
Normal file
114
Tests/Contracts/cse-snapshot/CMakeLists.txt
Normal file
@ -0,0 +1,114 @@
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
project(cse-snapshot)
|
||||
|
||||
include(ExternalProject)
|
||||
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/LocalOverrides.cmake" OPTIONAL)
|
||||
include("${CMAKE_CURRENT_BINARY_DIR}/LocalOverrides.cmake" OPTIONAL)
|
||||
|
||||
if(NOT DEFINED HOME)
|
||||
if(DEFINED ENV{CTEST_REAL_HOME})
|
||||
set(HOME "$ENV{CTEST_REAL_HOME}")
|
||||
else()
|
||||
set(HOME "$ENV{HOME}")
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "HOME='${HOME}'")
|
||||
|
||||
if(NOT DEFINED repo)
|
||||
set(repo "git://public.kitware.com/cse.git")
|
||||
endif()
|
||||
message(STATUS "repo='${repo}'")
|
||||
|
||||
if(NOT DEFINED tag)
|
||||
set(tag "cc1dcb95439a21ab1d58f444d93481598414196e")
|
||||
endif()
|
||||
message(STATUS "tag='${tag}'")
|
||||
|
||||
string(SUBSTRING "${tag}" 0 8 shorttag)
|
||||
|
||||
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}'")
|
||||
|
||||
if(NOT DEFINED PROCESSOR_COUNT)
|
||||
# Unknown:
|
||||
set(PROCESSOR_COUNT 0)
|
||||
|
||||
# Linux:
|
||||
set(cpuinfo_file "/proc/cpuinfo")
|
||||
if(EXISTS "${cpuinfo_file}")
|
||||
file(STRINGS "${cpuinfo_file}" procs REGEX "^processor.: [0-9]+$")
|
||||
list(LENGTH procs PROCESSOR_COUNT)
|
||||
endif()
|
||||
|
||||
# Mac:
|
||||
if(APPLE)
|
||||
find_program(cmd_sysctl "sysctl")
|
||||
if(cmd_sysctl)
|
||||
execute_process(COMMAND ${cmd_sysctl} -n hw.ncpu
|
||||
OUTPUT_VARIABLE PROCESSOR_COUNT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Windows:
|
||||
if(WIN32)
|
||||
set(PROCESSOR_COUNT "$ENV{NUMBER_OF_PROCESSORS}")
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "PROCESSOR_COUNT='${PROCESSOR_COUNT}'")
|
||||
|
||||
find_package(Git)
|
||||
if(NOT GIT_EXECUTABLE)
|
||||
message(FATAL_ERROR "error: could not find git")
|
||||
# adjust PATH to find git, or set GIT_EXECUTABLE in LocalOverrides.cmake
|
||||
endif()
|
||||
message(STATUS "GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
|
||||
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Dashboard.cmake.in"
|
||||
"${script_dir}/Dashboard.cmake"
|
||||
@ONLY)
|
||||
|
||||
# Source dir for this project exists outside the CMake build tree because it
|
||||
# is absolutely huge.
|
||||
#
|
||||
if(EXISTS "${source_dir}/.git")
|
||||
# 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 clones the git repository:
|
||||
ExternalProject_Add(download-${PROJECT_NAME}
|
||||
SOURCE_DIR "${source_dir}"
|
||||
GIT_REPOSITORY "${repo}"
|
||||
GIT_TAG "${tag}"
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(build-${PROJECT_NAME}
|
||||
DOWNLOAD_COMMAND ""
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ${CMAKE_CTEST_COMMAND} -S "${script_dir}/Dashboard.cmake"
|
||||
INSTALL_COMMAND ""
|
||||
DEPENDS download-${PROJECT_NAME}
|
||||
)
|
76
Tests/Contracts/cse-snapshot/Dashboard.cmake.in
Normal file
76
Tests/Contracts/cse-snapshot/Dashboard.cmake.in
Normal file
@ -0,0 +1,76 @@
|
||||
# This "ctest -S" script may be configured to drive a nightly dashboard on any
|
||||
# Linux machine.
|
||||
#
|
||||
set(CTEST_BINARY_DIRECTORY "@binary_dir@")
|
||||
set(CTEST_BUILD_NAME "@BUILDNAME@")
|
||||
set(CTEST_SITE "@SITE@")
|
||||
set(CTEST_SOURCE_DIRECTORY "@source_dir@")
|
||||
set(PROCESSOR_COUNT "@PROCESSOR_COUNT@")
|
||||
|
||||
# Assume a Linux build, with a make that supports -j. Modify this script if
|
||||
# assumption is ever invalid.
|
||||
#
|
||||
if(PROCESSOR_COUNT)
|
||||
set(CTEST_BUILD_FLAGS "-j${PROCESSOR_COUNT}")
|
||||
endif()
|
||||
|
||||
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
|
||||
set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}")
|
||||
|
||||
message("Cleaning binary dir '${CTEST_BINARY_DIRECTORY}'")
|
||||
ctest_empty_binary_directory("${CTEST_BINARY_DIRECTORY}")
|
||||
|
||||
# Intentionally no ctest_update step in this script. This script is run as a
|
||||
# "Contract" test on a CMake dashboard submission using the just-built ctest
|
||||
# as the driver. The download step in the Contract CMakeLists file takes care
|
||||
# of setting up the source tree before calling this ctest -S script. The idea
|
||||
# is that the source tree will be the same every day, so there should not be
|
||||
# an "update" step for this build.
|
||||
|
||||
message("Configuring CSE in binary dir '${CTEST_BINARY_DIRECTORY}'")
|
||||
set_property(GLOBAL PROPERTY SubProject "CSE-toplevel")
|
||||
set_property(GLOBAL PROPERTY Label "CSE-toplevel")
|
||||
|
||||
ctest_start("Experimental")
|
||||
|
||||
set(CSE_TOPLEVEL_OPTIONS
|
||||
-DEXTERNAL_PROJECT_DASHBOARD_BUILD:BOOL=ON
|
||||
-DEXTERNAL_PROJECT_TESTS:BOOL=ON
|
||||
-DCSE_INSTALL_PREFIX:PATH=${CTEST_BINARY_DIRECTORY}/built
|
||||
-DCSE_SUBSET:STRING=ALL
|
||||
-DCTEST_SITE:STRING=${CTEST_SITE}
|
||||
)
|
||||
|
||||
ctest_configure(OPTIONS "${CSE_TOPLEVEL_OPTIONS}")
|
||||
|
||||
# The configure step produces a file listing the CSE packages and dependencies.
|
||||
# This file also generates Project.xml and stores it in ${PROJECT_XML}.
|
||||
#
|
||||
set(subprojects "")
|
||||
if(EXISTS "${CTEST_BINARY_DIRECTORY}/CSEBuildtimeDepends.cmake")
|
||||
message("Including CSEBuildtimeDepends.cmake")
|
||||
include("${CTEST_BINARY_DIRECTORY}/CSEBuildtimeDepends.cmake")
|
||||
set(subprojects ${CSE_ALL_SORTED})
|
||||
message("Submitting Project.xml")
|
||||
ctest_submit(FILES ${PROJECT_XML})
|
||||
endif()
|
||||
|
||||
message("Submitting CSE configure results")
|
||||
ctest_submit()
|
||||
|
||||
if(subprojects)
|
||||
message("Building by looping over subprojects...")
|
||||
foreach(subproject ${subprojects})
|
||||
message("########## ${subproject} ##########")
|
||||
set_property(GLOBAL PROPERTY SubProject "${subproject}")
|
||||
set_property(GLOBAL PROPERTY Label "${subproject}")
|
||||
ctest_build(TARGET "${subproject}" APPEND)
|
||||
message("Submitting ${subproject} build results")
|
||||
ctest_submit(PARTS build)
|
||||
endforeach()
|
||||
else()
|
||||
message("Building all...")
|
||||
ctest_build(APPEND)
|
||||
message("Submitting build results")
|
||||
ctest_submit(PARTS build)
|
||||
endif()
|
3
Tests/Contracts/cse-snapshot/RunTest.cmake
Normal file
3
Tests/Contracts/cse-snapshot/RunTest.cmake
Normal file
@ -0,0 +1,3 @@
|
||||
set(exe "$ENV{HOME}/.cmake/Contracts/cse-snapshot/510345e4/build/built/Release/git-1.6.5.2/bin/git")
|
||||
set(args help clone)
|
||||
set(cse-snapshot_RUN_TEST ${exe} ${args})
|
30
Tests/Contracts/vtk542/CMakeLists.txt
Normal file
30
Tests/Contracts/vtk542/CMakeLists.txt
Normal file
@ -0,0 +1,30 @@
|
||||
# The VTK external project for CMake
|
||||
# ---------------------------------------------------------------------------
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
project(vtk542)
|
||||
include(ExternalProject)
|
||||
|
||||
|
||||
set(vtk_source "${CMAKE_CURRENT_BINARY_DIR}/VTK-source")
|
||||
set(vtk_binary "${CMAKE_CURRENT_BINARY_DIR}/VTK-build")
|
||||
|
||||
ExternalProject_Add(VTK
|
||||
DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}
|
||||
URL "http://www.vtk.org/files/release/5.4/vtk-5.4.2.tar.gz"
|
||||
URL_MD5 c2c797091d4b2128d9a1bd32c4b78227
|
||||
SOURCE_DIR ${vtk_source}
|
||||
BINARY_DIR ${vtk_binary}
|
||||
CMAKE_GENERATOR "${CMAKE_GENERATOR}"
|
||||
CMAKE_ARGS
|
||||
-DBUILD_EXAMPLES:BOOL=ON
|
||||
-DBUILD_TESTING:BOOL=ON
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
# make it so that each build will run make in the VTK build tree
|
||||
ExternalProject_Add_Step(VTK forcebuild
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-E remove ${CMAKE_CURRENT_BUILD_DIR}/VTK-prefix/src/VTK-stamp/VTK-build
|
||||
DEPENDEES configure
|
||||
DEPENDERS build
|
||||
ALWAYS 1
|
||||
)
|
1
Tests/Contracts/vtk542/RunTest.cmake
Normal file
1
Tests/Contracts/vtk542/RunTest.cmake
Normal file
@ -0,0 +1 @@
|
||||
SET(vtk542_RUN_TEST VTK-build/bin/CommonCxxTests otherArrays)
|
Loading…
x
Reference in New Issue
Block a user