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)

Reply via email to