Skip to content

Commit

Permalink
ARROW-8332: [C++] Don't require Thrift compiler for Parquet build
Browse files Browse the repository at this point in the history
Closes #6829 from kou/cpp-stop-requiring-thrift-compiler

Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
  • Loading branch information
kou committed Apr 4, 2020
1 parent 9c0a5ee commit c87f148
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 28 deletions.
1 change: 0 additions & 1 deletion ci/docker/debian-10-cpp.dockerfile
Expand Up @@ -57,7 +57,6 @@ RUN apt-get update -y -q && \
pkg-config \
protobuf-compiler \
rapidjson-dev \
thrift-compiler \
tzdata \
zlib1g-dev \
wget && \
Expand Down
43 changes: 17 additions & 26 deletions cpp/cmake_modules/FindThrift.cmake
Expand Up @@ -28,25 +28,14 @@
# THRIFT_FOUND, If false, do not try to use ant

function(EXTRACT_THRIFT_VERSION)
exec_program(${THRIFT_COMPILER}
ARGS
-version
OUTPUT_VARIABLE
THRIFT_VERSION
RETURN_VALUE
THRIFT_RETURN)
# We're expecting OUTPUT_VARIABLE to look like one of these:
# 0.9.3
# Thrift version 0.11.0
if(THRIFT_VERSION MATCHES "Thrift version")
string(REGEX MATCH "Thrift version (([0-9]+\\.?)+)" _ "${THRIFT_VERSION}")
if(NOT CMAKE_MATCH_1)
message(SEND_ERROR "Could not extract Thrift version. "
"Version output: ${THRIFT_VERSION}")
endif()
set(THRIFT_VERSION "${CMAKE_MATCH_1}" PARENT_SCOPE)
else()
if(THRIFT_INCLUDE_DIR)
file(READ "${THRIFT_INCLUDE_DIR}/thrift/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}" PARENT_SCOPE)
else()
set(THRIFT_VERSION "" PARENT_SCOPE)
endif()
endfunction(EXTRACT_THRIFT_VERSION)

Expand All @@ -62,9 +51,7 @@ if(Thrift_ROOT)
PATHS ${Thrift_ROOT}
PATH_SUFFIXES "include")
find_program(THRIFT_COMPILER thrift PATHS ${Thrift_ROOT} PATH_SUFFIXES "bin")
if(THRIFT_COMPILER)
extract_thrift_version()
endif()
extract_thrift_version()
else()
# THRIFT-4760: The pkgconfig files are currently only installed when using autotools.
# Starting with 0.13, they are also installed for the CMake-based installations of Thrift.
Expand All @@ -87,19 +74,23 @@ else()
PATH_SUFFIXES "lib/${CMAKE_LIBRARY_ARCHITECTURE}" "lib")
find_path(THRIFT_INCLUDE_DIR thrift/Thrift.h PATH_SUFFIXES "include")
find_program(THRIFT_COMPILER thrift PATH_SUFFIXES "bin")
if(THRIFT_COMPILER)
extract_thrift_version()
endif()
extract_thrift_version()
endif()
endif()

if(THRIFT_COMPILER)
set(Thrift_COMPILER_FOUND TRUE)
else()
set(Thrift_COMPILER_FOUND FALSE)
endif()

find_package_handle_standard_args(Thrift
REQUIRED_VARS
THRIFT_STATIC_LIB
THRIFT_INCLUDE_DIR
THRIFT_COMPILER
VERSION_VAR
THRIFT_VERSION)
THRIFT_VERSION
HANDLE_COMPONENTS)

if(Thrift_FOUND OR THRIFT_FOUND)
set(Thrift_FOUND TRUE)
Expand Down
7 changes: 6 additions & 1 deletion cpp/cmake_modules/ThirdpartyToolchain.cmake
Expand Up @@ -223,6 +223,11 @@ endif()

if(ARROW_HIVESERVER2 OR ARROW_PARQUET)
set(ARROW_WITH_THRIFT ON)
if(ARROW_HIVESERVER2)
set(ARROW_THRIFT_REQUIRED_COMPONENTS COMPILER)
else()
set(ARROW_THRIFT_REQUIRED_COMPONENTS)
endif()
else()
set(ARROW_WITH_THRIFT OFF)
endif()
Expand Down Expand Up @@ -659,7 +664,7 @@ set(Boost_ADDITIONAL_VERSIONS
# Thrift needs Boost if we're building the bundled version,
# 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)
find_package(Thrift 0.11.0 MODULE COMPONENTS ${ARROW_THRIFT_REQUIRED_COMPONENTS})
if(NOT Thrift_FOUND AND NOT THRIFT_FOUND)
set(Thrift_SOURCE "BUNDLED")
endif()
Expand Down

0 comments on commit c87f148

Please sign in to comment.