Cloned SEACAS for EXODUS library with extra build files for internal package management.
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.

263 lines
8.2 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
include(GetCurrentListDir)
include(CMakeParseArguments)
include(SetDefaultAndFromEnv)
# Set if the inner CMake installs are performed or not
set_default_and_from_env(TDD_FORCE_INNER_CMAKE_INSTALL 1)
# Set if the inner CMake installs are performed or not
set_default_and_from_env(TRIBITS_TDD_USE_SYSTEM_CTEST 0)
# Get this value outside of any functions so it will be the path to
# *this* file and not the path to the file calling any of these
# functions.
get_current_list_dir(THIS_SCRIPT_DIR)
#
# Placeholder for any global setup necessary on all machines...
#
# Call this function first at the top of any drivers/MACHINE/CMakeLists.txt
# file.
#
function(tribits_driver_setup)
#
# But right now... no global setup required...
#
endfunction()
#
# Add a test to download and install a single "flavor" of CMake.
#
# Known values of cmake_type are 'min', 'release', 'rc' and 'dev'.
#
# This function should be called automatically by
# TRIBITS_ADD_REQUIRED_CMAKE_INSTALLS after many calls to
# TRIBITS_DRIVER_ADD_DASHBOARD have collected a list of which flavors
# of CMake are required to run all the dashboards on this machine.
#
function(tribits_driver_add_test_that_installs_cmake cmake_type)
set(known 0)
if("${cmake_type}" STREQUAL "min" OR
"${cmake_type}" STREQUAL "release" OR
"${cmake_type}" STREQUAL "rc" OR
"${cmake_type}" STREQUAL "dev")
set(known 1)
endif()
if(NOT known)
message("error: unknown --installer-type '${cmake_type}' -- no test added")
return()
endif()
if(NOT TD_BASE_DIR)
message(FATAL_ERROR "TD_BASE_DIR must be defined before calling this function")
endif()
if(NOT TRIBITS_PYTHON_UTILS_DIR)
message(FATAL_ERROR "TRIBITS_PYTHON_UTILS_DIR must be defined before calling this function")
endif()
find_program(PYTHON_EXE python)
set_default_and_from_env( TDD_HTTP_PROXY "" )
if (TDD_HTTP_PROXY)
set(TDD_HTTP_PROXY_ARG "--http-proxy=${TDD_HTTP_PROXY}")
else()
set(TDD_HTTP_PROXY_ARG "")
endif()
add_test(uninstall-cmake-${cmake_type} ${CMAKE_COMMAND}
-E remove_directory "${TD_BASE_DIR}/tools/cmake-${cmake_type}"
)
add_test(install-cmake-${cmake_type} ${PYTHON_EXE}
"${TRIBITS_PYTHON_UTILS_DIR}/download-cmake.py"
"--skip-detect"
"--install-dir=${TD_BASE_DIR}/tools/cmake-${cmake_type}"
"--installer-type=${cmake_type}"
"${TDD_HTTP_PROXY_ARG}"
)
set_property(TEST install-cmake-${cmake_type}
PROPERTY DEPENDS "uninstall-cmake-${cmake_type}")
endfunction()
#
# Add a test that runs a dashboard script using a known flavor of ctest.
#
# Required arguments:
# testname - name of the test as it appears on the driver dashboard
#
# scriptname - name of the file in CMAKE_CURRENT_SOURCE_DIR to run as
# ctest -S script
#
# Optional arguments:
#
# [CTEST_INSTALLER_TYPE min|release|rc|dev]
# [ENVIRONMENT var1=value1;var2=value2;var3=value3;...]
# [PROCESSORS 1]
# [RUN_SERIAL]
# [TIMEOUT_MINUTES 180]
#
function(tribits_driver_add_dashboard testname scriptname)
message("TRIBITS_DRIVER_ADD_DASHBOARD: '${testname}' '${scriptname}' [${ARGN}]")
cmake_parse_arguments(
# prefix
PARSE
# options
"RUN_SERIAL"
# one_value_keywords
""
# multi_value_keywords
"CTEST_INSTALLER_TYPE;ENVIRONMENT;TIMEOUT_MINUTES;DEPENDS;REQUIRED_FILES"
# the stuff to parse:
${ARGN}
)
if(NOT "${PARSE_DEFAULT_ARGS}" STREQUAL "")
message("warning: unrecognized arguments '${PARSE_DEFAULT_ARGS}' to TRIBITS_DRIVER_ADD_DASHBOARD")
endif()
if(PARSE_CTEST_INSTALLER_TYPE)
set(ctest_type ${PARSE_CTEST_INSTALLER_TYPE})
else()
set(ctest_type "release")
endif()
if(PARSE_TIMEOUT_MINUTES)
math(EXPR timeout_seconds "60 * ${PARSE_TIMEOUT_MINUTES}")
else()
set(timeout_seconds 10800) # 3 hours...
endif()
add_test(${testname} ${CMAKE_COMMAND}
-D binary_dir=${CMAKE_CURRENT_BINARY_DIR}
-D source_dir=${CMAKE_CURRENT_SOURCE_DIR}
-D ctest_type=${ctest_type}
-D scriptname=${scriptname}
-D TD_BASE_DIR=${TD_BASE_DIR}
-D testname=${testname}
-P ${THIS_SCRIPT_DIR}/LocateCTestAndRunScript.cmake
)
# This test that runs the dashboard depends on the test that installs its
# driving ctest:
#
set_property(TEST ${testname} PROPERTY DEPENDS "install-cmake-${ctest_type}")
if(PARSE_DEPENDS)
set_property(TEST ${testname} PROPERTY DEPENDS "${PARSE_DEPENDS}")
endif()
if(PARSE_REQUIRED_FILES)
set_property(TEST ${testname} PROPERTY REQUIRED_FILES "${PARSE_REQUIRED_FILES}")
endif()
if(PARSE_ENVIRONMENT)
set_property(TEST ${testname} PROPERTY ENVIRONMENT
"${PARSE_ENVIRONMENT};TD_CTEST_VERSION_TYPE=${ctest_type}")
else()
set_property(TEST ${testname} PROPERTY ENVIRONMENT
"TD_CTEST_VERSION_TYPE=${ctest_type}")
endif()
set_property(TEST ${testname} PROPERTY
FAIL_REGULAR_EXPRESSION "error: TRIBITS_CTEST_DRIVER_ERROR_QUEUE")
if(PARSE_PROCESSORS)
set_property(TEST ${testname} PROPERTY PROCESSORS "${PARSE_PROCESSORS}")
endif()
if(PARSE_RUN_SERIAL)
set_property(TEST ${testname} PROPERTY RUN_SERIAL ON)
endif()
set_property(TEST ${testname} PROPERTY TIMEOUT "${timeout_seconds}")
# Track the required cmake installer types in a global property:
#
set_property(GLOBAL APPEND PROPERTY TD_CMAKE_INSTALLER_TYPES "${ctest_type}")
endfunction()
#
# Call this function last at the bottom of any drivers/MACHINE/CMakeLists.txt
# file. It will add tests as needed to download and install all the right
# flavors of ctest required to drive the other tests added with
# TRIBITS_DRIVER_ADD_DASHBOARD.
#
function(tribits_add_required_cmake_installs)
if (TRIBITS_TDD_USE_SYSTEM_CTEST STREQUAL "1")
message(STATUS "Skipping CMake install tests because TRIBITS_TDD_USE_SYSTEM_CTEST==1")
elseif (TDD_FORCE_INNER_CMAKE_INSTALL STREQUAL "1")
get_property(types GLOBAL PROPERTY TD_CMAKE_INSTALLER_TYPES)
if (types)
list(REMOVE_DUPLICATES types)
foreach (type ${types})
message(STATUS "Adding CMake install test ${type}")
tribits_driver_add_test_that_installs_cmake(${type})
endforeach()
else()
message("warning: no cmake install tests are necessary...")
message(" Put calls to TRIBITS_DRIVER_ADD_DASHBOARD")
message(" *before* calls to TRIBITS_ADD_REQUIRED_CMAKE_INSTALLS...")
endif()
else()
message(STATUS "Skipping CMake install tests because TDD_FORCE_INNER_CMAKE_INSTALL!=1")
endif()
endfunction()