akshatgupta08 opened a new issue, #1028: URL: https://github.com/apache/iceberg-cpp/issues/1028
After #1021 (commit 31659e7), configuring iceberg-cpp with vendored Arrow fails on CMake 3.28 (Ubuntu 24.04 LTS). The rename of the FetchContent content name from VendoredArrow to Arrow creates a variable-name collision with Arrow's own project(arrow) call, which Arrow's cpp/cmake_modules/ThirdpartyToolchain.cmake relies on. Environment - Ubuntu 24.04 LTS - CMake 3.28.3 - GCC 14.2.0 - Fresh clone of main Reproduction git clone https://github.com/apache/iceberg-cpp.git cd iceberg-cpp cmake -S . -B build -G Ninja -DCMAKE_C_COMPILER=gcc-14 -DCMAKE_CXX_COMPILER=g++-14 Error CMake Error at build/_deps/arrow-src/cpp/cmake_modules/ThirdpartyToolchain.cmake:446 (file): file STRINGS file "<build>/_deps/arrow-src/thirdparty/versions.txt" cannot be read. The file actually lives at _deps/arrow-src/cpp/thirdparty/versions.txt (inside cpp/). Because versions.txt can't be read, all *_BUILD_SHA256_CHECKSUM variables become empty and the subsequent Boost ExternalProject_Add fails with URL_HASH SHA256= (empty). Root cause Arrow's cpp/cmake_modules/ThirdpartyToolchain.cmake sets: set(THIRDPARTY_DIR "${arrow_SOURCE_DIR}/thirdparty") In a standalone Arrow build, project(arrow) in cpp/CMakeLists.txt sets arrow_SOURCE_DIR to the cpp/ directory. But when Arrow is pulled in by iceberg-cpp via FetchContent_Declare(Arrow ...), CMake pre-sets arrow_SOURCE_DIR to the tarball root (parent of cpp/). On CMake 3.28, the subsequent project(arrow) does not override the inherited arrow_SOURCE_DIR — PROJECT_SOURCE_DIR is updated, but arrow_SOURCE_DIR keeps the FetchContent value. Verified with a minimal repro: cmake_minimum_required(VERSION 3.25) project(TestFC) cmake_minimum_required(VERSION 3.25) project(TestFC) include(FetchContent) FetchContent_Declare(Arrow URL file:///path/to/apache-arrow-25.0.0.tar.gz SOURCE_SUBDIR cpp) FetchContent_Populate(Arrow) # arrow_SOURCE_DIR is set by FetchContent to the tarball root # Add a subdir that calls project(arrow) # → PROJECT_SOURCE_DIR updates to <root>/subdir, but arrow_SOURCE_DIR does NOT change Before #1021 this worked because the FetchContent name was VendoredArrow (variable vendoredarrow_SOURCE_DIR), separate from Arrow's own arrow_SOURCE_DIR. Why CI didn't catch it CI runs on ubuntu-26.04, which ships a newer CMake. Either the newer CMake behaves differently for project() overrides, or a system Arrow is picked up by FIND_PACKAGE_ARGS CONFIG. Either way, CMake 3.28 on Ubuntu 24.04 LTS — the current widely-used LTS — isn't exercised. Suggested fix Rename back to VendoredArrow (or any name other than Arrow/arrow) to avoid the collision. Alternatively, consider adding ubuntu-24.04 with its stock CMake to the CI matrix. Workaround git revert 31659e7 locally. -- 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
