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)