This is an automated email from the ASF dual-hosted git repository.

gangwu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new de7f1dc  chore: add support to customize download url of vendored 
dependencies (#319)
de7f1dc is described below

commit de7f1dcacb4c87caf2c4585de2ba36fe0d847c29
Author: Subham <[email protected]>
AuthorDate: Tue Nov 25 07:52:20 2025 +0530

    chore: add support to customize download url of vendored dependencies (#319)
    
    Fixes #239
---
 README.md                                      |  22 +++++
 cmake_modules/IcebergThirdpartyToolchain.cmake | 107 +++++++++++++++++++++----
 2 files changed, 113 insertions(+), 16 deletions(-)

diff --git a/README.md b/README.md
index 26bcf5a..883e656 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,28 @@ C++ implementation of [Apache 
Iceberg™](https://iceberg.apache.org/).
 - CMake 3.25 or higher
 - C++23 compliant compiler
 
+## Customizing Dependency URLs
+
+If you experience network issues when downloading dependencies, you can 
customize the download URLs using environment variables.
+
+The following environment variables can be set to customize dependency URLs:
+
+- `ICEBERG_ARROW_URL`: Apache Arrow tarball URL
+- `ICEBERG_AVRO_URL`: Apache Avro tarball URL
+- `ICEBERG_AVRO_GIT_URL`: Apache Avro git repository URL
+- `ICEBERG_NANOARROW_URL`: Nanoarrow tarball URL
+- `ICEBERG_CROARING_URL`: CRoaring tarball URL
+- `ICEBERG_NLOHMANN_JSON_URL`: nlohmann-json tarball URL
+- `ICEBERG_SPDLOG_URL`: spdlog tarball URL
+- `ICEBERG_CPR_URL`: cpr tarball URL
+
+Example usage:
+
+```bash
+export ICEBERG_ARROW_URL="https://your-mirror.com/apache-arrow-22.0.0.tar.gz";
+cmake -S . -B build
+```
+
 ## Build
 
 ### Build, Run Test and Install Core Libraries
diff --git a/cmake_modules/IcebergThirdpartyToolchain.cmake 
b/cmake_modules/IcebergThirdpartyToolchain.cmake
index 8dce58f..04e01ed 100644
--- a/cmake_modules/IcebergThirdpartyToolchain.cmake
+++ b/cmake_modules/IcebergThirdpartyToolchain.cmake
@@ -22,6 +22,22 @@ set(ICEBERG_ARROW_INSTALL_INTERFACE_LIBS)
 
 # ----------------------------------------------------------------------
 # Versions and URLs for toolchain builds
+#
+# The following environment variables can be set to customize dependency URLs:
+#
+# ICEBERG_ARROW_URL          - Apache Arrow tarball URL
+# ICEBERG_AVRO_URL           - Apache Avro tarball URL
+# ICEBERG_AVRO_GIT_URL       - Apache Avro git repository URL
+# ICEBERG_NANOARROW_URL      - Nanoarrow tarball URL
+# ICEBERG_CROARING_URL       - CRoaring tarball URL
+# ICEBERG_NLOHMANN_JSON_URL  - nlohmann-json tarball URL
+# ICEBERG_SPDLOG_URL         - spdlog tarball URL
+# ICEBERG_CPR_URL            - cpr tarball URL
+#
+# Example usage:
+#   export 
ICEBERG_ARROW_URL="https://your-mirror.com/apache-arrow-22.0.0.tar.gz";
+#   cmake -S . -B build
+#
 
 set(ICEBERG_ARROW_BUILD_VERSION "22.0.0")
 set(ICEBERG_ARROW_BUILD_SHA256_CHECKSUM
@@ -164,17 +180,42 @@ function(resolve_avro_dependency)
       OFF
       CACHE BOOL "" FORCE)
 
-  fetchcontent_declare(avro-cpp
-                       ${FC_DECLARE_COMMON_OPTIONS}
-                       # TODO: switch to Apache Avro 1.13.0 once released.
-                       GIT_REPOSITORY https://github.com/apache/avro.git
-                       GIT_TAG e6c308780e876b4c11a470b9900995947f7b0fb5
-                       SOURCE_SUBDIR
-                       lang/c++
-                       FIND_PACKAGE_ARGS
-                       NAMES
-                       avro-cpp
-                       CONFIG)
+  if(DEFINED ENV{ICEBERG_AVRO_URL})
+    # Support custom tarball URL
+    fetchcontent_declare(avro-cpp
+                         ${FC_DECLARE_COMMON_OPTIONS}
+                         URL $ENV{ICEBERG_AVRO_URL}
+                             SOURCE_SUBDIR
+                             lang/c++
+                             FIND_PACKAGE_ARGS
+                             NAMES
+                             avro-cpp
+                             CONFIG)
+  elseif(DEFINED ENV{ICEBERG_AVRO_GIT_URL})
+    # Support custom git URL for mirrors
+    fetchcontent_declare(avro-cpp
+                         ${FC_DECLARE_COMMON_OPTIONS}
+                         GIT_REPOSITORY $ENV{ICEBERG_AVRO_GIT_URL}
+                         GIT_TAG e6c308780e876b4c11a470b9900995947f7b0fb5
+                         SOURCE_SUBDIR
+                         lang/c++
+                         FIND_PACKAGE_ARGS
+                         NAMES
+                         avro-cpp
+                         CONFIG)
+  else()
+    # Default to GitHub - uses unreleased version
+    fetchcontent_declare(avro-cpp
+                         ${FC_DECLARE_COMMON_OPTIONS}
+                         GIT_REPOSITORY https://github.com/apache/avro.git
+                         GIT_TAG e6c308780e876b4c11a470b9900995947f7b0fb5
+                         SOURCE_SUBDIR
+                         lang/c++
+                         FIND_PACKAGE_ARGS
+                         NAMES
+                         avro-cpp
+                         CONFIG)
+  endif()
 
   fetchcontent_makeavailable(avro-cpp)
 
@@ -221,9 +262,17 @@ endfunction()
 function(resolve_nanoarrow_dependency)
   prepare_fetchcontent()
 
+  if(DEFINED ENV{ICEBERG_NANOARROW_URL})
+    set(NANOARROW_URL "$ENV{ICEBERG_NANOARROW_URL}")
+  else()
+    set(NANOARROW_URL
+        
"https://dlcdn.apache.org/arrow/apache-arrow-nanoarrow-0.7.0/apache-arrow-nanoarrow-0.7.0.tar.gz";
+    )
+  endif()
+
   fetchcontent_declare(nanoarrow
                        ${FC_DECLARE_COMMON_OPTIONS}
-                       URL 
"https://dlcdn.apache.org/arrow/apache-arrow-nanoarrow-0.7.0/apache-arrow-nanoarrow-0.7.0.tar.gz";
+                       URL ${NANOARROW_URL}
                            FIND_PACKAGE_ARGS
                            NAMES
                            nanoarrow
@@ -270,9 +319,16 @@ function(resolve_croaring_dependency)
   set(ENABLE_ROARING_TESTS OFF)
   set(ENABLE_ROARING_MICROBENCHMARKS OFF)
 
+  if(DEFINED ENV{ICEBERG_CROARING_URL})
+    set(CROARING_URL "$ENV{ICEBERG_CROARING_URL}")
+  else()
+    set(CROARING_URL
+        
"https://github.com/RoaringBitmap/CRoaring/archive/refs/tags/v4.3.11.tar.gz";)
+  endif()
+
   fetchcontent_declare(croaring
                        ${FC_DECLARE_COMMON_OPTIONS}
-                       URL 
"https://github.com/RoaringBitmap/CRoaring/archive/refs/tags/v4.3.11.tar.gz";
+                       URL ${CROARING_URL}
                            FIND_PACKAGE_ARGS
                            NAMES
                            roaring
@@ -318,9 +374,16 @@ function(resolve_nlohmann_json_dependency)
       OFF
       CACHE BOOL "" FORCE)
 
+  if(DEFINED ENV{ICEBERG_NLOHMANN_JSON_URL})
+    set(NLOHMANN_JSON_URL "$ENV{ICEBERG_NLOHMANN_JSON_URL}")
+  else()
+    set(NLOHMANN_JSON_URL
+        
"https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz";)
+  endif()
+
   fetchcontent_declare(nlohmann_json
                        ${FC_DECLARE_COMMON_OPTIONS}
-                       URL 
"https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz";
+                       URL ${NLOHMANN_JSON_URL}
                            FIND_PACKAGE_ARGS
                            NAMES
                            nlohmann_json
@@ -378,9 +441,15 @@ function(resolve_spdlog_dependency)
       ON
       CACHE BOOL "" FORCE)
 
+  if(DEFINED ENV{ICEBERG_SPDLOG_URL})
+    set(SPDLOG_URL "$ENV{ICEBERG_SPDLOG_URL}")
+  else()
+    set(SPDLOG_URL 
"https://github.com/gabime/spdlog/archive/refs/tags/v1.15.3.tar.gz";)
+  endif()
+
   fetchcontent_declare(spdlog
                        ${FC_DECLARE_COMMON_OPTIONS}
-                       URL 
"https://github.com/gabime/spdlog/archive/refs/tags/v1.15.3.tar.gz";
+                       URL ${SPDLOG_URL}
                            FIND_PACKAGE_ARGS
                            NAMES
                            spdlog
@@ -440,9 +509,15 @@ function(resolve_cpr_dependency)
   set(CPR_ENABLE_SSL ON)
   set(CPR_USE_SYSTEM_CURL ON)
 
+  if(DEFINED ENV{ICEBERG_CPR_URL})
+    set(CPR_URL "$ENV{ICEBERG_CPR_URL}")
+  else()
+    set(CPR_URL 
"https://github.com/libcpr/cpr/archive/refs/tags/1.12.0.tar.gz";)
+  endif()
+
   fetchcontent_declare(cpr
                        ${FC_DECLARE_COMMON_OPTIONS}
-                       URL 
https://github.com/libcpr/cpr/archive/refs/tags/1.12.0.tar.gz
+                       URL ${CPR_URL}
                            FIND_PACKAGE_ARGS
                            NAMES
                            cpr

Reply via email to