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.

278 lines
12 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
################################################################################
#
# This file gets included in the main TriBITS framework. It is put here to
# reduce the size of the tribits/core/ directory.
#
################################################################################
include(TribitsGitRepoVersionInfo)
#
# Macro that drives a experimental 'dashboard' target
#
macro(tribits_add_dashboard_target)
if (NOT (WIN32 AND NOT CYGWIN))
if ("${${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE_DEFAULT}" STREQUAL "")
set(${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE_DEFAULT FALSE)
endif()
advanced_set(${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE
${${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE_DEFAULT}
CACHE BOOL
"If set to TRUE, use all-at-once mode for configure, build, test, and submit. Otherwise, use package-by-package mode.")
advanced_set(${PROJECT_NAME}_DASHBOARD_CTEST_ARGS "-V" CACHE STRING
"Extra arguments to pass to CTest when calling 'ctest -S' to run the 'dashboard' make target." )
advanced_set(CTEST_BUILD_FLAGS "" CACHE STRING
"Sets CTEST_BUILD_FLAGS on the env before invoking 'ctest -S'." )
advanced_set(CTEST_PARALLEL_LEVEL "" CACHE STRING
"Sets CTEST_PARALLEL_LEVEL on the env before invoking 'ctest -S'." )
# H.1) Enable all packages that are enabled and have tests enabled
set(${PROJECT_NAME}_ENABLED_PACKAGES_LIST)
set(${PROJECT_NAME}_ENABLED_PACKAGES_CMAKE_ARG_LIST)
foreach(TRIBITS_PACKAGE ${${PROJECT_NAME}_ENABLED_INTERNAL_PACKAGES})
if (${PROJECT_NAME}_ENABLE_${TRIBITS_PACKAGE} AND ${TRIBITS_PACKAGE}_ENABLE_TESTS)
if (${PROJECT_NAME}_ENABLED_PACKAGES_LIST)
set(${PROJECT_NAME}_ENABLED_PACKAGES_LIST
"${${PROJECT_NAME}_ENABLED_PACKAGES_LIST}\;${TRIBITS_PACKAGE}")
else()
set(${PROJECT_NAME}_ENABLED_PACKAGES_LIST "${TRIBITS_PACKAGE}")
endif()
set(${PROJECT_NAME}_ENABLED_PACKAGES_CMAKE_ARG_LIST
${${PROJECT_NAME}_ENABLED_PACKAGES_CMAKE_ARG_LIST} -D${PROJECT_NAME}_ENABLE_${TRIBITS_PACKAGE}=ON)
endif()
endforeach()
#print_var(${PROJECT_NAME}_ENABLED_PACKAGES_LIST)
set(EXPR_CMND_ARGS)
# Hard override options used by basic build and tests
append_set(EXPR_CMND_ARGS "TRIBITS_PROJECT_ROOT=${${PROJECT_NAME}_SOURCE_DIR}")
append_set(EXPR_CMND_ARGS "${PROJECT_NAME}_TRIBITS_DIR=${${PROJECT_NAME}_TRIBITS_DIR}")
append_set(EXPR_CMND_ARGS "${PROJECT_NAME}_WARNINGS_AS_ERRORS_FLAGS='${${PROJECT_NAME}_WARNINGS_AS_ERRORS_FLAGS}'")
append_set(EXPR_CMND_ARGS "${PROJECT_NAME}_ENABLE_SECONDARY_TESTED_CODE=${${PROJECT_NAME}_ENABLE_SECONDARY_TESTED_CODE}")
# Determine if base repo is a git repo (by seeing if SHA1 can be extracted)
tribits_git_repo_sha1("${PROJECT_SOURCE_DIR}" projectGitRepoSha1
FAILURE_MESSAGE_OUT projectGitRepoSha1FailureMsg)
if (projectGitRepoSha1 STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DO_UPDATES=OFF")
endif()
# Conditionally override options used only for the 'dashboard' target.
# These options have no use in a a basic build/test so we don't want to
# interfere with options users might set on the env.
if (NOT "${${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE}" STREQUAL "")
append_set(EXPR_CMND_ARGS "${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE=${${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE}")
endif()
if (NOT "${CTEST_BUILD_NAME}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_BUILD_NAME=${CTEST_BUILD_NAME}")
endif()
if (NOT "${${PROJECT_NAME}_ENABLE_COVERAGE_TESTING}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DO_COVERAGE_TESTING=${${PROJECT_NAME}_ENABLE_COVERAGE_TESTING}")
endif()
if (NOT "${CTEST_BUILD_FLAGS}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_BUILD_FLAGS=${CTEST_BUILD_FLAGS}")
endif()
if (NOT "${CTEST_PARALLEL_LEVEL}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_PARALLEL_LEVEL=${CTEST_PARALLEL_LEVEL}")
endif()
if (NOT "${CTEST_DO_SUBMIT}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DO_SUBMIT=${CTEST_DO_SUBMIT}")
endif()
if (NOT "${CTEST_DROP_METHOD}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DROP_METHOD=${CTEST_DROP_METHOD}")
endif()
if (NOT $"{CTEST_DROP_SITE}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DROP_SITE=${CTEST_DROP_SITE}")
endif()
if (NOT "${CTEST_DROP_LOCATION}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DROP_LOCATION=${CTEST_DROP_LOCATION}")
endif()
if (NOT "${CTEST_DROP_SITE_COVERAGE}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DROP_SITE_COVERAGE=${CTEST_DROP_SITE_COVERAGE}")
endif()
if (NOT "${CTEST_DROP_LOCATION_COVERAGE}" STREQUAL "")
append_set(EXPR_CMND_ARGS "CTEST_DROP_LOCATION_COVERAGE=${CTEST_DROP_LOCATION_COVERAGE}")
endif()
if (NOT "${TRIBITS_2ND_CTEST_DROP_LOCATION}" STREQUAL "")
append_set(EXPR_CMND_ARGS "TRIBITS_2ND_CTEST_DROP_LOCATION=${TRIBITS_2ND_CTEST_DROP_LOCATION}")
endif()
if (NOT "${TRIBITS_2ND_CTEST_DROP_SITE}" STREQUAL "")
append_set(EXPR_CMND_ARGS "TRIBITS_2ND_CTEST_DROP_SITE=${TRIBITS_2ND_CTEST_DROP_SITE}")
endif()
#print_var(${PROJECT_NAME}_EXTRA_REPOSITORIES)
append_set(EXPR_CMND_ARGS
${PROJECT_NAME}_EXTRAREPOS_FILE=${${PROJECT_NAME}_EXTRAREPOS_FILE})
append_set(EXPR_CMND_ARGS
${PROJECT_NAME}_ENABLE_KNOWN_EXTERNAL_REPOS_TYPE=${${PROJECT_NAME}_ENABLE_KNOWN_EXTERNAL_REPOS_TYPE})
append_set(EXPR_CMND_ARGS
${PROJECT_NAME}_IGNORE_MISSING_EXTRA_REPOSITORIES=${${PROJECT_NAME}_IGNORE_MISSING_EXTRA_REPOSITORIES})
join(${PROJECT_NAME}_EXTRA_REPOSITORIES_JOINED "," FALSE
${${PROJECT_NAME}_EXTRA_REPOSITORIES})
append_set(EXPR_CMND_ARGS
${PROJECT_NAME}_EXTRA_REPOSITORIES=${${PROJECT_NAME}_EXTRA_REPOSITORIES_JOINED})
#print_var(EXPR_CMND_ARGS)
# H.2) Add the custom target to enable all the packages with tests enabled
if (${PROJECT_NAME}_CTEST_DO_ALL_AT_ONCE)
set(RUNNING_EXP_DASHBOARD_MSG_HEADER
"Running all-at-once experimental dashboard"
)
set(DASHBOARD_TARGET_PRE_CTEST_DRIVER_CMNDS)
set(DASHBOARD_TARGET_CTEST_DRIVER_CMND_NUM)
set(DASHBOARD_TARGET_POST_CTEST_DRIVER_CMNDS)
else()
set(RUNNING_EXP_DASHBOARD_MSG_HEADER
"Running package-by-package experimental dashboard"
)
set(DASHBOARD_TARGET_PRE_CTEST_DRIVER_CMNDS
COMMAND echo
COMMAND echo "***"
COMMAND echo "*** A) Clean out the list of packages"
COMMAND echo "***"
COMMAND echo
COMMAND echo Running: ${CMAKE_COMMAND} -D${PROJECT_NAME}_UNENABLE_ENABLED_PACKAGES:BOOL=TRUE
-D${PROJECT_NAME}_ALLOW_NO_PACKAGES:BOOL=ON -D${PROJECT_NAME}_ENABLE_ALL_PACKAGES:BOOL=OFF ${PROJECT_SOURCE_DIR}
COMMAND echo
COMMAND ${CMAKE_COMMAND} -D${PROJECT_NAME}_UNENABLE_ENABLED_PACKAGES:BOOL=TRUE
-D${PROJECT_NAME}_ALLOW_NO_PACKAGES:BOOL=ON -D${PROJECT_NAME}_ENABLE_ALL_PACKAGES:BOOL=OFF ${PROJECT_SOURCE_DIR}
# NOTE: Above, if ${PROJECT_NAME}_ENABLE_ALL_PACKAGES was set in CMakeCache.txt, then setting
# -D${PROJECT_NAME}_ENABLE_ALL_PACKAGES:BOOL=OFF will turn it off in the cache. Note that it will
# never be turned on again which means that the list of packages will be set explicitly below.
)
set(DASHBOARD_TARGET_CTEST_DRIVER_CMND_NUM "B) ")
set(DASHBOARD_TARGET_POST_CTEST_DRIVER_CMNDS
COMMAND echo
COMMAND echo "***"
COMMAND echo "*** C) Clean out the list of packages again to clean the cache file"
COMMAND echo "***"
COMMAND echo
COMMAND echo Running: ${CMAKE_COMMAND} -D${PROJECT_NAME}_UNENABLE_ENABLED_PACKAGES:BOOL=TRUE
-D${PROJECT_NAME}_ALLOW_NO_PACKAGES:BOOL=ON -D${PROJECT_NAME}_ENABLE_ALL_PACKAGES:BOOL=OFF ${PROJECT_SOURCE_DIR}
COMMAND echo
COMMAND ${CMAKE_COMMAND} -D${PROJECT_NAME}_UNENABLE_ENABLED_PACKAGES:BOOL=TRUE
-D${PROJECT_NAME}_ALLOW_NO_PACKAGES:BOOL=ON -D${PROJECT_NAME}_ENABLE_ALL_PACKAGES:BOOL=OFF ${PROJECT_SOURCE_DIR}
COMMAND echo
COMMAND echo "***"
COMMAND echo "*** D) Reconfigure with the original package list"
COMMAND echo "***"
COMMAND echo
COMMAND echo Running: ${CMAKE_COMMAND} ${${PROJECT_NAME}_ENABLED_PACKAGES_CMAKE_ARG_LIST}
-D${PROJECT_NAME}_ALLOW_NO_PACKAGES:BOOL=ON ${PROJECT_SOURCE_DIR}
COMMAND echo
COMMAND ${CMAKE_COMMAND} ${${PROJECT_NAME}_ENABLED_PACKAGES_CMAKE_ARG_LIST}
-D${PROJECT_NAME}_ALLOW_NO_PACKAGES:BOOL=ON ${PROJECT_SOURCE_DIR}
COMMAND echo
COMMAND echo "See the results at http://${CTEST_DROP_SITE}${CTEST_DROP_LOCATION}&display=project\#Experimental"
COMMAND echo
)
endif()
add_custom_target( dashboard
USES_TERMINAL # Allow real-time STDOUT with ninja target
VERBATIM # Recommended
# WARNING: The echoed command and the actual commands are duplicated! You have to reproduce them!
COMMAND echo
COMMAND echo "**************************************************"
COMMAND echo "*** ${RUNNING_EXP_DASHBOARD_MSG_HEADER} ***"
COMMAND echo "**************************************************"
COMMAND echo
COMMAND echo ${PROJECT_NAME}_ENABLED_PACKAGES_LIST=${${PROJECT_NAME}_ENABLED_PACKAGES_LIST}
COMMAND echo
${DASHBOARD_TARGET_PRE_CTEST_DRIVER_CMNDS}
COMMAND echo
COMMAND echo "***"
COMMAND echo "*** ${DASHBOARD_TARGET_CTEST_DRIVER_CMND_NUM}Run the dashboard command setting the list of packages"
COMMAND echo "***"
COMMAND echo
COMMAND echo Running: env ${EXPR_CMND_ARGS}
${PROJECT_NAME}_PACKAGES=${${PROJECT_NAME}_ENABLED_PACKAGES_LIST}
PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
${CMAKE_CTEST_COMMAND} ${${PROJECT_NAME}_DASHBOARD_CTEST_ARGS} -S
${${PROJECT_NAME}_TRIBITS_DIR}/ctest_driver/experimental_build_test.cmake
COMMAND echo
COMMAND env ${EXPR_CMND_ARGS}
${PROJECT_NAME}_PACKAGES=${${PROJECT_NAME}_ENABLED_PACKAGES_LIST}
PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
${CMAKE_CTEST_COMMAND} ${${PROJECT_NAME}_DASHBOARD_CTEST_ARGS} -S
${${PROJECT_NAME}_TRIBITS_DIR}/ctest_driver/experimental_build_test.cmake || echo
# 2009/07/05: rabartl: Above, I added the ending '|| echo' to always make
# the command pass so that 'make' will not stop and avoid this last command
# to set back the enabled packages.
${DASHBOARD_TARGET_POST_CTEST_DRIVER_CMNDS}
)
endif()
endmacro()