diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 2d7baf118..ace45d35b 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -699,7 +699,7 @@ endif() if(ARROW_WITH_BROTLI) # Order is important for static linking - set(ARROW_BROTLI_LIBS Brotli::brotlienc Brotli::brotlidec Brotli::brotlicommon) + set(ARROW_BROTLI_LIBS unofficial::brotli::brotlienc unofficial::brotli::brotlidec unofficial::brotli::brotlicommon) list(APPEND ARROW_LINK_LIBS ${ARROW_BROTLI_LIBS}) list(APPEND ARROW_STATIC_LINK_LIBS ${ARROW_BROTLI_LIBS}) if(Brotli_SOURCE STREQUAL "SYSTEM") @@ -715,9 +715,9 @@ if(ARROW_WITH_BZ2) endif() if(ARROW_WITH_LZ4) - list(APPEND ARROW_STATIC_LINK_LIBS LZ4::lz4) + list(APPEND ARROW_STATIC_LINK_LIBS lz4::lz4) if(Lz4_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS LZ4::lz4) + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS lz4::lz4) endif() endif() @@ -787,10 +787,10 @@ if(ARROW_WITH_OPENTELEMETRY) endif() if(ARROW_WITH_UTF8PROC) - list(APPEND ARROW_LINK_LIBS utf8proc::utf8proc) - list(APPEND ARROW_STATIC_LINK_LIBS utf8proc::utf8proc) + list(APPEND ARROW_LINK_LIBS utf8proc) + list(APPEND ARROW_STATIC_LINK_LIBS utf8proc) if(utf8proc_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS utf8proc::utf8proc) + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS utf8proc) endif() endif() diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index bc389521b..1b358ce70 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -53,7 +53,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES AWSSDK benchmark Boost - Brotli + unofficial-brotli BZip2 c-ares gflags @@ -62,7 +62,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES gRPC GTest LLVM - Lz4 + lz4 opentelemetry-cpp ORC re2 @@ -70,7 +70,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES RapidJSON Snappy Thrift - utf8proc + unofficial-utf8proc xsimd ZLIB zstd) @@ -893,17 +893,7 @@ set(Boost_ADDITIONAL_VERSIONS # so we first need to determine whether we're building it if(ARROW_WITH_THRIFT AND Thrift_SOURCE STREQUAL "AUTO") find_package(Thrift 0.11.0 MODULE COMPONENTS ${ARROW_THRIFT_REQUIRED_COMPONENTS}) - if(Thrift_FOUND) - find_package(PkgConfig QUIET) - pkg_check_modules(THRIFT_PC - thrift - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH - QUIET) - if(THRIFT_PC_FOUND) - string(APPEND ARROW_PC_REQUIRES_PRIVATE " thrift") - endif() - else() + if(NOT Thrift_FOUND AND NOT THRIFT_FOUND) set(Thrift_SOURCE "BUNDLED") endif() endif() @@ -1038,7 +1028,7 @@ macro(build_snappy) endmacro() if(ARROW_WITH_SNAPPY) - resolve_dependency(Snappy PC_PACKAGE_NAMES snappy) + resolve_dependency(Snappy USE_CONFIG TRUE PC_PACKAGE_NAMES snappy) if(${Snappy_SOURCE} STREQUAL "SYSTEM" AND NOT snappy_PC_FOUND) get_target_property(SNAPPY_LIB Snappy::snappy IMPORTED_LOCATION) string(APPEND ARROW_PC_LIBS_PRIVATE " ${SNAPPY_LIB}") @@ -1108,10 +1098,16 @@ macro(build_brotli) endmacro() if(ARROW_WITH_BROTLI) - resolve_dependency(Brotli PC_PACKAGE_NAMES libbrotlidec libbrotlienc) + set(unofficial-brotli_SOURCE "SYSTEM") + resolve_dependency(unofficial-brotli USE_CONFIG TRUE PC_PACKAGE_NAMES libbrotlidec libbrotlienc) # TODO: Don't use global includes but rather target_include_directories - get_target_property(BROTLI_INCLUDE_DIR Brotli::brotlicommon - INTERFACE_INCLUDE_DIRECTORIES) + if (BUILD_SHARED_LIBS) + get_target_property(BROTLI_INCLUDE_DIR unofficial::brotli::brotlicommon + INTERFACE_INCLUDE_DIRECTORIES) + else() + get_target_property(BROTLI_INCLUDE_DIR unofficial::brotli::brotlicommon-static + INTERFACE_INCLUDE_DIRECTORIES) + endif() include_directories(SYSTEM ${BROTLI_INCLUDE_DIR}) endif() @@ -1228,7 +1224,7 @@ macro(build_glog) endmacro() if(ARROW_USE_GLOG) - resolve_dependency(GLOG PC_PACKAGE_NAMES libglog) + resolve_dependency(glog USE_CONFIG TRUE PC_PACKAGE_NAMES libglog) # TODO: Don't use global includes but rather target_include_directories get_target_property(GLOG_INCLUDE_DIR glog::glog INTERFACE_INCLUDE_DIRECTORIES) include_directories(SYSTEM ${GLOG_INCLUDE_DIR}) @@ -1302,8 +1298,7 @@ endmacro() if(ARROW_NEED_GFLAGS) set(ARROW_GFLAGS_REQUIRED_VERSION "2.1.0") resolve_dependency(gflags - HAVE_ALT - TRUE + USE_CONFIG TRUE REQUIRED_VERSION ${ARROW_GFLAGS_REQUIRED_VERSION} IS_RUNTIME_DEPENDENCY @@ -1402,9 +1397,10 @@ endmacro() if(ARROW_WITH_THRIFT) # We already may have looked for Thrift earlier, when considering whether # to build Boost, so don't look again if already found. - if(NOT Thrift_FOUND) + if(TRUE) # Thrift c++ code generated by 0.13 requires 0.11 or greater resolve_dependency(Thrift + USE_CONFIG TRUE REQUIRED_VERSION 0.11.0 PC_PACKAGE_NAMES @@ -1413,6 +1409,14 @@ if(ARROW_WITH_THRIFT) # TODO: Don't use global includes but rather target_include_directories include_directories(SYSTEM ${THRIFT_INCLUDE_DIR}) + if(THRIFT_INCLUDE_DIR) + file(READ "${THRIFT_INCLUDE_DIR}/config.h" THRIFT_CONFIG_H_CONTENT) + string(REGEX MATCH "#define PACKAGE_VERSION \"[0-9.]+\"" THRIFT_VERSION_DEFINITION + "${THRIFT_CONFIG_H_CONTENT}") + string(REGEX MATCH "[0-9.]+" THRIFT_VERSION "${THRIFT_VERSION_DEFINITION}") + set(THRIFT_VERSION "${THRIFT_VERSION}") + endif() + string(REPLACE "." ";" VERSION_LIST ${THRIFT_VERSION}) list(GET VERSION_LIST 0 THRIFT_VERSION_MAJOR) list(GET VERSION_LIST 1 THRIFT_VERSION_MINOR) @@ -1528,6 +1532,7 @@ if(ARROW_WITH_PROTOBUF) set(ARROW_PROTOBUF_REQUIRED_VERSION "2.6.1") endif() resolve_dependency(Protobuf + USE_CONFIG TRUE REQUIRED_VERSION ${ARROW_PROTOBUF_REQUIRED_VERSION} PC_PACKAGE_NAMES @@ -1538,6 +1543,10 @@ if(ARROW_WITH_PROTOBUF) endif() # TODO: Don't use global includes but rather target_include_directories + if (TARGET protobuf::libprotobuf) + get_target_property(PROTOBUF_INCLUDE_DIR protobuf::libprotobuf + INTERFACE_INCLUDE_DIRECTORIES) + endif() include_directories(SYSTEM ${PROTOBUF_INCLUDE_DIR}) if(TARGET arrow::protobuf::libprotobuf) @@ -1586,12 +1595,18 @@ if(ARROW_WITH_PROTOBUF) # Log protobuf paths as we often see issues with mixed sources for # the libraries and protoc. + if (NOT TARGET protobuf::protoc) get_target_property(PROTOBUF_PROTOC_EXECUTABLE ${ARROW_PROTOBUF_PROTOC} IMPORTED_LOCATION) + endif() message(STATUS "Found protoc: ${PROTOBUF_PROTOC_EXECUTABLE}") # Protobuf_PROTOC_LIBRARY is set by all versions of FindProtobuf.cmake message(STATUS "Found libprotoc: ${Protobuf_PROTOC_LIBRARY}") + if (NOT TARGET protobuf::libprotobuf) get_target_property(PROTOBUF_LIBRARY ${ARROW_PROTOBUF_LIBPROTOBUF} IMPORTED_LOCATION) + else() + set(PROTOBUF_LIBRARY protobuf::libprotobuf) + endif() message(STATUS "Found libprotobuf: ${PROTOBUF_LIBRARY}") message(STATUS "Found protobuf headers: ${PROTOBUF_INCLUDE_DIR}") endif() @@ -2001,7 +2016,7 @@ endmacro() if(ARROW_WITH_RAPIDJSON) set(ARROW_RAPIDJSON_REQUIRED_VERSION "1.1.0") resolve_dependency(RapidJSON - HAVE_ALT + USE_CONFIG TRUE REQUIRED_VERSION ${ARROW_RAPIDJSON_REQUIRED_VERSION} @@ -2140,10 +2155,11 @@ macro(build_lz4) endmacro() if(ARROW_WITH_LZ4) - resolve_dependency(Lz4 PC_PACKAGE_NAMES liblz4) + set(lz4_SOURCE "SYSTEM") + resolve_dependency(lz4 USE_CONFIG TRUE PC_PACKAGE_NAMES liblz4) # TODO: Don't use global includes but rather target_include_directories - get_target_property(LZ4_INCLUDE_DIR LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES) + get_target_property(LZ4_INCLUDE_DIR lz4::lz4 INTERFACE_INCLUDE_DIRECTORIES) include_directories(SYSTEM ${LZ4_INCLUDE_DIR}) endif() @@ -2207,7 +2223,7 @@ endmacro() if(ARROW_WITH_ZSTD) # ARROW-13384: ZSTD_minCLevel was added in v1.4.0, required by ARROW-13091 resolve_dependency(zstd - PC_PACKAGE_NAMES + USE_CONFIG TRUE PC_PACKAGE_NAMES libzstd REQUIRED_VERSION 1.4.0) @@ -2390,9 +2406,8 @@ macro(build_utf8proc) endmacro() if(ARROW_WITH_UTF8PROC) - resolve_dependency(utf8proc - REQUIRED_VERSION - "2.2.0" + resolve_dependency(unofficial-utf8proc + USE_CONFIG TRUE PC_PACKAGE_NAMES libutf8proc) @@ -2400,7 +2415,7 @@ if(ARROW_WITH_UTF8PROC) # TODO: Don't use global definitions but rather # target_compile_definitions or target_link_libraries - get_target_property(UTF8PROC_COMPILER_DEFINITIONS utf8proc::utf8proc + get_target_property(UTF8PROC_COMPILER_DEFINITIONS utf8proc INTERFACE_COMPILER_DEFINITIONS) if(UTF8PROC_COMPILER_DEFINITIONS) add_definitions(-D${UTF8PROC_COMPILER_DEFINITIONS}) @@ -2408,7 +2423,7 @@ if(ARROW_WITH_UTF8PROC) # TODO: Don't use global includes but rather # target_include_directories or target_link_libraries - get_target_property(UTF8PROC_INCLUDE_DIR utf8proc::utf8proc + get_target_property(UTF8PROC_INCLUDE_DIR utf8proc INTERFACE_INCLUDE_DIRECTORIES) include_directories(SYSTEM ${UTF8PROC_INCLUDE_DIR}) endif() @@ -3317,7 +3332,7 @@ endmacro() macro(build_grpc) resolve_dependency(c-ares - HAVE_ALT + USE_CONFIG TRUE PC_PACKAGE_NAMES libcares) @@ -3555,7 +3570,7 @@ if(ARROW_WITH_GRPC) set(gRPC_SOURCE "${Protobuf_SOURCE}") endif() resolve_dependency(gRPC - HAVE_ALT + USE_CONFIG TRUE REQUIRED_VERSION ${ARROW_GRPC_REQUIRED_VERSION} @@ -3565,6 +3580,10 @@ if(ARROW_WITH_GRPC) # TODO: Don't use global includes but rather target_include_directories get_target_property(GRPC_INCLUDE_DIR gRPC::grpc++ INTERFACE_INCLUDE_DIRECTORIES) include_directories(SYSTEM ${GRPC_INCLUDE_DIR}) + if (ABSL_USE_CXX17) + message(STATUS "Found absl uses CXX17, enable CXX17 feature.") + set(CMAKE_CXX_STANDARD 17) + endif() if(GRPC_VENDORED) set(GRPCPP_PP_INCLUDE TRUE) @@ -4315,7 +4334,8 @@ if(ARROW_S3) s3 transfer identity-management - sts) + sts + CONFIG) endif() # Restore previous value of BUILD_SHARED_LIBS diff --git a/cpp/src/arrow/adapters/orc/CMakeLists.txt b/cpp/src/arrow/adapters/orc/CMakeLists.txt index b1b6847cf..444a45e4e 100644 --- a/cpp/src/arrow/adapters/orc/CMakeLists.txt +++ b/cpp/src/arrow/adapters/orc/CMakeLists.txt @@ -30,7 +30,7 @@ set(ORC_MIN_TEST_LIBS GTest::gtest_main GTest::gtest Snappy::snappy - LZ4::lz4 + lz4::lz4 ZLIB::ZLIB) if(ARROW_BUILD_STATIC)