kou commented on code in PR #36835:
URL: https://github.com/apache/arrow/pull/36835#discussion_r1298073330


##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5055,114 @@ if(ARROW_S3)
   endif()
 endif()
 
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azure_sdk)
+  message(STATUS "Building Azure SDK for C++ from source")
+
+  find_curl()
+  find_package(LibXml2 REQUIRED)
+  add_custom_target(azure_sdk_dependencies)
+
+  set(AZURE_SDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azure-sdk_ep-install")
+  set(AZURE_SDK_INCLUDE_DIR "${AZURE_SDK_PREFIX}/include")
+
+  set(AZURE_SDK_COMMON_CMAKE_ARGS
+      ${EP_COMMON_CMAKE_ARGS}
+      "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+      "-DCMAKE_PREFIX_PATH=${AZURE_SDK_PREFIX}"
+      -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+      -DWARNINGS_AS_ERRORS=OFF 
+      -DVCPKG_OVERLAY_PORTS=${CMAKE_SOURCE_DIR}/overlays)
+
+  file(MAKE_DIRECTORY ${AZURE_SDK_INCLUDE_DIR})
+  set(AZURE_CORE_STATIC_LIBRARY
+      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+  )
+  set(AZURE_IDENTITY_STATIC_LIBRARY
+      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+  )
+  set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+  )
+  set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+  )
+  set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+  )
+  externalproject_add(azure-sdk_ep
+                      ${EP_COMMON_OPTIONS}
+                      INSTALL_DIR ${AZURE_SDK_PREFIX}
+                      URL ${ARROW_AZURE_SDK_URL}
+                      URL_HASH 
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+                      CMAKE_ARGS ${AZURE_SDK_COMMON_CMAKE_ARGS}
+                      BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+                                       ${AZURE_IDENTITY_STATIC_LIBRARY}
+                                       ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+                                       ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+                                       
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+                      DEPENDS azure_sdk_dependencies)
+  add_library(Azure::azure-core STATIC IMPORTED)
+  set_target_properties(Azure::azure-core
+                        PROPERTIES IMPORTED_LOCATION 
${AZURE_CORE_STATIC_LIBRARY}
+                                   INTERFACE_INCLUDE_DIRECTORIES
+                                   ${AZURE_SDK_INCLUDE_DIR})
+  set_property(TARGET Azure::azure-core
+               PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::SSL)
+  add_dependencies(Azure::azure-core azure-sdk_ep)

Review Comment:
   Hmm. It may be better that we use `FetchContent` 
https://cmake.org/cmake/help/latest/module/FetchContent.html instead of 
`ExternalProject` because we can avoid this manual CMake targets creation and 
Azure SDK for C++ recommends it 
https://github.com/Azure/azure-sdk-for-cpp#cmake-project--fetch-content .
   
   ```diff
   diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake 
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
   index fcf6d5609..ae320f5fc 100644
   --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
   +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
   @@ -975,6 +975,8 @@ else()
      set(MAKE_BUILD_ARGS "-j${NPROC}")
    endif()
    
   +include(FetchContent)
   +
    # ----------------------------------------------------------------------
    # Find pthreads
    
   @@ -5058,92 +5060,27 @@ endif()
    # ----------------------------------------------------------------------
    # Azure SDK for C++
    
   -macro(build_azure_sdk)
   +function(build_azure_sdk)
      message(STATUS "Building Azure SDK for C++ from source")
    
   -  find_curl()
   -  find_package(LibXml2 REQUIRED)
   +  fetchcontent_declare(azure_sdk
   +                       URL ${ARROW_AZURE_SDK_URL}
   +                       URL_HASH 
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}")
   +  fetchcontent_getproperties(azure_sdk)
   +  if(NOT azure_sdk_POPULATED)
   +    fetchcontent_populate(azure_sdk)
   +    set(BUILD_PERFORMANCE_TESTS FALSE)
   +    set(BUILD_SAMPLES FALSE)
   +    set(BUILD_TESTING FALSE)
   +    set(BUILD_WINDOWS_UWP TRUE)
   +    set(CMAKE_EXPORT_NO_PACKAGE_REGISTRY TRUE)
   +    set(DISABLE_AZURE_CORE_OPENTELEMETRY TRUE)
   +    add_subdirectory(${azure_sdk_SOURCE_DIR} ${azure_sdk_BINARY_DIR} 
EXCLUDE_FROM_ALL)
    
   -  set(AZURE_SDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azure-sdk_ep-install")
   -  set(AZURE_SDK_INCLUDE_DIR "${AZURE_SDK_PREFIX}/include")
   +  endif()
    
   -  set(AZURE_SDK_COMMON_CMAKE_ARGS
   -      ${EP_COMMON_CMAKE_ARGS}
   -      "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
   -      "-DCMAKE_PREFIX_PATH=${AZURE_SDK_PREFIX}"
   -      -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
   -      -DWARNINGS_AS_ERRORS=OFF 
   -      -DVCPKG_OVERLAY_PORTS=${CMAKE_SOURCE_DIR}/overlays)
   -
   -  file(MAKE_DIRECTORY ${AZURE_SDK_INCLUDE_DIR})
   -  set(AZURE_CORE_STATIC_LIBRARY
   -      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
   -  )
   -  set(AZURE_IDENTITY_STATIC_LIBRARY
   -      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
   -  )
   -  set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
   -      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
   -  )
   -  set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
   -      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
   -  )
   -  set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
   -      
"${AZURE_SDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
   -  )
   -  externalproject_add(azure-sdk_ep
   -                      ${EP_COMMON_OPTIONS}
   -                      INSTALL_DIR ${AZURE_SDK_PREFIX}
   -                      URL ${ARROW_AZURE_SDK_URL}
   -                      URL_HASH 
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
   -                      CMAKE_ARGS ${AZURE_SDK_COMMON_CMAKE_ARGS}
   -                      BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
   -                                       ${AZURE_IDENTITY_STATIC_LIBRARY}
   -                                       ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
   -                                       
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
   -                                       
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY})
   -  add_library(Azure::azure-core STATIC IMPORTED)
   -  set_target_properties(Azure::azure-core
   -                        PROPERTIES IMPORTED_LOCATION 
${AZURE_CORE_STATIC_LIBRARY}
   -                                   INTERFACE_INCLUDE_DIRECTORIES
   -                                   ${AZURE_SDK_INCLUDE_DIR})
   -  set_property(TARGET Azure::azure-core
   -               PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::SSL)
   -  add_dependencies(Azure::azure-core azure-sdk_ep)
   -
   -  add_library(Azure::azure-identity STATIC IMPORTED)
   -  set_target_properties(Azure::azure-identity 
   -                        PROPERTIES IMPORTED_LOCATION 
${AZURE_IDENTITY_STATIC_LIBRARY})
   -  set_property(TARGET Azure::azure-identity
   -               PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto 
Azure::azure-core)
   -
   -  add_library(Azure::azure-storage-common STATIC IMPORTED)
   -  set_target_properties(Azure::azure-storage-common
   -                        PROPERTIES IMPORTED_LOCATION 
${AZURE_STORAGE_COMMON_STATIC_LIBRARY})
   -  set_property(TARGET Azure::azure-storage-common
   -               PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::SSL 
OpenSSL::Crypto LibXml2::LibXml2 Azure::azure-core)
   -
   -  add_library(Azure::azure-storage-blobs STATIC IMPORTED)
   -  set_target_properties(Azure::azure-storage-blobs
   -                        PROPERTIES IMPORTED_LOCATION 
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY})
   -  set_property(TARGET Azure::azure-storage-blobs
   -               PROPERTY INTERFACE_LINK_LIBRARIES 
Azure::azure-storage-common)
   -
   -  add_library(Azure::azure-storage-files-datalake STATIC IMPORTED)
   -  set_target_properties(Azure::azure-storage-files-datalake 
   -                        PROPERTIES IMPORTED_LOCATION 
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY})
   -  set_property(TARGET Azure::azure-storage-files-datalake
   -               PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-storage-blobs)
   -
   -  set(AZURE_SDK_VENDORED TRUE)
   -  set(AZURE_SDK_LIBRARIES)
   -  list(APPEND
   -       AZURE_SDK_LIBRARIES
   -       Azure::azure-core
   -       Azure::azure-identity
   -       Azure::azure-storage-blobs
   -       Azure::azure-storage-common
   -       Azure::azure-storage-files-datalake)
   +  set(AZURE_SDK_VENDORED
   +      TRUE
   +      PARENT_SCOPE)
      list(APPEND
           ARROW_BUNDLED_STATIC_LIBS
           Azure::azure-core
   @@ -5151,14 +5088,19 @@ macro(build_azure_sdk)
           Azure::azure-storage-blobs
           Azure::azure-storage-common
           Azure::azure-storage-files-datalake)
   -
   -  set(AZURE_SDK_LINK_LIBRARIES ${AZURE_SDK_LIBRARIES})
   -endmacro()
   +  set(ARROW_BUNDLED_STATIC_LIBS
   +      ${ARROW_BUNDLED_STATIC_LIBS}
   +      PARENT_SCOPE)
   +endfunction()
    
    if(ARROW_WITH_AZURE_SDK)
      resolve_dependency(Azure)
   -  message(STATUS "Found Azure SDK headers: ${AZURE_SDK_INCLUDE_DIR}")
   -  message(STATUS "Found Azure SDK libraries: ${AZURE_SDK_LINK_LIBRARIES}")
   +  set(AZURE_SDK_LINK_LIBRARIES
   +      Azure::azure-storage-files-datalake
   +      Azure::azure-storage-common
   +      Azure::azure-storage-blobs
   +      Azure::azure-identity
   +      Azure::azure-core)
    endif()
    
    # ----------------------------------------------------------------------
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to