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.
341 lines
9.7 KiB
341 lines
9.7 KiB
# @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 is included from TribitsProject.cmake which has already set to the
|
|
# tribits implementation to use in {PROJECT_NAME}_TRIBITS_DIR.
|
|
#
|
|
|
|
set(CMAKE_MODULE_PATH
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake
|
|
${${PROJECT_NAME}_TRIBITS_DIR}/core/utils
|
|
${${PROJECT_NAME}_TRIBITS_DIR}/core/package_arch
|
|
${${PROJECT_NAME}_TRIBITS_DIR}/core/config_tests
|
|
${${PROJECT_NAME}_TRIBITS_DIR}/core/modules
|
|
${${PROJECT_NAME}_TRIBITS_DIR}/core/installation
|
|
)
|
|
|
|
if (${PROJECT_NAME}_VERBOSE_CONFIGURE)
|
|
message("CMAKE_MODULE_PATH='${CMAKE_MODULE_PATH}'")
|
|
endif()
|
|
|
|
include(TribitsConstants)
|
|
tribits_asesrt_minimum_cmake_version()
|
|
include(TribitsCMakePolicies NO_POLICY_SCOPE)
|
|
|
|
include(TribitsIncludeDirectories)
|
|
include(TribitsFindPythonInterp)
|
|
include(TribitsGlobalMacros)
|
|
include(TribitsConfigureCTestCustom)
|
|
include(TribitsGenerateResourceSpecFile)
|
|
include(TribitsPackageDependencies)
|
|
include(TribitsPrintDependencyInfo)
|
|
|
|
include(AdvancedSet)
|
|
include(AdvancedOption)
|
|
include(TimingUtils)
|
|
include(SetDefault)
|
|
|
|
|
|
#
|
|
# Defines a TriBITS project (the guts).
|
|
#
|
|
|
|
macro(tribits_project_impl)
|
|
|
|
#
|
|
# A) Basic top-level TriBITS project stuff
|
|
#
|
|
|
|
message("")
|
|
message("Configuring ${PROJECT_NAME} build directory")
|
|
message("")
|
|
|
|
# A.1) Set some basic system vars and info you can't change
|
|
tribits_assert_and_setup_project_and_static_system_vars()
|
|
|
|
# A.2) Read user provided options from specified files. It is important to
|
|
# process these files *very* early on so that they have the same basic
|
|
# effect of setting these variables directly in the cache.
|
|
tribits_read_in_options_from_file()
|
|
|
|
# A.3) Get some other basic system info that is useful early on in
|
|
# configuration
|
|
tribits_setup_basic_system_vars()
|
|
tribits_find_python_interp()
|
|
find_package(Git)
|
|
if (NOT "${GIT_VERSION_STRING_OVERRIDE}" STREQUAL "")
|
|
set(GIT_VERSION_STRING ${GIT_VERSION_STRING_OVERRIDE}) # For testing!
|
|
endif()
|
|
|
|
#
|
|
# A.4) Read in the Project's version file
|
|
#
|
|
# NOTE: The file Version.cmake must be read *before* the global options are
|
|
# read because the variables defined in Version.cmake provide defaults for
|
|
# many of these options.
|
|
#
|
|
tribits_project_read_version_file(${PROJECT_SOURCE_DIR})
|
|
|
|
# Since the version header file is now configured the root build
|
|
# dir needs to be on the include path
|
|
tribits_include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
#
|
|
# B) Set up user options and global variables that will be used throughout
|
|
#
|
|
|
|
message("")
|
|
message("Setting up major user options ...")
|
|
message("")
|
|
|
|
tribits_define_global_options_and_define_extra_repos()
|
|
|
|
# Have to start timing after we read in the major options since that
|
|
# determines the timing option var.
|
|
tribits_config_code_start_timer(GLOBAL_TIME_START_SECONDS)
|
|
|
|
tribits_read_in_native_repositories()
|
|
|
|
tribits_combine_native_and_extra_repos()
|
|
|
|
tribits_process_extra_repos_options_files()
|
|
|
|
include(TribitsInstallationTestingMacros)
|
|
tribits_find_project_install()
|
|
|
|
#
|
|
# C) Generate version info file and read in ${PROJECT_NAME} packages and
|
|
# TPLs and process dependencies
|
|
#
|
|
|
|
tribits_generate_repo_version_output_and_file_and_install()
|
|
|
|
# Read in and process all of the project's package, TPL, listss and
|
|
# dependency definition files.
|
|
tribits_read_all_project_deps_files_create_deps_graph()
|
|
tribits_print_initial_dependency_info()
|
|
tribits_write_xml_dependency_files_if_supported()
|
|
|
|
#
|
|
# D) Apply dependency logic to enable and disable TriBITS packages and tests
|
|
#
|
|
|
|
tribits_adjust_and_print_package_dependencies()
|
|
|
|
#
|
|
# E) Stop after all dependencies handling is finished if asked
|
|
#
|
|
|
|
if (${PROJECT_NAME}_SHORTCIRCUIT_AFTER_DEPENDENCY_HANDLING)
|
|
message("")
|
|
message("Shortcircuiting after dependency tracking ...")
|
|
return()
|
|
endif()
|
|
|
|
#
|
|
# F) Set up the environment on this computer
|
|
#
|
|
|
|
message("")
|
|
message("Probing the environment ...")
|
|
message("")
|
|
|
|
if (NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY)
|
|
tribits_setup_env()
|
|
else()
|
|
message("-- Skipping env setup due to"
|
|
" ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY=ON")
|
|
endif()
|
|
|
|
#
|
|
# G) Go get the information for all enabled TPLS
|
|
#
|
|
|
|
tribits_process_enabled_tpls()
|
|
|
|
#
|
|
# H) Set up for testing with CTest and ${PROJECT_NAME} test harness
|
|
#
|
|
|
|
message("")
|
|
message("Setting up testing support ...")
|
|
message("")
|
|
|
|
if (NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY)
|
|
tribits_include_ctest_support()
|
|
else()
|
|
message("-- Skipping testing support setup due to"
|
|
" ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY=ON")
|
|
endif()
|
|
|
|
#
|
|
# I) Add the 'dashboard' target
|
|
#
|
|
# NOTE: Must come after setting up for testing
|
|
#
|
|
|
|
set(TRIBITS_ADD_DASHBOARD_TARGET_MODULE
|
|
${${PROJECT_NAME}_TRIBITS_DIR}/${TRIBITS_CTEST_DRIVER_DIR}/TribitsAddDashboardTarget.cmake
|
|
)
|
|
if (
|
|
EXISTS ${TRIBITS_ADD_DASHBOARD_TARGET_MODULE}
|
|
AND
|
|
NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY
|
|
)
|
|
include(${TRIBITS_ADD_DASHBOARD_TARGET_MODULE})
|
|
tribits_add_dashboard_target()
|
|
endif()
|
|
|
|
#
|
|
# J) Configure individual packages
|
|
#
|
|
|
|
message("")
|
|
message("Configuring individual enabled ${PROJECT_NAME} packages ...")
|
|
message("")
|
|
|
|
if (NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY)
|
|
tribits_repository_configure_all_version_header_files(
|
|
${${PROJECT_NAME}_ALL_REPOSITORIES})
|
|
tribits_repository_configure_all_version_date_files(
|
|
${${PROJECT_NAME}_ALL_REPOSITORIES})
|
|
endif()
|
|
|
|
tribits_configure_enabled_packages()
|
|
|
|
#
|
|
# K) Write dummy makefiles for Ninja
|
|
#
|
|
|
|
if (CMAKE_GENERATOR STREQUAL "Ninja")
|
|
|
|
if (${PROJECT_NAME}_WRITE_NINJA_MAKEFILES)
|
|
|
|
message("")
|
|
message("Generating dummy makefiles in each directory to call Ninja ...")
|
|
message("")
|
|
|
|
tribits_config_code_start_timer(NINJA_MAKEFILES_TIME_START_SECONDS)
|
|
|
|
include(GenerateNinjaMakefiles)
|
|
generate_ninja_makefiles(${CMAKE_SOURCE_DIR})
|
|
|
|
tribits_config_code_stop_timer(NINJA_MAKEFILES_TIME_START_SECONDS
|
|
"Total time generate Ninja makefiles ${PROJECT_NAME}")
|
|
|
|
else()
|
|
|
|
message("\nNOTE: *NOT* generating dummy Ninja makefiles (see above note"
|
|
" and check CMake version)")
|
|
|
|
endif()
|
|
|
|
|
|
endif()
|
|
|
|
#
|
|
# L) Setup for packaging and distribution
|
|
#
|
|
|
|
if (${PROJECT_NAME}_ENABLE_CPACK_PACKAGING)
|
|
message("")
|
|
message("Set up for creating a distribution ...")
|
|
message("")
|
|
if (NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY)
|
|
tribits_setup_packaging_and_distribution()
|
|
else()
|
|
message("-- Skipping distribution setup due to"
|
|
" ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY=ON")
|
|
endif()
|
|
else()
|
|
message("")
|
|
message("Skipping setup for distribution because"
|
|
" ${PROJECT_NAME}_ENABLE_CPACK_PACKAGING=OFF")
|
|
message("")
|
|
endif()
|
|
|
|
#
|
|
# M) Set up for installation
|
|
#
|
|
|
|
if (NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY)
|
|
tribits_setup_for_installation()
|
|
endif()
|
|
|
|
#
|
|
# N) Generate resource spec file if applicable
|
|
#
|
|
|
|
tribits_generate_ctest_resource_spec_file_project_logic()
|
|
|
|
#
|
|
# O) Show final timing and end
|
|
#
|
|
|
|
message("")
|
|
message("Finished configuring ${PROJECT_NAME}!")
|
|
message("")
|
|
tribits_config_code_stop_timer(GLOBAL_TIME_START_SECONDS
|
|
"Total time to configure ${PROJECT_NAME}")
|
|
|
|
endmacro()
|
|
|
|
|
|
# @MACRO: tribits_project_enable_all()
|
|
#
|
|
# Process a project where you enable all of the packages by default.
|
|
#
|
|
# Usage::
|
|
#
|
|
# tribits_project_enable_all()
|
|
#
|
|
# This macro just sets the global cache var
|
|
# `${PROJECT_NAME}_ENABLE_ALL_PACKAGES`_ to ``ON`` by default then calls
|
|
# `tribits_project()`_. That is all. This macro is generally used for
|
|
# TriBITS projects that have just a single package or by default just want to
|
|
# enable all packages. This is especially useful when you have a TriBITS
|
|
# project with just a single package.
|
|
#
|
|
macro(tribits_project_enable_all)
|
|
set(${PROJECT_NAME}_ENABLE_ALL_PACKAGES ON CACHE BOOL "Enable all by default" )
|
|
tribits_project_impl(${ARGN})
|
|
endmacro()
|
|
|