From 96e5078cfffbf35dca590326e321db607730d3f6 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Fri, 8 Dec 2023 13:54:37 -0800 Subject: [PATCH] [BUILD] Accept path list in OPENTELEMETRY_EXTERNAL_COMPONENT_PATH (#2439) --- ...entelemetry-build-external-component.cmake | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/cmake/opentelemetry-build-external-component.cmake b/cmake/opentelemetry-build-external-component.cmake index 2d8d78afbf..74b6515209 100644 --- a/cmake/opentelemetry-build-external-component.cmake +++ b/cmake/opentelemetry-build-external-component.cmake @@ -1,10 +1,19 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 +function(get_directory_name_in_path PATH_VAR RESULT_VAR) + # get_filename_component does not work with paths ending in / or \, so remove it. + string(REGEX REPLACE "[/\\]$" "" PATH_TRIMMED "${PATH_VAR}") + + get_filename_component(DIR_NAME ${PATH_TRIMMED} NAME) + + set(${RESULT_VAR} "${DIR_NAME}" PARENT_SCOPE) +endfunction() + # Enable building external components through otel-cpp build # The config options are -# - OPENTELEMETRY_EXTERNAL_COMPONENT_PATH - Setting local path of the external -# component as env variable +# - OPENTELEMETRY_EXTERNAL_COMPONENT_PATH - Setting local paths of the external +# component as env variable. Multiple paths can be set by separating them with. # - OPENTELEMETRY_EXTERNAL_COMPONENT_URL Setting github-repo of external component # as env variable @@ -13,13 +22,18 @@ if(OPENTELEMETRY_EXTERNAL_COMPONENT_PATH) # Add custom component path to build tree and consolidate binary artifacts in # current project binary output directory. - add_subdirectory(${OPENTELEMETRY_EXTERNAL_COMPONENT_PATH} - ${PROJECT_BINARY_DIR}/external) + foreach(DIR IN LISTS OPENTELEMETRY_EXTERNAL_COMPONENT_PATH) + get_directory_name_in_path(${DIR} EXTERNAL_EXPORTER_DIR_NAME) + add_subdirectory(${DIR} ${PROJECT_BINARY_DIR}/external/${EXTERNAL_EXPORTER_DIR_NAME}) + endforeach() elseif(DEFINED ENV{OPENTELEMETRY_EXTERNAL_COMPONENT_PATH}) # Add custom component path to build tree and consolidate binary artifacts in # current project binary output directory. - add_subdirectory($ENV{OPENTELEMETRY_EXTERNAL_COMPONENT_PATH} - ${PROJECT_BINARY_DIR}/external) + set(OPENTELEMETRY_EXTERNAL_COMPONENT_PATH_VAR $ENV{OPENTELEMETRY_EXTERNAL_COMPONENT_PATH}) + foreach(DIR IN LISTS OPENTELEMETRY_EXTERNAL_COMPONENT_PATH_VAR) + get_directory_name_in_path(${DIR} EXTERNAL_EXPORTER_DIR_NAME) + add_subdirectory(${DIR} ${PROJECT_BINARY_DIR}/external/${EXTERNAL_EXPORTER_DIR_NAME}) + endforeach() elseif(DEFINED $ENV{OPENTELEMETRY_EXTERNAL_COMPONENT_URL}) # This option requires CMake 3.11+: add standard remote repo to build tree. include(FetchContent)