Kouhei Sutou created ORC-1732:
---------------------------------
Summary: [C++] Can't detect Protobuf installed by Homebrew on macOS
Key: ORC-1732
URL: https://issues.apache.org/jira/browse/ORC-1732
Project: ORC
Issue Type: Improvement
Components: C++
Reporter: Kouhei Sutou
Downstream issue: https://github.com/apache/arrow/issues/42149
We can use system Protobuf if we specify one of them:
* PROTOBUF_HOME environment variable
* Protobuf_ROOT CMake variable
* Protobuf_ROOT environment variable
* PROTOBUF_ROOT CMake variable
* PROTOBUF_ROOT environment variable
See also:
*
https://github.com/apache/orc/blob/8003801e78ff6156a1f18ec62b631d6ba4768b00/cmake_modules/ThirdpartyToolchain.cmake#L466
*
https://github.com/apache/orc/blob/8003801e78ff6156a1f18ec62b631d6ba4768b00/cmake_modules/ThirdpartyToolchain.cmake#L80-L90
If system Protobuf CMake package is found, we extract include directory from
libprotobuf::protoc CMake target:
https://github.com/apache/orc/blob/8003801e78ff6156a1f18ec62b631d6ba4768b00/cmake_modules/FindProtobuf.cmake#L66
But libprotobuf::protoc CMake target doesn't have include directory
configuration:
https://github.com/protocolbuffers/protobuf/blob/0302c4c43821ac893e8f1071576f80edef5c6398/cmake/libprotoc.cmake#L19-L20
If we can't extract include directory, system Protobuf detection is failed:
https://github.com/apache/orc/blob/8003801e78ff6156a1f18ec62b631d6ba4768b00/cmake_modules/FindProtobuf.cmake#L101-L107
So we never detect system Protobuf by system Protobuf CMake package.
FYI: We can extract include directory from protobuf::libprotobuf (not
...::libprotoc) CMake target:
{noformat}
diff --git a/cmake_modules/FindProtobuf.cmake b/cmake_modules/FindProtobuf.cmake
index 82429a23..ab73195c 100644
--- a/cmake_modules/FindProtobuf.cmake
+++ b/cmake_modules/FindProtobuf.cmake
@@ -63,7 +63,7 @@ if (Protobuf_FOUND)
set (PROTOC_STATIC_LIB protobuf::libprotoc)
endif ()
- get_target_property (PROTOBUF_INCLUDE_DIR protobuf::libprotoc
INTERFACE_INCLUDE_DIRECTORIES)
+ get_target_property (PROTOBUF_INCLUDE_DIR protobuf::libprotobuf
INTERFACE_INCLUDE_DIRECTORIES)
else()
find_path (PROTOBUF_INCLUDE_DIR google/protobuf/io/zero_copy_stream.h HINTS
{noformat}
But there is a test failure with Protobuf 27.1:
{noformat}
[ RUN ] TestFileScan.testErrorHandling
/Users/runner/work/orc/orc/tools/test/TestFileScan.cc:211: Failure
Expected: (std::string::npos) != (error.find(errorMsg)), actual:
18446744073709551615 vs 18446744073709551615
Caught exception in
/Users/runner/work/orc/orc/examples/corrupt/stripe_footer_bad_column_encodings.orc:
bad StripeFooter from
zlib(/Users/runner/work/orc/orc/examples/corrupt/stripe_footer_bad_column_encodings.orc
from 336 for 79)
[ FAILED ] TestFileScan.testErrorHandling (126 ms)
{noformat}
See also:
* The above change + minimal CI configuration on macOS used when I looked at
this: https://github.com/apache/orc/compare/main...kou:orc:cpp-protobuf?expand=1
* A CI result:
https://github.com/kou/orc/actions/runs/9628707685/job/26557240526#step:6:126
--
This message was sent by Atlassian Jira
(v8.20.10#820010)