123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- # 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()
|