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.
 
 
 
 
 
 

286 lines
10 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
# Standard TriBITS Includes
include(TribitsExternalPackageWithImportedTargetsFindTplModuleHelpers)
include(TribitsExternalPackageWriteConfigFile)
include(TribitsTplFindIncludeDirsAndLibraries)
include(TribitsGeneralMacros)
# Standard TriBITS utilities includes
include(AppendStringVar)
include(TribitsStandardizePaths)
# Gather information from enabled TPLs
#
macro(tribits_process_enabled_tpls)
tribits_config_code_start_timer(CONFIGURE_TPLS_TIME_START_SECONDS)
tribits_filter_package_list_from_var(${PROJECT_NAME}_DEFINED_TOPLEVEL_PACKAGES
EXTERNAL ON NONEMPTY ${PROJECT_NAME}_enabledExternalTopLevelPackages)
tribits_project_has_tribits_compliant_external_packages(
${PROJECT_NAME}_enabledExternalTopLevelPackages
projectHasTribitsCompliantExternalPackages )
if (projectHasTribitsCompliantExternalPackages)
message("")
message("Getting information for all enabled TriBITS-compliant"
" or upstream external packages/TPLs ...")
message("")
foreach(TPL_NAME IN LISTS ${PROJECT_NAME}_enabledExternalTopLevelPackages)
if (${TPL_NAME}_IS_TRIBITS_COMPLIANT
OR ${TPL_NAME}_PROCESSED_BY_DOWNSTREAM_TRIBITS_EXTERNAL_PACKAGE
)
tribits_process_enabled_tribits_compliant_or_upstream_tpl(${TPL_NAME})
endif()
endforeach()
set(remainingTplsTextStr " remaining")
else()
set(remainingTplsTextStr "")
endif()
message("")
message("Getting information for all${remainingTplsTextStr} enabled external packages/TPLs ...")
message("")
foreach(TPL_NAME IN LISTS ${PROJECT_NAME}_enabledExternalTopLevelPackages)
if ((NOT ${TPL_NAME}_IS_TRIBITS_COMPLIANT)
AND (NOT ${TPL_NAME}_PROCESSED_BY_DOWNSTREAM_TRIBITS_EXTERNAL_PACKAGE)
)
tribits_process_enabled_standard_tpl(${TPL_NAME})
endif()
endforeach()
tribits_config_code_stop_timer(CONFIGURE_TPLS_TIME_START_SECONDS
"\nTotal time to configure enabled external packages/TPLs")
endmacro()
macro(tribits_process_enabled_tribits_compliant_or_upstream_tpl TPL_NAME)
tribits_get_enabled_tpl_processing_string(${TPL_NAME} tplProcessingString)
message("${tplProcessingString}")
if (NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY)
if (NOT ${TPL_NAME}_PROCESSED_BY_DOWNSTREAM_TRIBITS_EXTERNAL_PACKAGE)
tribits_process_enabled_tribits_compliant_tpl(${TPL_NAME})
else()
message("-- "
"The external package/TPL ${TPL_NAME} will be read in by a downstream"
" TriBITS-compliant external package")
endif()
endif()
endmacro()
# @MACRO: tribits_process_enabled_standard_tpl()
#
# Process an enabled TPL's FindTPL${TPL_NAME}.cmake module.
#
macro(tribits_process_enabled_standard_tpl TPL_NAME)
tribits_get_enabled_tpl_processing_string(${TPL_NAME} tplProcessingString)
message("${tplProcessingString}")
if (NOT ${PROJECT_NAME}_TRACE_DEPENDENCY_HANDLING_ONLY)
# Locate the FindTPL${TPL_NAME}.cmake module
if (${PROJECT_NAME}_VERBOSE_CONFIGURE)
print_var(${TPL_NAME}_FINDMOD)
endif()
tribits_process_enabled_tribits_find_tpl_mod_file(${TPL_NAME})
tribits_address_failed_tpl_find(${TPL_NAME})
tribits_generate_tpl_version_file_and_add_package_config_install_targets(
${TPL_NAME})
endif()
endmacro()
# Get external package/TPL processing string
#
function(tribits_get_enabled_tpl_processing_string TPL_NAME tplProcessingStringOut)
set(tplProcessingString "Processing enabled external package/TPL: ${TPL_NAME} (")
if (${TPL_NAME}_ENABLING_PKG)
string(APPEND tplProcessingString "enabled by ${${TPL_NAME}_ENABLING_PKG}," )
else()
string(APPEND tplProcessingString "enabled explicitly," )
endif()
string(APPEND tplProcessingString " disable with -DTPL_ENABLE_${TPL_NAME}=OFF)" )
set(${tplProcessingStringOut} "${tplProcessingString}" PARENT_SCOPE)
endfunction()
# Process an enabled TPL defined using a TriBITS-compliant external
# packages <tplName>Config.cmake file
#
macro(tribits_process_enabled_tribits_compliant_tpl TPL_NAME)
message("-- "
"Calling find_package(${TPL_NAME}) for TriBITS-compliant external package")
find_package(${TPL_NAME} CONFIG REQUIRED)
endmacro()
# Process an enabled TPL defined using a FindTPL<tplName>.cmake module
#
macro(tribits_process_enabled_tribits_find_tpl_mod_file TPL_NAME)
if (IS_ABSOLUTE ${${TPL_NAME}_FINDMOD})
#message("${${TPL_NAME}_FINDMOD} is absolute!")
set(CURRENT_TPL_PATH "${${TPL_NAME}_FINDMOD}")
else()
#message("${${TPL_NAME}_FINDMOD} is *NOT* absolute!")
set(CURRENT_TPL_PATH "${PROJECT_SOURCE_DIR}/${${TPL_NAME}_FINDMOD}")
endif()
#print_var(CURRENT_TPL_PATH)
# Process the FindTPL${TPL_NAME}.cmake module
tribits_trace_file_processing(TPL INCLUDE "${CURRENT_TPL_PATH}")
set(TRIBITS_FINDING_RAW_${TPL_NAME}_PACKAGE_FIRST TRUE)
include("${CURRENT_TPL_PATH}")
unset(TRIBITS_FINDING_RAW_${TPL_NAME}_PACKAGE_FIRST)
# NOTE: Above, setting TRIBITS_FINDING_RAW_${TPL_NAME}_PACKAGE_FIRST=TRUE
# triggers special logic in the TriBITS-created
# ${TPL_NAME}ConfigVersion.cmake file to set
# PACKAGE_VERSION_COMPATIBLE=FALSE and result in find_package(${TPL_NAME})
# that may be called inside of ${TPL_NAME}_FINDMOD to not find a
# TriBITS-generated ${TPL_NAME}Config.cmake file. This allows
# find_package(${TPL_NAME}) to usae a proper non-TriBITS
# Find${TPL_NAME}.cmake module or find a non-TriBITS
# ${TPL_NAME}Config.cmake module.
if (${PROJECT_NAME}_VERBOSE_CONFIGURE)
print_var(TPL_${TPL_NAME}_NOT_FOUND)
endif()
endmacro()
function(tribits_address_failed_tpl_find TPL_NAME)
# Address failed find of the TPL
if (TPL_${TPL_NAME}_NOT_FOUND AND NOT TPL_TENTATIVE_ENABLE_${TPL_NAME})
message(
"-- NOTE: The find module file for this failed TPL '${TPL_NAME}' is:\n"
" ${CURRENT_TPL_PATH}\n"
" which is pointed to in the file:\n"
" ${${TPL_NAME}_TPLS_LIST_FILE}\n"
)
if (${TPL_NAME}_ENABLING_PKG)
message(
"TIP: One way to get past the configure failure for the\n"
"TPL '${TPL_NAME}' is to simply disable it with:\n"
" -DTPL_ENABLE_${TPL_NAME}=OFF\n"
"which will disable it and will recursively disable all of the\n"
"downstream packages that have required dependencies on it, including\n"
"the package '${${TPL_NAME}_ENABLING_PKG}' which triggered its enable.\n"
"When you reconfigure, just grep the cmake stdout for '${TPL_NAME}'\n"
"and then follow the disables that occur as a result to see what impact\n"
"this TPL disable has on the configuration of ${PROJECT_NAME}.\n"
)
else()
message(
"TIP: Even though the TPL '${TPL_NAME}' was explicitly enabled in input,\n"
"it can be disabled with:\n"
" -DTPL_ENABLE_${TPL_NAME}=OFF\n"
"which will disable it and will recursively disable all of the\n"
"downstream packages that have required dependencies on it.\n"
"When you reconfigure, just grep the cmake stdout for '${TPL_NAME}'\n"
"and then follow the disables that occur as a result to see what impact\n"
"this TPL disable has on the configuration of ${PROJECT_NAME}.\n"
)
endif()
message(FATAL_ERROR
"ERROR: TPL_${TPL_NAME}_NOT_FOUND=${TPL_${TPL_NAME}_NOT_FOUND}, aborting!")
endif()
endfunction()
# Generate the <tplName>ConfigVersion.cmake file for a TriBITS TPL and install
# the already generated <tplName>Config.cmake file
#
function(tribits_generate_tpl_version_file_and_add_package_config_install_targets
TPL_NAME
)
set(buildDirExternalPkgsDir
"${${PROJECT_NAME}_BINARY_DIR}/${${PROJECT_NAME}_BUILD_DIR_EXTERNAL_PKGS_DIR}")
set(tplConfigFile
"${buildDirExternalPkgsDir}/${TPL_NAME}/${TPL_NAME}Config.cmake")
set(tplConfigVersionFile
"${buildDirExternalPkgsDir}/${TPL_NAME}/${TPL_NAME}ConfigVersion.cmake")
tribits_extpkg_write_config_version_file(${TPL_NAME}
"${tplConfigVersionFile}")
tribits_extpkg_install_config_file(${TPL_NAME} "${tplConfigFile}")
tribits_extpkg_install_config_version_file(${TPL_NAME}
"${tplConfigVersionFile}")
endfunction()
function(tribits_project_has_tribits_compliant_external_packages
enabledExternalTopLevelPackagesListName
projectHasTribitsCompliantExternalPackagesOut
)
set(projectHasTribitsCompliantExternalPackages FALSE)
foreach(TPL_NAME IN LISTS ${enabledExternalTopLevelPackagesListName})
if (${TPL_NAME}_IS_TRIBITS_COMPLIANT
OR ${TPL_NAME}_PROCESSED_BY_DOWNSTREAM_TRIBITS_EXTERNAL_PACKAGE
)
set(projectHasTribitsCompliantExternalPackages TRUE)
break()
endif()
endforeach()
set(${projectHasTribitsCompliantExternalPackagesOut}
${projectHasTribitsCompliantExternalPackages} PARENT_SCOPE)
endfunction()