diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index c7c744e676fa..aa5c426aff31 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -3033,138 +3033,26 @@ function(build_absl) set(ABSL_VENDORED TRUE PARENT_SCOPE) - set(ABSL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/absl_fc-install") - set(ABSL_PREFIX - "${ABSL_PREFIX}" - PARENT_SCOPE) if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) string(APPEND CMAKE_CXX_FLAGS " -include stdint.h") endif() fetchcontent_declare(absl + ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE URL ${ABSL_SOURCE_URL} URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}") prepare_fetchcontent() - # We have to enable Abseil install to generate abslConfig.cmake - # so google-cloud-cpp can find Abseil through ExternalProject_Add. Our expectation - # is that this will not be necessary once google-cloud-cpp supports FetchContent. + # We have to enable Abseil install to add Abseil targets to an export set. + # But we don't install Abseil by EXCLUDE_FROM_ALL. set(ABSL_ENABLE_INSTALL ON) fetchcontent_makeavailable(absl) - # This custom target is required due to a timing issue between FetchContent - # and the install command below, which is necessary for google-cloud-cpp to find Abseil - # due to mixing FetchContent and ExternalProject_Add. - # Create a target that depends on ALL Abseil libraries that will be installed. - # This ensures they're all built before we try to install. - add_custom_target(absl_built - DEPENDS absl::bad_any_cast_impl - absl::bad_optional_access - absl::bad_variant_access - absl::base - absl::city - absl::civil_time - absl::cord - absl::cord_internal - absl::cordz_functions - absl::cordz_handle - absl::cordz_info - absl::cordz_sample_token - absl::debugging_internal - absl::demangle_internal - absl::examine_stack - absl::exponential_biased - absl::failure_signal_handler - absl::flags - absl::flags_commandlineflag - absl::flags_commandlineflag_internal - absl::flags_config - absl::flags_internal - absl::flags_marshalling - absl::flags_parse - absl::flags_private_handle_accessor - absl::flags_program_name - absl::flags_reflection - absl::flags_usage - absl::flags_usage_internal - absl::graphcycles_internal - absl::hash - absl::hashtablez_sampler - absl::int128 - absl::leak_check - absl::leak_check_disable - absl::log_severity - absl::low_level_hash - absl::malloc_internal - absl::periodic_sampler - absl::random_distributions - absl::random_internal_distribution_test_util - absl::random_internal_platform - absl::random_internal_pool_urbg - absl::random_internal_randen - absl::random_internal_randen_hwaes - absl::random_internal_randen_hwaes_impl - absl::random_internal_randen_slow - absl::random_internal_seed_material - absl::random_seed_gen_exception - absl::random_seed_sequences - absl::raw_hash_set - absl::raw_logging_internal - absl::scoped_set_env - absl::spinlock_wait - absl::stacktrace - absl::status - absl::statusor - absl::str_format_internal - absl::strerror - absl::strings - absl::strings_internal - absl::symbolize - absl::synchronization - absl::throw_delegate - absl::time - absl::time_zone) - - # google-cloud-cpp requires Abseil to be installed to a known location. - # We have to do this in two steps to avoid double installation of Abseil - # when Arrow is installed. - # Disable Abseil's install script this target runs after Abseil is built - # and replaces its cmake_install.cmake with a no-op so Arrow does not install it - # outside of the build tree. - add_custom_command(OUTPUT "${absl_BINARY_DIR}/cmake_install.cmake.saved" - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${absl_BINARY_DIR}/cmake_install.cmake" - "${absl_BINARY_DIR}/cmake_install.cmake.saved" - COMMAND ${CMAKE_COMMAND} -E echo - "# Abseil install disabled to prevent double installation with Arrow" - > "${absl_BINARY_DIR}/cmake_install.cmake" - DEPENDS absl_built - COMMENT "Disabling Abseil's install to prevent double installation" - VERBATIM) - - add_custom_target(absl_install_disabled ALL - DEPENDS "${absl_BINARY_DIR}/cmake_install.cmake.saved") - - # Install Abseil to ABSL_PREFIX for google-cloud-cpp to find. - # Using the saved original cmake_install.cmake.saved install script - # for other dependencies to find Abseil. - add_custom_command(OUTPUT "${ABSL_PREFIX}/.absl_installed" - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${absl_BINARY_DIR}/cmake_install.cmake.saved" - "${absl_BINARY_DIR}/cmake_install.cmake.tmp" - COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${ABSL_PREFIX} - -DCMAKE_INSTALL_CONFIG_NAME=$ -P - "${absl_BINARY_DIR}/cmake_install.cmake.tmp" || - ${CMAKE_COMMAND} -E true - COMMAND ${CMAKE_COMMAND} -E touch "${ABSL_PREFIX}/.absl_installed" - DEPENDS absl_install_disabled - COMMENT "Installing Abseil to ${ABSL_PREFIX} for gRPC" - VERBATIM) - - # Make absl_fc depend on the install completion marker - add_custom_target(absl_fc DEPENDS "${ABSL_PREFIX}/.absl_installed") + if(CMAKE_VERSION VERSION_LESS 3.28) + set_property(DIRECTORY ${absl_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) + endif() if(APPLE) # This is due to upstream absl::cctz issue @@ -3403,7 +3291,7 @@ function(build_crc32c_once) PARENT_SCOPE) fetchcontent_declare(crc32c - ${FC_DECLARE_COMMON_OPTIONS} + ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE URL ${CRC32C_SOURCE_URL} URL_HASH "SHA256=${ARROW_CRC32C_BUILD_SHA256_CHECKSUM}") @@ -3412,53 +3300,17 @@ function(build_crc32c_once) set(CRC32C_BUILD_TESTS OFF) set(CRC32C_BUILD_BENCHMARKS OFF) set(CRC32C_USE_GLOG OFF) - set(CRC32C_INSTALL ON) fetchcontent_makeavailable(crc32c) + if(CMAKE_VERSION VERSION_LESS 3.28) + set_property(DIRECTORY ${crc32c_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) + endif() + # Create alias target for consistency (crc32c exports as Crc32c::crc32c when installed) if(NOT TARGET Crc32c::crc32c) add_library(Crc32c::crc32c ALIAS crc32c) endif() - # google-cloud-cpp requires crc32c to be installed to a known location. - # We have to do this in two steps to avoid double installation of crc32c - # when Arrow is installed. - # This custom target ensures crc32c is built before we install. - add_custom_target(crc32c_built DEPENDS Crc32c::crc32c) - - # Disable crc32c's install script after it's built to prevent double installation. - add_custom_command(OUTPUT "${crc32c_BINARY_DIR}/cmake_install.cmake.saved" - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${crc32c_BINARY_DIR}/cmake_install.cmake" - "${crc32c_BINARY_DIR}/cmake_install.cmake.saved" - COMMAND ${CMAKE_COMMAND} -E echo - "# crc32c install disabled to prevent double installation with Arrow" - > "${crc32c_BINARY_DIR}/cmake_install.cmake" - DEPENDS crc32c_built - COMMENT "Disabling crc32c install to prevent double installation" - VERBATIM) - - add_custom_target(crc32c_install_disabled ALL - DEPENDS "${crc32c_BINARY_DIR}/cmake_install.cmake.saved") - - # Install crc32c to CRC32C_PREFIX for google-cloud-cpp to find. - add_custom_command(OUTPUT "${CRC32C_PREFIX}/.crc32c_installed" - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${crc32c_BINARY_DIR}/cmake_install.cmake.saved" - "${crc32c_BINARY_DIR}/cmake_install.cmake.tmp" - COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${CRC32C_PREFIX} - -DCMAKE_INSTALL_CONFIG_NAME=$ -P - "${crc32c_BINARY_DIR}/cmake_install.cmake.tmp" || - ${CMAKE_COMMAND} -E true - COMMAND ${CMAKE_COMMAND} -E touch - "${CRC32C_PREFIX}/.crc32c_installed" - DEPENDS crc32c_install_disabled - COMMENT "Installing crc32c to ${CRC32C_PREFIX} for google-cloud-cpp" - VERBATIM) - - # Make crc32c_fc depend on the install completion marker. - add_custom_target(crc32c_fc DEPENDS "${CRC32C_PREFIX}/.crc32c_installed") - set(ARROW_BUNDLED_STATIC_LIBS ${ARROW_BUNDLED_STATIC_LIBS} Crc32c::crc32c PARENT_SCOPE) @@ -3477,7 +3329,7 @@ function(build_nlohmann_json) PARENT_SCOPE) fetchcontent_declare(nlohmann_json - ${FC_DECLARE_COMMON_OPTIONS} + ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE URL ${NLOHMANN_JSON_SOURCE_URL} URL_HASH "SHA256=${ARROW_NLOHMANN_JSON_BUILD_SHA256_CHECKSUM}") @@ -3489,7 +3341,7 @@ function(build_nlohmann_json) set(JSON_Install ON) fetchcontent_makeavailable(nlohmann_json) - # google-cloud-cpp requires nlohmann_json to be installed to a known location. + # opentelemetry requires nlohmann_json to be installed to a known location. # We have to do this in two steps to avoid double installation of nlohmann_json # when Arrow is installed. # This custom target ensures nlohmann_json is built before we install. @@ -3510,7 +3362,7 @@ function(build_nlohmann_json) add_custom_target(nlohmann_json_install_disabled ALL DEPENDS "${nlohmann_json_BINARY_DIR}/cmake_install.cmake.saved") - # Install nlohmann_json to NLOHMANN_JSON_PREFIX for google-cloud-cpp to find. + # Install nlohmann_json to NLOHMANN_JSON_PREFIX for opentelemetry to find. add_custom_command(OUTPUT "${NLOHMANN_JSON_PREFIX}/.nlohmann_json_installed" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${nlohmann_json_BINARY_DIR}/cmake_install.cmake.saved" @@ -3539,9 +3391,12 @@ if(ARROW_WITH_NLOHMANN_JSON) message(STATUS "Found nlohmann_json headers: ${nlohmann_json_INCLUDE_DIR}") endif() -macro(build_google_cloud_cpp_storage) - message(STATUS "Building google-cloud-cpp from source") - message(STATUS "Only building the google-cloud-cpp::storage component") +function(build_google_cloud_cpp_storage) + list(APPEND CMAKE_MESSAGE_INDENT "google-cloud-cpp: ") + message(STATUS "Building google-cloud-cpp from source using FetchContent") + set(GOOGLE_CLOUD_CPP_VENDORED + TRUE + PARENT_SCOPE) # List of dependencies taken from https://github.com/googleapis/google-cloud-cpp/blob/main/doc/packaging.md build_crc32c_once() @@ -3550,160 +3405,40 @@ macro(build_google_cloud_cpp_storage) # For now, force its inclusion from the underlying system or fail. find_curl() - # Build google-cloud-cpp, with only storage_client + fetchcontent_declare(google_cloud_cpp + ${FC_DECLARE_COMMON_OPTIONS} + URL ${google_cloud_cpp_storage_SOURCE_URL} + URL_HASH "SHA256=${ARROW_GOOGLE_CLOUD_CPP_BUILD_SHA256_CHECKSUM}") - # Inject vendored packages via CMAKE_PREFIX_PATH - if(ABSL_VENDORED) - list(APPEND GOOGLE_CLOUD_CPP_PREFIX_PATH_LIST ${ABSL_PREFIX}) - endif() - if(ZLIB_VENDORED) - list(APPEND GOOGLE_CLOUD_CPP_PREFIX_PATH_LIST ${ZLIB_PREFIX}) - endif() - list(APPEND GOOGLE_CLOUD_CPP_PREFIX_PATH_LIST ${CRC32C_PREFIX}) - list(APPEND GOOGLE_CLOUD_CPP_PREFIX_PATH_LIST ${NLOHMANN_JSON_PREFIX}) + prepare_fetchcontent() - string(JOIN ${EP_LIST_SEPARATOR} GOOGLE_CLOUD_CPP_PREFIX_PATH - ${GOOGLE_CLOUD_CPP_PREFIX_PATH_LIST}) + message(STATUS "Only building the google-cloud-cpp::storage component") + set(GOOGLE_CLOUD_CPP_ENABLE storage) + # We need this to build with OpenSSL 3.0. + # See also: https://github.com/googleapis/google-cloud-cpp/issues/8544 + set(GOOGLE_CLOUD_CPP_ENABLE_WERROR OFF) + set(GOOGLE_CLOUD_CPP_WITH_MOCKS OFF) + # Disable installation when embedded via FetchContent + # set(GOOGLE_CLOUD_CPP_ENABLE_INSTALL OFF) + set(BUILD_TESTING OFF) + # Unity build causes some build errors. + set(CMAKE_UNITY_BUILD FALSE) - set(GOOGLE_CLOUD_CPP_INSTALL_PREFIX - "${CMAKE_CURRENT_BINARY_DIR}/google_cloud_cpp_ep-install") - set(GOOGLE_CLOUD_CPP_INCLUDE_DIR "${GOOGLE_CLOUD_CPP_INSTALL_PREFIX}/include") - set(GOOGLE_CLOUD_CPP_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=" - -DCMAKE_INSTALL_RPATH=$ORIGIN - -DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH} - # Compile only the storage library and its dependencies. To enable - # other services (Spanner, Bigtable, etc.) add them (as a list) to this - # parameter. Each has its own `google-cloud-cpp::*` library. - -DGOOGLE_CLOUD_CPP_ENABLE=storage - # We need this to build with OpenSSL 3.0. - # See also: https://github.com/googleapis/google-cloud-cpp/issues/8544 - -DGOOGLE_CLOUD_CPP_ENABLE_WERROR=OFF - -DGOOGLE_CLOUD_CPP_WITH_MOCKS=OFF - -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY} - -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} - -DOPENSSL_SSL_LIBRARY=${OPENSSL_SSL_LIBRARY}) - - add_custom_target(google_cloud_cpp_dependencies) + fetchcontent_makeavailable(google_cloud_cpp) - if(ABSL_VENDORED) - add_dependencies(google_cloud_cpp_dependencies absl_fc) - endif() - if(ZLIB_VENDORED) - add_dependencies(google_cloud_cpp_dependencies zlib_ep) - endif() - add_dependencies(google_cloud_cpp_dependencies crc32c_fc) - if(NLOHMANN_JSON_VENDORED) - add_dependencies(google_cloud_cpp_dependencies nlohmann_json_fc) - else() - add_dependencies(google_cloud_cpp_dependencies nlohmann_json::nlohmann_json) + if(CMAKE_VERSION VERSION_LESS 3.28) + set_property(DIRECTORY ${google_cloud_cpp_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) endif() - set(GOOGLE_CLOUD_CPP_STATIC_LIBRARY_STORAGE - "${GOOGLE_CLOUD_CPP_INSTALL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}google_cloud_cpp_storage${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - - set(GOOGLE_CLOUD_CPP_STATIC_LIBRARY_REST_INTERNAL - "${GOOGLE_CLOUD_CPP_INSTALL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}google_cloud_cpp_rest_internal${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - - set(GOOGLE_CLOUD_CPP_STATIC_LIBRARY_COMMON - "${GOOGLE_CLOUD_CPP_INSTALL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}google_cloud_cpp_common${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - # Remove unused directories to save build directory storage. # 141MB -> 79MB - set(GOOGLE_CLOUD_CPP_PATCH_COMMAND ${CMAKE_COMMAND} -E) - if(CMAKE_VERSION VERSION_LESS 3.17) - list(APPEND GOOGLE_CLOUD_CPP_PATCH_COMMAND remove_directory) - else() - list(APPEND GOOGLE_CLOUD_CPP_PATCH_COMMAND rm -rf) - endif() - list(APPEND GOOGLE_CLOUD_CPP_PATCH_COMMAND ci) - - externalproject_add(google_cloud_cpp_ep - ${EP_COMMON_OPTIONS} - INSTALL_DIR ${GOOGLE_CLOUD_CPP_INSTALL_PREFIX} - URL ${google_cloud_cpp_storage_SOURCE_URL} - URL_HASH "SHA256=${ARROW_GOOGLE_CLOUD_CPP_BUILD_SHA256_CHECKSUM}" - PATCH_COMMAND ${GOOGLE_CLOUD_CPP_PATCH_COMMAND} - CMAKE_ARGS ${GOOGLE_CLOUD_CPP_CMAKE_ARGS} - BUILD_BYPRODUCTS ${GOOGLE_CLOUD_CPP_STATIC_LIBRARY_STORAGE} - ${GOOGLE_CLOUD_CPP_STATIC_LIBRARY_REST_INTERNAL} - ${GOOGLE_CLOUD_CPP_STATIC_LIBRARY_COMMON} - DEPENDS google_cloud_cpp_dependencies) - - # Work around https://gitlab.kitware.com/cmake/cmake/issues/15052 - file(MAKE_DIRECTORY ${GOOGLE_CLOUD_CPP_INCLUDE_DIR}) - - add_library(google-cloud-cpp::common STATIC IMPORTED) - set_target_properties(google-cloud-cpp::common - PROPERTIES IMPORTED_LOCATION - "${GOOGLE_CLOUD_CPP_STATIC_LIBRARY_COMMON}") - target_include_directories(google-cloud-cpp::common BEFORE - INTERFACE "${GOOGLE_CLOUD_CPP_INCLUDE_DIR}") - # Refer to https://github.com/googleapis/google-cloud-cpp/blob/main/google/cloud/google_cloud_cpp_common.cmake - # (substitute `main` for the SHA of the version we use) - # Version 1.39.0 is at a different place (they refactored after): - # https://github.com/googleapis/google-cloud-cpp/blob/29e5af8ca9b26cec62106d189b50549f4dc1c598/google/cloud/CMakeLists.txt#L146-L155 - target_link_libraries(google-cloud-cpp::common - INTERFACE absl::base - absl::cord - absl::memory - absl::optional - absl::span - absl::time - absl::variant - Threads::Threads - OpenSSL::Crypto) - - add_library(google-cloud-cpp::rest-internal STATIC IMPORTED) - set_target_properties(google-cloud-cpp::rest-internal - PROPERTIES IMPORTED_LOCATION - "${GOOGLE_CLOUD_CPP_STATIC_LIBRARY_REST_INTERNAL}") - target_include_directories(google-cloud-cpp::rest-internal BEFORE - INTERFACE "${GOOGLE_CLOUD_CPP_INCLUDE_DIR}") - target_link_libraries(google-cloud-cpp::rest-internal - INTERFACE absl::span - google-cloud-cpp::common - CURL::libcurl - nlohmann_json::nlohmann_json - OpenSSL::SSL - OpenSSL::Crypto) - if(WIN32) - target_link_libraries(google-cloud-cpp::rest-internal INTERFACE ws2_32) - endif() - - add_library(google-cloud-cpp::storage STATIC IMPORTED) - set_target_properties(google-cloud-cpp::storage - PROPERTIES IMPORTED_LOCATION - "${GOOGLE_CLOUD_CPP_STATIC_LIBRARY_STORAGE}") - target_include_directories(google-cloud-cpp::storage BEFORE - INTERFACE "${GOOGLE_CLOUD_CPP_INCLUDE_DIR}") - # Update this from https://github.com/googleapis/google-cloud-cpp/blob/main/google/cloud/storage/google_cloud_cpp_storage.cmake - target_link_libraries(google-cloud-cpp::storage - INTERFACE google-cloud-cpp::common - google-cloud-cpp::rest-internal - absl::memory - absl::strings - absl::str_format - absl::time - absl::variant - nlohmann_json::nlohmann_json - Crc32c::crc32c - CURL::libcurl - Threads::Threads - OpenSSL::SSL - OpenSSL::Crypto - ZLIB::ZLIB) - add_dependencies(google-cloud-cpp::storage google_cloud_cpp_ep) - + file(REMOVE_RECURSE "${google_cloud_cpp_SOURCE_DIR}/ci") list(APPEND ARROW_BUNDLED_STATIC_LIBS google-cloud-cpp::storage - google-cloud-cpp::rest-internal + google-cloud-cpp::rest_internal google-cloud-cpp::common) + if(ABSL_VENDORED) # Figure out what absl libraries (not header-only) are required by the # google-cloud-cpp libraries above and add them to the bundled_dependencies @@ -3739,7 +3474,13 @@ macro(build_google_cloud_cpp_storage) absl::time absl::time_zone) endif() -endmacro() + + set(ARROW_BUNDLED_STATIC_LIBS + "${ARROW_BUNDLED_STATIC_LIBS}" + PARENT_SCOPE) + + list(POP_BACK CMAKE_MESSAGE_INDENT) +endfunction() if(ARROW_WITH_GOOGLE_CLOUD_CPP) if(NOT ARROW_ENABLE_THREADING) diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt index ec8b6c1b32f2..deb6db3cdd37 100644 --- a/cpp/src/arrow/CMakeLists.txt +++ b/cpp/src/arrow/CMakeLists.txt @@ -909,6 +909,13 @@ if(ARROW_FILESYSTEM) list(APPEND ARROW_FILESYSTEM_SRCS filesystem/gcsfs.cc filesystem/gcsfs_internal.cc) set_source_files_properties(filesystem/gcsfs.cc filesystem/gcsfs_internal.cc PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) + # Suppress documentation warnings from google-cloud-cpp headers + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang") + set_source_files_properties(filesystem/gcsfs.cc filesystem/gcsfs_internal.cc + PROPERTIES COMPILE_FLAGS + "-Wno-documentation -Wno-documentation-deprecated-sync" + ) + endif() endif() if(ARROW_HDFS) list(APPEND ARROW_FILESYSTEM_SRCS filesystem/hdfs.cc) diff --git a/cpp/src/arrow/filesystem/CMakeLists.txt b/cpp/src/arrow/filesystem/CMakeLists.txt index 9c5e655f6cc7..e6330df42603 100644 --- a/cpp/src/arrow/filesystem/CMakeLists.txt +++ b/cpp/src/arrow/filesystem/CMakeLists.txt @@ -48,6 +48,12 @@ if(ARROW_GCS) filesystem EXTRA_LINK_LIBS google-cloud-cpp::storage) + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang") + if(TARGET arrow-gcsfs-test) + target_compile_options(arrow-gcsfs-test PRIVATE -Wno-documentation + -Wno-documentation-deprecated-sync) + endif() + endif() endif() if(ARROW_AZURE)