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.
145 lines
6.4 KiB
145 lines
6.4 KiB
# Copyright The OpenTelemetry Authors |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
include("${CMAKE_CURRENT_LIST_DIR}/component-definitions.cmake") |
|
include("${CMAKE_CURRENT_LIST_DIR}/thirdparty-dependency-definitions.cmake") |
|
|
|
#------------------------------------------------------------------------- |
|
# Function to get installed components. |
|
#------------------------------------------------------------------------- |
|
function(get_installed_components installed_components_out) |
|
set(result "") |
|
foreach(_COMPONENT IN LISTS OTEL_BUILT_COMPONENTS_LIST) |
|
set(_COMPONENT_TARGET_FILE "${CMAKE_CURRENT_LIST_DIR}/opentelemetry-cpp-${_COMPONENT}-target.cmake") |
|
if(EXISTS "${_COMPONENT_TARGET_FILE}") |
|
list(APPEND result ${_COMPONENT}) |
|
message(DEBUG "get_installed_components: component = ${_COMPONENT}, installed = TRUE") |
|
else() |
|
message(DEBUG "get_installed_components: component = ${_COMPONENT}, installed = FALSE") |
|
endif() |
|
endforeach() |
|
set(${installed_components_out} ${result} PARENT_SCOPE) |
|
endfunction() |
|
|
|
#------------------------------------------------------------------------- |
|
# Function to get dependent components. |
|
#------------------------------------------------------------------------- |
|
function(get_dependent_components component_in dependent_components_out) |
|
set(result "") |
|
set(depends_var "COMPONENT_${component_in}_COMPONENT_DEPENDS") |
|
if(DEFINED ${depends_var}) |
|
set(result ${${depends_var}}) |
|
endif() |
|
set(${dependent_components_out} ${result} PARENT_SCOPE) |
|
endfunction() |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
# Function to get requested components. |
|
#------------------------------------------------------------------------- |
|
function(get_requested_components installed_components_in requested_components_out) |
|
set(result "") |
|
if (NOT opentelemetry-cpp_FIND_COMPONENTS) |
|
set(result ${${installed_components_in}}) |
|
message(DEBUG "get_requested_components: No components explicitly requested. Importing all installed components including: ${result}") |
|
set(${requested_components_out} ${result} PARENT_SCOPE) |
|
else() |
|
message(DEBUG "get_requested_components: Components requested: ${opentelemetry-cpp_FIND_COMPONENTS}") |
|
foreach(_COMPONENT IN LISTS opentelemetry-cpp_FIND_COMPONENTS) |
|
if(NOT ${_COMPONENT} IN_LIST OTEL_BUILT_COMPONENTS_LIST) |
|
message(ERROR " get_requested_components: Component `${_COMPONENT}` is not a built component of the opentelemetry-cpp package. Built components include: ${OTEL_BUILT_COMPONENTS_LIST}") |
|
return() |
|
endif() |
|
if(NOT ${_COMPONENT} IN_LIST ${installed_components_in}) |
|
message(ERROR " get_requested_components: Component `${_COMPONENT}` is supported by opentelemetry-cpp but not installed. Installed components include: ${${installed_components_in}}") |
|
return() |
|
endif() |
|
get_dependent_components(${_COMPONENT} _DEPENDENT_COMPONENTS) |
|
list(APPEND result ${_DEPENDENT_COMPONENTS}) |
|
list(APPEND result ${_COMPONENT}) |
|
endforeach() |
|
list(REMOVE_DUPLICATES result) |
|
set(${requested_components_out} ${result} PARENT_SCOPE) |
|
endif() |
|
endfunction() |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
# Function to get the targets for a component. |
|
#------------------------------------------------------------------------- |
|
function(get_component_targets component_in targets_out) |
|
set(result "") |
|
if(NOT ${component_in} IN_LIST OTEL_BUILT_COMPONENTS_LIST) |
|
message(ERROR " get_component_targets: Component `${component_in}` component is not a built component of the opentelemetry-cpp package.") |
|
else() |
|
set(targets_var "COMPONENT_${component_in}_TARGETS") |
|
if(DEFINED ${targets_var}) |
|
set(result ${${targets_var}}) |
|
endif() |
|
endif() |
|
set(${targets_out} ${result} PARENT_SCOPE) |
|
endfunction() |
|
|
|
#------------------------------------------------------------------------- |
|
# Get targets for a list of components. |
|
#------------------------------------------------------------------------- |
|
function(get_targets components_in targets_out) |
|
set(result "") |
|
foreach(_comp IN LISTS ${components_in}) |
|
get_component_targets(${_comp} comp_targets) |
|
foreach(target IN LISTS comp_targets) |
|
list(APPEND result ${target}) |
|
endforeach() |
|
endforeach() |
|
set(${targets_out} ${result} PARENT_SCOPE) |
|
endfunction() |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
# Check if a target is imported for a list of targets. |
|
#------------------------------------------------------------------------- |
|
function(check_targets_imported targets_in) |
|
set(result TRUE) |
|
foreach(_target IN LISTS ${targets_in}) |
|
if(TARGET ${_target}) |
|
message(DEBUG "check_targets_imported: imported target `${_target}`") |
|
else() |
|
message(FATAL_ERROR " check_targets_imported: failed to import target `${_target}`") |
|
set(result FALSE) |
|
endif() |
|
endforeach() |
|
set(${result_bool_out} ${result} PARENT_SCOPE) |
|
endfunction() |
|
|
|
#------------------------------------------------------------------------- |
|
# Check if a dependency is expected and required |
|
#------------------------------------------------------------------------- |
|
function (is_dependency_required dependency_in components_in is_required_out) |
|
foreach(_component IN LISTS ${components_in}) |
|
if(${dependency_in} IN_LIST COMPONENT_${_component}_THIRDPARTY_DEPENDS) |
|
set(${is_required_out} TRUE PARENT_SCOPE) |
|
return() |
|
endif() |
|
endforeach() |
|
endfunction() |
|
|
|
#------------------------------------------------------------------------- |
|
# Find all required and expected dependencies |
|
#------------------------------------------------------------------------- |
|
include(CMakeFindDependencyMacro) |
|
|
|
function(find_required_dependencies components_in) |
|
foreach(_dependency IN LISTS OTEL_THIRDPARTY_DEPENDENCIES_SUPPORTED) |
|
if(${_dependency}_FOUND) |
|
# The dependency is already found by another component. Continue. |
|
continue() |
|
endif() |
|
set(is_required FALSE) |
|
is_dependency_required(${_dependency} ${components_in} is_required) |
|
message(DEBUG "find_required_dependencies: dependency = ${_dependency}, is_required = ${is_required}") |
|
if(is_required) |
|
message(DEBUG "find_required_dependencies: calling find_dependency(${_dependency} ${OTEL_${_dependency}_SEARCH_MODE} )...") |
|
find_dependency(${_dependency} ${OTEL_${_dependency}_SEARCH_MODE}) |
|
endif() |
|
endforeach() |
|
endfunction() |