| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | # Copyright The OpenTelemetry Authors# SPDX-License-Identifier: Apache-2.0include("${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()
 |