You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
299 lines
9.3 KiB
299 lines
9.3 KiB
2 years ago
|
# @HEADER
|
||
|
# ************************************************************************
|
||
|
#
|
||
|
# TriBITS: Tribal Build, Integrate, and Test System
|
||
|
# Copyright 2013 Sandia Corporation
|
||
|
#
|
||
|
# Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
||
|
# the U.S. Government retains certain rights in this software.
|
||
|
#
|
||
|
# Redistribution and use in source and binary forms, with or without
|
||
|
# modification, are permitted provided that the following conditions are
|
||
|
# met:
|
||
|
#
|
||
|
# 1. Redistributions of source code must retain the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer.
|
||
|
#
|
||
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer in the
|
||
|
# documentation and/or other materials provided with the distribution.
|
||
|
#
|
||
|
# 3. Neither the name of the Corporation nor the names of the
|
||
|
# contributors may be used to endorse or promote products derived from
|
||
|
# this software without specific prior written permission.
|
||
|
#
|
||
|
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||
|
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
#
|
||
|
# ************************************************************************
|
||
|
# @HEADER
|
||
|
|
||
|
|
||
|
message(
|
||
|
"\n***"
|
||
|
"\n*** TribitsDriverDashboard.cmake"
|
||
|
"\n***\n"
|
||
|
)
|
||
|
|
||
|
# Ge the directly where this file lives in the TriBITS tree. We use this
|
||
|
# to figure out where everything in in the TriBITS directory tree.
|
||
|
get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||
|
|
||
|
# Get the Tribits base directory
|
||
|
set(TRIBITS_ROOT "${CMAKE_CURRENT_LIST_DIR}/..")
|
||
|
get_filename_component(TRIBITS_ROOT "${TRIBITS_ROOT}" ABSOLUTE)
|
||
|
message("TRIBITS_ROOT = '${TRIBITS_ROOT}'")
|
||
|
|
||
|
# Get the directory containing the TriBITS CMake utilities using this
|
||
|
# script's location as the reference point.
|
||
|
set(TRIBITS_CMAKE_UTILS_DIR "${TRIBITS_ROOT}/core/utils")
|
||
|
message("TRIBITS_CMAKE_UTILS_DIR = '${TRIBITS_CMAKE_UTILS_DIR}'")
|
||
|
|
||
|
set( CMAKE_MODULE_PATH
|
||
|
"${TRIBITS_CMAKE_UTILS_DIR}"
|
||
|
)
|
||
|
|
||
|
#message("CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}")
|
||
|
|
||
|
include(PrintVar)
|
||
|
include(SetDefaultAndFromEnv)
|
||
|
|
||
|
include(${CMAKE_CURRENT_LIST_DIR}/../ctest_driver/TribitsCTestDriverCoreHelpers.cmake)
|
||
|
|
||
|
|
||
|
#
|
||
|
# Override CTEST_SUBMIT to drive multiple submits and to detect failed
|
||
|
# submissions and track them as queued errors.
|
||
|
#
|
||
|
|
||
|
macro(tdd_ctest_submit)
|
||
|
|
||
|
# Cache the original CTEST_DROP_SITE and CTEST_DROP_LOCATION
|
||
|
if ("${TDD_CTEST_DROP_SITE_ORIG}" STREQUAL "")
|
||
|
set(TDD_CTEST_DROP_SITE_ORIG ${CTEST_DROP_SITE})
|
||
|
if (TRIBITS_CTEST_SUBMIT_DEBUG_DUMP)
|
||
|
print_var(TDD_CTEST_DROP_SITE_ORIG)
|
||
|
endif()
|
||
|
endif()
|
||
|
if ("${TDD_CTEST_DROP_LOCATION_ORIG}" STREQUAL "")
|
||
|
set(TDD_CTEST_DROP_LOCATION_ORIG ${CTEST_DROP_LOCATION})
|
||
|
if (TRIBITS_CTEST_SUBMIT_DEBUG_DUMP)
|
||
|
print_var(TDD_CTEST_DROP_LOCATION_ORIG)
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
# Do the first submit
|
||
|
set(CTEST_DROP_SITE ${TDD_CTEST_DROP_SITE_ORIG})
|
||
|
set(CTEST_DROP_LOCATION ${TDD_CTEST_DROP_LOCATION_ORIG})
|
||
|
if (TRIBITS_CTEST_SUBMIT_DEBUG_DUMP)
|
||
|
print_var(CTEST_DROP_SITE)
|
||
|
print_var(CTEST_DROP_LOCATION)
|
||
|
endif()
|
||
|
|
||
|
ctest_submit(${ARGN})
|
||
|
|
||
|
# Do the second submit if requested!
|
||
|
if (TDD_2ND_CTEST_DROP_SITE OR TDD_2ND_CTEST_DROP_LOCATION)
|
||
|
|
||
|
message("\nDoing submit to second CDash site ...\n")
|
||
|
|
||
|
if (NOT "${TDD_2ND_CTEST_DROP_SITE}" STREQUAL "")
|
||
|
if (TRIBITS_CTEST_SUBMIT_DEBUG_DUMP)
|
||
|
print_var(TDD_2ND_CTEST_DROP_SITE)
|
||
|
endif()
|
||
|
set(CTEST_DROP_SITE ${TDD_2ND_CTEST_DROP_SITE})
|
||
|
endif()
|
||
|
|
||
|
if (NOT "${TDD_2ND_CTEST_DROP_LOCATION}" STREQUAL "")
|
||
|
if (TRIBITS_CTEST_SUBMIT_DEBUG_DUMP)
|
||
|
print_var(TDD_2ND_CTEST_DROP_LOCATION)
|
||
|
endif()
|
||
|
set(CTEST_DROP_LOCATION ${TDD_2ND_CTEST_DROP_LOCATION})
|
||
|
endif()
|
||
|
|
||
|
ctest_submit(${ARGN})
|
||
|
|
||
|
endif()
|
||
|
|
||
|
endmacro()
|
||
|
|
||
|
#
|
||
|
# A) Set up the environment get options
|
||
|
#
|
||
|
|
||
|
set(CTEST_SITE "$ENV{CTEST_SITE}")
|
||
|
if("${CTEST_SITE}" STREQUAL "")
|
||
|
site_name(CTEST_SITE)
|
||
|
endif()
|
||
|
if("${CTEST_SITE}" STREQUAL "")
|
||
|
if(WIN32)
|
||
|
string(TOLOWER "$ENV{COMPUTERNAME}" CTEST_SITE)
|
||
|
else()
|
||
|
execute_process(COMMAND uname -n
|
||
|
OUTPUT_VARIABLE CTEST_SITE
|
||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||
|
)
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
#
|
||
|
# Set CTEST_BUILD_NAME from TDD_BUILD_NAME in env or set default.
|
||
|
#
|
||
|
# NOTE: CTEST_BUILD_NAME is a built-in CTest variable and therefore it
|
||
|
# should not be set from the environment since it will give crosstalk
|
||
|
# with TribitsCTestDriverCore.cmake.
|
||
|
#
|
||
|
set(CTEST_BUILD_NAME "$ENV{TDD_BUILD_NAME}")
|
||
|
if("${CTEST_BUILD_NAME}" STREQUAL "")
|
||
|
if(WIN32)
|
||
|
set(HOST_TYPE $ENV{OS})
|
||
|
else()
|
||
|
execute_process(COMMAND uname
|
||
|
OUTPUT_VARIABLE HOST_TYPE
|
||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||
|
)
|
||
|
endif()
|
||
|
set(CTEST_BUILD_NAME "${HOST_TYPE}-TDD-${CTEST_SITE}")
|
||
|
endif()
|
||
|
|
||
|
set(CTEST_CMAKE_GENERATOR "$ENV{CTEST_CMAKE_GENERATOR}")
|
||
|
if("${CTEST_CMAKE_GENERATOR}" STREQUAL "")
|
||
|
if(WIN32)
|
||
|
set(CTEST_CMAKE_GENERATOR "NMake Makefiles")
|
||
|
else()
|
||
|
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
# Extra directories to pull updates from
|
||
|
set_default_and_from_env( TDD_EXTRA_GIT_PULL_DIRS "" )
|
||
|
|
||
|
set(CTEST_TEST_TIMEOUT "$ENV{CTEST_TEST_TIMEOUT}")
|
||
|
if("${CTEST_TEST_TIMEOUT}" STREQUAL "")
|
||
|
set(CTEST_TEST_TIMEOUT 7200)
|
||
|
endif()
|
||
|
|
||
|
# Submit the results to the dashboard or not
|
||
|
set_default_and_from_env( TDD_DO_SUBMIT TRUE )
|
||
|
|
||
|
# Dashboard model : Nightly, Experimental, Continuous
|
||
|
set_default_and_from_env( TDD_CTEST_TEST_TYPE Experimental )
|
||
|
|
||
|
# set this to ON if you need to test something before committing.
|
||
|
set_default_and_from_env( TDD_IN_TESTING_MODE OFF )
|
||
|
|
||
|
#
|
||
|
# Allow environment variables to override default values for the
|
||
|
# source, update, and binary directories.
|
||
|
#
|
||
|
|
||
|
get_filename_component(CTEST_SOURCE_DIRECTORY
|
||
|
"${CTEST_SCRIPT_DIRECTORY}" ABSOLUTE)
|
||
|
set_default_and_from_env(CTEST_SOURCE_DIRECTORY ${CTEST_SOURCE_DIRECTORY})
|
||
|
|
||
|
get_filename_component(CTEST_UPDATE_DIRECTORY
|
||
|
"${CTEST_SCRIPT_DIRECTORY}/../../../.." ABSOLUTE)
|
||
|
set_default_and_from_env(CTEST_UPDATE_DIRECTORY ${CTEST_UPDATE_DIRECTORY})
|
||
|
|
||
|
get_filename_component(CTEST_BINARY_DIRECTORY
|
||
|
"${CTEST_SCRIPT_DIRECTORY}/../../../../../TDD_BUILD" ABSOLUTE)
|
||
|
set_default_and_from_env(CTEST_BINARY_DIRECTORY ${CTEST_BINARY_DIRECTORY})
|
||
|
|
||
|
set(CTEST_NOTES_FILES)
|
||
|
if(NOT "$ENV{TDD_CRON_DRIVER_LOGFILE}" STREQUAL "")
|
||
|
set(CTEST_NOTES_FILES ${CTEST_NOTES_FILES} "$ENV{TDD_CRON_DRIVER_LOGFILE}")
|
||
|
endif()
|
||
|
if(NOT "$ENV{TDD_CRON_DRIVER_SCRIPT}" STREQUAL "")
|
||
|
set(CTEST_NOTES_FILES ${CTEST_NOTES_FILES} "$ENV{TDD_CRON_DRIVER_SCRIPT}")
|
||
|
endif()
|
||
|
|
||
|
set(parallel_level "$ENV{TDD_PARALLEL_LEVEL}")
|
||
|
if("${parallel_level}" STREQUAL "")
|
||
|
set(parallel_level 1)
|
||
|
endif()
|
||
|
|
||
|
set(git_exe "$ENV{TDD_GIT_EXE}")
|
||
|
if("${git_exe}" STREQUAL "")
|
||
|
set(git_exe "git_exe-NOTFOUND")
|
||
|
find_program(git_exe NAMES git.cmd git)
|
||
|
endif()
|
||
|
if(git_exe)
|
||
|
set(CTEST_UPDATE_TYPE "git")
|
||
|
set(CTEST_UPDATE_COMMAND "${git_exe}")
|
||
|
endif()
|
||
|
|
||
|
#
|
||
|
# Run the outer dashboard
|
||
|
#
|
||
|
|
||
|
message("\nA) Empty out ${CTEST_BINARY_DIRECTORY} ...")
|
||
|
ctest_empty_binary_directory("${CTEST_BINARY_DIRECTORY}")
|
||
|
|
||
|
ctest_start("${TDD_CTEST_TEST_TYPE}")
|
||
|
|
||
|
message("\nB) Update ${CTEST_UPDATE_DIRECTORY} ...")
|
||
|
message(" CTEST_UPDATE_COMMAND='${CTEST_UPDATE_COMMAND}'")
|
||
|
message(" CTEST_UPDATE_TYPE='${CTEST_UPDATE_TYPE}'")
|
||
|
|
||
|
if (NOT TDD_IN_TESTING_MODE)
|
||
|
|
||
|
ctest_update(SOURCE "${CTEST_UPDATE_DIRECTORY}")
|
||
|
|
||
|
foreach(EXTRA_PULL_DIR ${TDD_EXTRA_GIT_PULL_DIRS})
|
||
|
set(EXTRA_PULL_DIR_ABS "${CTEST_UPDATE_DIRECTORY}/${EXTRA_PULL_DIR}")
|
||
|
set(PULL_OUT_FILE "${CTEST_BINARY_DIRECTORY}/${EXTRA_PULL_DIR}.pull.out")
|
||
|
set(CTEST_NOTES_FILES ${CTEST_NOTES_FILES} ${PULL_OUT_FILE})
|
||
|
message("Pull extra updates in '${EXTRA_PULL_DIR_ABS}' ...")
|
||
|
tribits_update_git_extrarepo("${git_exe}" "${EXTRA_PULL_DIR_ABS}")
|
||
|
endforeach()
|
||
|
|
||
|
else()
|
||
|
|
||
|
message("\nTesting mode: no updates of outer sources being performed!")
|
||
|
|
||
|
endif()
|
||
|
|
||
|
message("\nC) Configure ${CTEST_BINARY_DIRECTORY} ...")
|
||
|
ctest_configure(BUILD "${CTEST_BINARY_DIRECTORY}")
|
||
|
|
||
|
ctest_read_custom_files(BUILD "${CTEST_BINARY_DIRECTORY}")
|
||
|
|
||
|
message("\nD) Build ${CTEST_BINARY_DIRECTORY} ...")
|
||
|
ctest_build(BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
|
||
|
|
||
|
message("\nE) Submitting update configure notes build ...")
|
||
|
if (TDD_DO_SUBMIT)
|
||
|
if(NOT "$ENV{TDD_CTEST_DROP_SITE}" STREQUAL "")
|
||
|
set(CTEST_DROP_SITE "$ENV{TDD_CTEST_DROP_SITE}")
|
||
|
endif()
|
||
|
if(NOT "$ENV{TDD_CTEST_DROP_LOCATION}" STREQUAL "")
|
||
|
set(CTEST_DROP_LOCATION "$ENV{TDD_CTEST_DROP_LOCATION}")
|
||
|
endif()
|
||
|
tdd_ctest_submit(PARTS update configure notes build)
|
||
|
else()
|
||
|
message("\nSkipping submit on request!")
|
||
|
endif()
|
||
|
|
||
|
message("\nF) Run tests (which runs everything really): PARALLEL_LEVEL ${parallel_level} from ${CTEST_BINARY_DIRECTORY} ...")
|
||
|
ctest_test(BUILD "${CTEST_BINARY_DIRECTORY}" PARALLEL_LEVEL ${parallel_level})
|
||
|
|
||
|
message("\nG) Submitting Test ...")
|
||
|
if (TDD_DO_SUBMIT)
|
||
|
tdd_ctest_submit(PARTS Test)
|
||
|
else()
|
||
|
message("\nSkipping submit on request!")
|
||
|
endif()
|
||
|
|
||
|
message(
|
||
|
"\n*** Finished TribitsDriverDashboard.cmake ***\n"
|
||
|
)
|