From 9c0c088cbd74e47912ae084344fc61db1e0a4748 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Thu, 21 May 2026 09:43:03 +0900 Subject: [PATCH] GH-50005: [C++] Use FetchContent for RapidJSON --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 44 ++++++++++----------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 8542e73c348..f0c443a315c 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -2782,34 +2782,30 @@ if(ARROW_BUILD_BENCHMARKS) FALSE) endif() -macro(build_rapidjson) - message(STATUS "Building RapidJSON from source") - set(RAPIDJSON_PREFIX - "${CMAKE_CURRENT_BINARY_DIR}/rapidjson_ep/src/rapidjson_ep-install") - set(RAPIDJSON_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - -DRAPIDJSON_BUILD_DOC=OFF - -DRAPIDJSON_BUILD_EXAMPLES=OFF - -DRAPIDJSON_BUILD_TESTS=OFF - "-DCMAKE_INSTALL_PREFIX=${RAPIDJSON_PREFIX}") - - externalproject_add(rapidjson_ep - ${EP_COMMON_OPTIONS} - PREFIX "${CMAKE_BINARY_DIR}" - URL ${RAPIDJSON_SOURCE_URL} - URL_HASH "SHA256=${ARROW_RAPIDJSON_BUILD_SHA256_CHECKSUM}" - CMAKE_ARGS ${RAPIDJSON_CMAKE_ARGS}) +function(build_rapidjson) + list(APPEND CMAKE_MESSAGE_INDENT "RapidJSON: ") + message(STATUS "Building from source") - set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_PREFIX}/include") - # The include directory must exist before it is referenced by a target. - file(MAKE_DIRECTORY "${RAPIDJSON_INCLUDE_DIR}") + fetchcontent_declare(rapidjson + ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE + URL ${RAPIDJSON_SOURCE_URL} + URL_HASH "SHA256=${ARROW_RAPIDJSON_BUILD_SHA256_CHECKSUM}") + prepare_fetchcontent() + set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib") + set(RAPIDJSON_BUILD_DOC OFF) + set(RAPIDJSON_BUILD_EXAMPLES OFF) + set(RAPIDJSON_BUILD_TESTS OFF) + fetchcontent_makeavailable(rapidjson) add_library(RapidJSON INTERFACE IMPORTED) - target_include_directories(RapidJSON INTERFACE "${RAPIDJSON_INCLUDE_DIR}") - add_dependencies(RapidJSON rapidjson_ep) + target_include_directories(RapidJSON INTERFACE "${rapidjson_SOURCE_DIR}/include") + add_dependencies(RapidJSON rapidjson) - set(RAPIDJSON_VENDORED TRUE) -endmacro() + set(RAPIDJSON_VENDORED + TRUE + PARENT_SCOPE) + list(POP_BACK CMAKE_MESSAGE_INDENT) +endfunction() if(ARROW_WITH_RAPIDJSON) set(ARROW_RAPIDJSON_REQUIRED_VERSION "1.1.0")